暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Flask 用户指南 - 快速入门(5)

数据库杂货铺 2022-02-10
450

重定向和错误

 

要将用户重定向到另一个点,请使用 redirect() 函数;要用指定错误代码中止请求,请使用 abort() 函数:

 

from flask import abort, redirect, url_for


@app.route('/')
def index():
return redirect(url_for('login'))


@app.route('/login')
def login():
abort(401)
this_is_never_executed()

 

这是一个毫无意义的例子,因为用户将被从 index 重定向到一个他们无法访问的页面(401表示拒绝访问),但它显示了这是如何工作的。

 

默认情况下,每个错误代码都会显示一个黑白错误页面。如果要自定义错误页面,可以使用 errorhandler() 装饰器:

 

from flask import render_template


@app.errorhandler(404)
def page_not_found(error):
return render_template('page_not_found.html'), 404

 

请注意 render_template() 调用之后的 404。这告诉 Flask,该页面的状态代码应该是 404,这意味着找不到。默认情况下为 200,这意味着:一切顺利。

 

Response

 

视图函数的返回值会自动转换为响应对象。如果返回值是一个字符串,它将被转换为一个响应对象,该字符串作为响应体,一个 200 OK 状态代码和一个 text/html mimetype。如果返回值是字典类型,则调用 jsonify() 生成响应对象。Flask 用于将返回值转换为响应对象的逻辑如下:

 

1. 如果返回了正确类型的响应对象,则直接从视图返回。

 

2. 如果是字符串,则会使用该数据和默认参数创建一个响应对象。

 

3. 如果是字典数据,则使用 jsonify 创建响应对象。

 

4. 如果返回一个元组,元组中的项可以提供额外的信息。这样的元组必须是 (response, status)(response, headers) (response, status, headers) 形式。status 值将覆盖状态代码,headers 可以是具有附加头部值的列表或字典。

 

5. 如果这些都不起作用,Flask 将假定返回值是有效的 WSGI 应用程序,并将其转换为响应对象。

 

如果想在视图中获得结果响应对象,可以使用 make_response() 函数。

 

假设有这样一个视图:

 

from flask import render_template


@app.errorhandler(404)
def not_found(error):
return render_template('error.html'), 404

 

只需使用 make_response() 包装返回表达式,获取响应对象并修改,然后把它返回:

 

from flask import make_response


@app.errorhandler(404)
def not_found(error):
resp = make_response(render_template('error.html'), 404)
resp.headers['X-Something'] = 'A value'
return resp

 

带有 JSON API

 

编写 API 时,常见的响应格式是 JSON。使用 Flask 编写这样的API很容易。如果从视图返回字典数据,它将转换为 JSON 响应。

 

@app.route("/me")
def me_api():
user = get_current_user()
return {
"username": user.username,
"theme": user.theme,
"image": url_for("user_image", filename=user.image),
}

 

根据 API 设计,你可能希望为字典数据以外的类型创建 JSON 响应。在这种情况下,请使用 jsonify() 函数,该函数将序列化任何受支持的 JSON 数据类型。或者在 Flask 社区寻找支持更复杂应用程序的扩展。

 

 

 

原文:

https://flask.palletsprojects.com/en/2.0.x/quickstart/


文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论