处理响应
flask的请求信息都在request
from flask import Flask, request
request.method 提交的方法
request.args get请求提及的数据 类似字典类型
request.form post请求提交的数据 类似字典类型
request.values post和get提交的数据总和 类似字段类型
request.cookies 客户端所带的cookie
request.headers 请求头
request.path 不带域名,请求路径
request.full_path 不带域名,带参数的请求路径
request.script_root
request.url 带域名带参数的请求路径
request.base_url 带域名请求路径
request.url_root 域名
request.host_url 域名
request.host 127.0.0.1:500
request.files
响应相关信息
四种响应方式
from flask import Flask, request, render_template, redirect, jsonify
return "字符串"
return render_template('html模板路径',**{})
return redirect('/index.html')
return jsonify({'k1':'v1'})
-
返回 JSON
-
重定向
url_for
-
返回模板
-
自定义状态码
返回JSON
在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中可以直接使用 jsonify 生成一个 JSON 的响应
# 返回JSON
@app.route('/demo4')
def demo4():
json_dict = {
"user_id": 10,
"user_name": "laowang"
}
return jsonify(json_dict)
不推荐使用 json.dumps 转成 JSON 字符串直接返回,因为返回的数据要符合 HTTP 协议规范,如果是 JSON 需要指定 content-type:application/json
重定向(redirect)
- 重定向到 黑马 官网
# 重定向
@app.route('/demo5')
def demo5():
return redirect('http://www.itheima.com')
- 重定向到自己写的视图函数
- 可以直接填写自己 url 路径
- 也可以使用 url_for 生成指定视图函数所对应的 url
@app.route('/demo1')
def demo1():
return 'demo1'
# 重定向
@app.route('/demo5')
def demo5():
return redirect(url_for('demo1'))
- 重定向到带有参数的视图函数
- 在 url_for 函数中传入参数
# 路由传递参数
@app.route('/user/<int:user_id>')
def user_info(user_id):
return 'hello %d' % user_id
# 重定向
@app.route('/demo5')
def demo5():
# 使用 url_for 生成指定视图函数所对应的 url
return redirect(url_for('user_info', user_id=100))
返回模板(render_template)
使用render_template
方法渲染模板并返回
例如,新建一个模板index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
我的模板html内容
<br/>{{ my_str }}
<br/>{{ my_int }}
</body>
</html>
后端视图
from flask import render_template
@app.route('/')
def index():
mstr = 'Hello 黑马程序员'
mint = 10
return render_template('index.html', my_str=mstr, my_int=mint)
自定义状态码和响应头
1) 元祖方式
可以返回一个元组,这样的元组必须是 (response, status, headers) 的形式,且至少包含一个元素。 status 值会覆盖状态代码, headers 可以是一个列表或字典,作为额外的消息标头值。
@app.route('/demo4')
def demo4():
# return '状态码为 666', 666
# return '状态码为 666', 666, [('Itcast', 'Python')]
return '状态码为 666', 666, {'Itcast': 'Python'}
2) make_response方式
@app.route('/demo5')
def demo5():
resp = make_response('make response测试')
resp.headers[“Itcast”] = “Python”
resp.status = “404 not found”
return resp
自定义响应使用步骤
- 1 导入make_response
- 2 response=make_response(4剑客)
- 3 操作response
- 4 return response
from flask import Flask
from flask import render_template
from flask import make_response
@app.route('/login.html', methods=['GET', "POST"])
def login():
# 实例化响应对象,可以将四剑客传入,
response = make_response(render_template('login.html'))
# response是flask.wrappers.Response类型
response.delete_cookie('key') # 删除客户端的cookie
response.set_cookie('key', 'value') # 在响应对象中添加cookie
response.headers['X-Something'] = 'A value' # 在响应对象中设置响应头
return response