Flask项目入门—request以及Response
导入
request(请求)以及Response(响应)通过flask导入,如下:
from flask import Blueprint, request, render_template, \
jsonify, make_response, Response, redirect, url_for, abort
request:
默认请求不支持post请求,如果需要同时支持GET和POST,就需要路由设置methods,比如
# 路由名称request
# methods请求方法
@blue.route('/request/', methods=['GET', 'POST'])
def get_request():
先看客户端向服务器发送的请求示例,
http://127.0.0.1:5000/request/?name=jianghoufu&name=chenguili&age=33
(1)request.method)请求方式
在上面视图函数get_request中,我打印request.method
print(request.method)
# 输出 GET
(2)request.args:GET请求的参数
request.args是ImmutableMultiDict: 类字典对象,它跟字典的区别是可以出现重复的key
视图函数中打印request.args得到如下
print(request.args)
#ImmutableMultiDict([('name', 'jianghoufu'), ('name', 'chenguili'), ('age', '33')])
print(request.args['name'], request.args['age'])
# jianghoufu 33
print(request.args.get('name'))
# jianghoufu
print(request.args.getlist('name'))
# ['jianghoufu', 'chenguili']
(3)request.form:POST请求的参数
该类型同样是ImmutableMultiDict: 类字典对象,类似request.args
print(request.form)
# ImmutableMultiDict([('name', 'jianghouf'), ('age', '33')])
print(request.form.get('name')) # lucy
(4)print(request.path) # /request/
(5)print(request.url) # http://127.0.0.1:5000/request/?name=lisi&name=wangwu&age=33
(6)print(request.base_url) # http://127.0.0.1:5000/request/
(7)print(request.host_url) # http://127.0.0.1:5000/
(8)print(request.remote_addr) # 127.0.0.1,客户端的ip
(9)print(request.files) # 文件内容 ,ImmutableMultiDict([])
(10)print(request.headers) # 请求头
(11)print(request.user_agent) # 用户代理,包括浏览器和操作系统的信息 , python-requests/2.28.2
Response
当我们请求接口过来的是欧响应可以返回json或者html等
# 响应的几种方式
# 1. 返回字符串(不常用)
# return 'response OK!'
# 2. 模板渲染 (前后端不分离)
# return render_template('index.html', name='张三', age=33)
# 3. 返回json数据 (前后端分离)
data = {'name': '李四', 'age': 44}
# return data
# jsonify(): 序列化,字典=>字符串
# return jsonify(data)
# 4. 自定义Response对象
html = render_template('index.html', name='张三', age=33)
print(html, type(html)) # <class 'str'>
# res = make_response(html, 200)
res = Response(html)
#这里是重定向到home
response = redirect('/home/')
return response
特别注意这里的Response,他是一种返回类型,视图函数可以返回json,html,模版,也可以自定义,比如Response(html),比如response = redirect('/home/')
return response
redirect(重定向)
重定向的几种方式
(1)return redirect('https://www.qq.com')
(2)redirect('/response/')
(3)通过url_for():反向解析,通过视图函数名反过来找到路由
url_for('蓝图名称.视图函数名')
ret = url_for('user.get_response')
redirect(ret)
上面的含义是重定向到蓝图名称为user下的视图函数get_response对应的路由
abort
主动抛出异常
比如:abort(500)