You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask中@app.route与@api.route返回内容差异的原因及修改方法

为什么Flask原生路由返回HTML,而Flask-RESTPlus返回转义字符串?

问题根源

这两者的行为差异核心在于默认响应类型的区别:

  • Flask原生的@app.route视图函数,默认返回的响应Content-Type是text/html。当你返回包含HTML标签的字符串时,浏览器会将其当作HTML内容解析,所以能正常渲染出<h1>这类标签的效果。
  • Flask-RESTPlus是专为RESTful API打造的工具,它默认会把响应序列化为JSON格式,Content-Type为application/json。此时你返回的字符串会被当作JSON的字符串值处理,所有特殊字符(比如<、>)都会被自动转义成&lt;、&gt;,最终浏览器显示的就是转义后的原始字符串。

解决方法(无需Jinja的调整方案)

如果你想让Flask-RESTPlus的接口也返回可被解析的HTML,需要手动构建响应对象并指定正确的Content-Type。可以借助Flask提供的make_response函数实现:

首先导入make_response:

from flask import Flask, request, make_response

然后修改HelloWorld类的get方法:

@api.route('/hello')
class HelloWorld(Resource):
    def get(self):
        language = request.args.get('language')
        message = '<h1>Hello world! I speak {}</h1>'.format(language)
        # 构建响应并指定Content-Type为text/html
        resp = make_response(message)
        resp.headers['Content-Type'] = 'text/html'
        return resp

修改完成后,访问/hello接口时,响应的Content-Type会被设置为text/html,浏览器就会像处理/test1接口一样,正常解析渲染HTML标签了。

小提示:如果你的接口是纯API场景,返回HTML其实不符合RESTful的设计规范,但如果是特殊业务需求,上面的方法完全可以满足你的要求。

内容的提问来源于stack exchange,提问作者David G.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:45:07