在烧瓶中返回 HTTP 状态码 201
Posted
技术标签:
【中文标题】在烧瓶中返回 HTTP 状态码 201【英文标题】:Return HTTP status code 201 in flask 【发布时间】:2011-12-11 01:35:23 【问题描述】:我们将 Flask 用于我们的一个 API,我只是想知道是否有人知道如何返回 HTTP 响应 201?
对于404等错误我们可以调用:
from flask import abort
abort(404)
但是对于 201 我得到了
LookupError: 201 也不例外
我是否需要在文档中创建自己的异常,例如 this?
【问题讨论】:
return '', 201
这个,因为 201 不是错误。这是一个成功的状态。
【参考方案1】:
您可以使用 Response 返回任何 http 状态代码。
> from flask import Response
> return Response("'a':'b'", status=201, mimetype='application/json')
【讨论】:
这应该是公认的答案,这是首选方法。【参考方案2】:你可以阅读它here.
return render_template('page.html'), 201
【讨论】:
这需要page.html
...它不会自己工作。
对我来说,这种类型的错误处理只有在 InvalidUsage 是 werkzeug.exceptions.HTTPException 的子节点而不是一般异常时才有效(在 IIS 之后)【参考方案3】:
由于在返回语句中缺少建议的发送状态代码 如果你将它存储在像
这样的变量中notfound = 404
invalid = 403
ok = 200
并使用
return xyz, notfound
确保它的类型是 int 而不是 str。当我面临这个小问题时 这里也是全球遵循的状态代码列表 http://www.w3.org/Protocols/HTTP/HTRESP.html
希望对你有帮助。
【讨论】:
好方法,但最好像status.NOT_FOUND
这样的模块来访问它们【参考方案4】:
你可以的
result = 'a': 'b'
return result, 201
如果您想在响应中返回 JSON 数据以及错误代码 您可以阅读有关响应 here 和 here 的 make_response API 详细信息
【讨论】:
你甚至不需要 jsonify 客户端django??我们在谈论烧瓶! 哎呀@pihentagy 很抱歉混淆了。更新解决方案【参考方案5】:在您的烧瓶代码中,理想情况下,您还应该尽可能频繁地指定 MIME 类型:
return html_page_str, 200, 'ContentType':'text/html'
return json.dumps('success':True), 200, 'ContentType':'application/json'
...等
【讨论】:
【参考方案6】:你也可以使用 flask_api 来发送响应
from flask_api import status
@app.route('/your-api/')
def empty_view(self):
content = 'your content here'
return content, status.HTTP_201_CREATED
你可以在这里找到参考http://www.flaskapi.org/api-guide/status-codes/
【讨论】:
【参考方案7】:抄袭Luc'scomment here,但要返回空白响应,例如201
,最简单的选择是在您的路由中使用以下返回。
return "", 201
例如:
@app.route('/database', methods=["PUT"])
def database():
update_database(request)
return "", 201
【讨论】:
【参考方案8】:取决于 API 的创建方式,通常使用 201(已创建)您将返回已创建的资源。例如,如果它正在创建一个用户帐户,您将执行以下操作:
return "data": "username": "test","id":"fdsf345", 201
注意后缀数字是返回的状态码。
或者,您可能希望向客户端发送消息,例如:
return "msg": "Created Successfully", 201
【讨论】:
【参考方案9】:在我的情况下,我必须结合以上内容才能使其工作
return Response(json.dumps('Error': 'Error in payload'),
status=422,
mimetype="application/json")
【讨论】:
【参考方案10】:所以,如果您使用 API 的 flask_restful
包
返回 201 会变成这样
def bla(*args, **kwargs):
...
return data, 201
其中data
应该是任何可散列/JsonSerialable 值,如字典、字符串。
【讨论】:
【参考方案11】:对于错误 404 你可以
def post():
#either pass or get error
post = Model.query.get_or_404()
return jsonify(post.to_json())
201成功
def new_post():
post = Model.from_json(request.json)
return jsonify(post.to_json()), 201, \
'Location': url_for('api.get_post', id=post.id, _external=True)
【讨论】:
【参考方案12】:您只需要在返回数据后添加您的状态码,如下所示:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world(): # put application's code here
return 'Hello World!',201
if __name__ == '__main__':
app.run()
这是一个基本的烧瓶项目。启动后你会发现当我们请求http://127.0.0.1:5000/
时,你会从web broswer console得到一个状态201。
【讨论】:
欢迎来到 SO。这是一个十年前的问题,已经回答了! :o)以上是关于在烧瓶中返回 HTTP 状态码 201的主要内容,如果未能解决你的问题,请参考以下文章