一、Flask 响应
视图函数中返回的内容既响应,响应内容的数据类型可以是字符串,也可以是元组,响应内容可以包含响应体、状态码或者响应头。
增加视图函数 resp_str,响应内容为字符串。
@app.route('/resp') def resp_str(): # 响应字符串 return 'SUCCESS' 复制代码
增加视图函数,在响应中添加状态码,此时的响应内容类型为一个元组。
@app.route('/resp/status') def resp_status(): # 响应状态码 return 'SUCCESS', 202 复制代码
增加视图函数,在响应中添加响应头,响应头的形式为字段形式。
@app.route('/resp/headers') def resp_headers(): return 'SUCCESS', 200, {'user': 'stark'} 复制代码
也可以 make_response 构造一个响应对象并返回,在 app.py 中新增视图函数
from flask import make_response @app.route('/resp/obj') def resp_obj(): resp = make_response('SUCCESS, Response Object By make_response()', 200, {'user': 'stark'}) resp.headers['token'] = 'ewaenkfaefadfeat' return resp 复制代码
响应HTML
将响应体改为 html 内容就可以响应 HTML 页面
@app.route('/resp/obj') def resp_obj(): html = '<h1>响应的HTML内容</h1>' # resp = make_response('SUCCESS, Response Object By make_response()', 200, {'user': 'stark'}) resp = make_response(html, 200) resp.headers['token'] = 'ewaenkfaefadfeat' return resp 复制代码
响应HTML模板
在 templates 目录下新建一个 base.html 页面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"/> <title>HTML</title> </head> <body> <h1>这是响应的HTML模板</h1> </body> </html> 复制代码
修改视图函数,该视图函数响应 HTML 内容。
@app.route('/resp/obj') def resp_obj(): # html = '<h1>响应的HTML内容</h1>' # resp = make_response('SUCCESS, Response Object By make_response()', 200, {'user': 'stark'}) # resp = make_response(html, 200) html = render_template('base.html') resp = make_response(html, 200) resp.headers['token'] = 'ewaenkfaefadfeat' return resp 复制代码
重定向
在 Flask 视图函数中,redirect 函数可以实现重定向,重定向操作会向后端服务发出两次请求。
在 app.py 中增加视图函数 handle_redirect 和 hallo 函数。
@app.route('/handle_redirect') def handle_redirect(): return redirect('/hallo') @app.route('/hallo') def hallo(): return 'Hallo Flask' 复制代码
保存后在浏览器地址栏中输入 /handle_redirect,可以看到页面会自动跳转到 /hallo 页面
查看请求过程可以确定发出了两次请求,第一次请求 /handle_redirect 时,响应码为 302,既重定向操作,然后会重定向到 /hallo 页面
错误处理
abort() 函数可以对错误进行处理且不需要 return,直接返回错误
定义一个视图函数
@app.route('/handle_abort') def handle_abort(): abort(404) 复制代码
返回的是 abort 函数默认的错误页面。
定制 abort 返回的错误页面
@app.errorhandler(403) def server_error(err): return '<h1>USER NOT FOUND ERROR</h1>' @app.route('/handle_abort') def handle_abort(): user = None if user == None: abort(403) return 'SUCCESS' 复制代码