Python @app.route返回html和@api.route返回字符串
我使用烧瓶来设置API。对于一些简单的测试,我返回html标记。但是,使用Flask_restplus返回一个字符串。我想知道为什么以及如何改变这一点?当然,我可以使用Jinja,但我想知道如何在这个小示例中更改它Python @app.route返回html和@api.route返回字符串,python,api,flask,Python,Api,Flask,我使用烧瓶来设置API。对于一些简单的测试,我返回html标记。但是,使用Flask_restplus返回一个字符串。我想知道为什么以及如何改变这一点?当然,我可以使用Jinja,但我想知道如何在这个小示例中更改它 from flask import Flask, request from flask_restplus import Resource, Api, fields app = Flask(__name__) api = Api(app) # This code returns H
from flask import Flask, request
from flask_restplus import Resource, Api, fields
app = Flask(__name__)
api = Api(app)
# This code returns HTML
@app.route('/test1')
def language():
language = request.args.get('language')
message = '<h1>Hello world! I speak {}</h1>'.format(language)
return message
# This code returns string e.g. '<h1>Hello wolrd! I speak english</h1>
@api.route('/hello')
class HelloWorld(Resource):
def get(self):
language = request.args.get('language')
message = '<h1>Hello world! I speak {}</h1>'.format(language)
return message
if __name__ == '__main__':
app.debug = True
app.run(port=4996)
从烧瓶导入烧瓶,请求
从restplus导入资源、Api和字段
app=烧瓶(名称)
api=api(应用程序)
#此代码返回HTML
@app.route(“/test1”)
def language():
language=request.args.get('language')
message='你好,世界!我说{}。格式(语言)
回信
#此代码返回字符串,例如“Hello World!我说英语
@api.route(“/hello”)
类HelloWorld(资源):
def get(自我):
language=request.args.get('language')
message='你好,世界!我说{}。格式(语言)
回信
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.debug=True
应用程序运行(端口=4996)
如注释所示,@app.route返回html,@api.route返回字符串以下是代码:
from flask import Flask, request, jsonify, Response
from flask_restplus import Resource, Api, fields
app = Flask(__name__)
api = Api(app)
# This code returns HTML
@app.route('/test1')
def language():
language = request.args.get('language')
message = '<h1>Hello world! I speak {}</h1>'.format(language)
return message
def output_html(data, code, headers=None):
resp = Response(data, mimetype='text/html', headers=headers)
resp.status_code = code
return resp
# This code returns string e.g. '<h1>Hello wolrd! I speak english</h1>
@api.route('/hello')
class HelloWorld(Resource):
def get(self):
language = request.args.get('language')
message = '<h1>Hello world! I speak {}</h1>'.format(language)
return output_html(message, 200)
if __name__ == '__main__':
app.debug = True
app.run(port=4996)
从烧瓶导入烧瓶,请求,jsonify,响应
从restplus导入资源、Api和字段
app=烧瓶(名称)
api=api(应用程序)
#此代码返回HTML
@app.route(“/test1”)
def language():
language=request.args.get('language')
message='你好,世界!我说{}。格式(语言)
回信
def输出_html(数据、代码、标题=无):
resp=Response(数据,mimetype='text/html',headers=headers)
响应状态\代码=代码
返回响应
#此代码返回字符串,例如“Hello World!我说英语
@api.route(“/hello”)
类HelloWorld(资源):
def get(自我):
language=request.args.get('language')
message='你好,世界!我说{}。格式(语言)
返回输出\u html(消息,200)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app.debug=True
应用程序运行(端口=4996)
此返回的值类型是什么?请检查响应的内容类型标题。通常,@api
调用应该返回一个更适合api的调用,而@app
根据默认值返回text/html
。flask_restplus会秘密地执行一些操作以正确转换您的请求。在这两种情况下,您都应该检查标题。@KlausD。-谢谢你的提示。虽然这个答案可能有效,但最好是解释一下为什么或者如何有效。谢谢!它解决了我的问题。我找到了解释:Restplus确实返回application/json作为默认头。现在您无法通过restplus更改它。但正如@giridhar kadam所建议的,flask Response可以完成这项工作。可在此处找到替代解决方案