Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python @app.route返回html和@api.route返回字符串_Python_Api_Flask - Fatal编程技术网

Python @app.route返回html和@api.route返回字符串

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

我使用烧瓶来设置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 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可以完成这项工作。可在此处找到替代解决方案