flask Request
1.Request
服务器在接收到客户端的请求后,会自动创建Request对象
由Flask框架创建,Request对象不可修改
属性
url 完整请求地址
base_url 去掉GET参数的URL
host_url 只有主机和端口号的URL
path 路由中的路径
method 请求方法
remote_addr 请求的客户端地址
args GET请求参数
form POST请求参数
files 文件
headers 请求头
cookies 请求中的cookie
2.请求和响应
request : 请求
response : 响应
http一次前后端交互:先请求,后交互
3.request.args 重点(get,getlist)
@app.route('/request')
def get_request():
print(request.args)
return 'request ok!'
request.args获取到的是一个类字典对象(ImmutableMultiDict),虽然打印显示是列表套元组的形式,在实际使用时当成字典使用即可,安装字典的取值方式回去
注意有区别
'''
http://127.0.0.1:5000/request?name=张三&age=20/
request.args ------》 ImmutableMultiDict([('name', '张三'), ('age', '20')])
获取name 和 age的值
request.args.get('name') ----> 张三
request.args.get('age') ----> 20
'''
'''
http://127.0.0.1:5000/request?name=张三&age=20&age=1000/ 再加一个age参数
request.args ------》 ImmutableMultiDict([('name', '张三'), ('age', '20'), ('age', '100')])
获取name 和 age的值
如果我们这么获取得到的是这样的结果
request.args.get('name') ----> 张三
request.args.get('age') ----> 20 # 只会获取第一个,在django中会获取最后一个
获取类似age这种参数时应该使用getlist
request.args.getlist('age') ----> ['20', '100']
这样就可以把值全部拿出来了
'''
3.1ImmutableMultiDict(类字典对象)和字典的区别
ImmutableMultiDict ------> 类字典对象可以出现重复的key,并且获取重复key的value时使用,它的内置方法getlist,该方法返回一个list,如上面案例显示。
dict ------> 不可以出现重复的key
@app.route('/request',methods=['POST'])
def get_request():
print(request.form) # ImmutableMultiDict([('name', '张三'), ('age', '20'), ('age', '30')])
print(request.form.get('name')) # 张三
print(request.form.getlist('age')) # ['20', '30']
return 'request ok!'
基本和request.args是一样的所以就不多说了
5.request.files
@app.route('/request', methods=['POST'])
def get_request():
file = request.files.get('file')
print(request.files) # ImmutableMultiDict([('file', <FileStorage: 'default.png' ('image/png')>)])
print(file.save('test.png'))
'''
可以直接保存
'''
print(file.name)
'''
file
'''
print(file.stream)
'''
<tempfile.SpooledTemporaryFile object at 0x00000207A9D48E48>
'''
print(file.stream)
'''
<tempfile.SpooledTemporaryFile object at 0x00000207A9D48E48>
'''
print(file.headers)
'''
Content-Disposition: form-data; name="file"; filename="default.png"
Content-Type: image/png
'''
return 'request ok!'
6.request.cookie
@app.route('/request',methods=['POST'])
def get_request():
print(request.cookies) # ImmutableMultiDict([('token', '123456789')])
return 'request ok!'
我们可以获取到请求头中的cookie
7.其他比较重要但是不常用的
@app.route('/request',methods=['POST'])
def get_request():
# 请求的地址为 http://127.0.0.1:5000/request?name=张三&age=20&age=100
print(request.path)
'''
/request
'''
print(request.url)
'''
http://127.0.0.1:5000/request?name=张三&age=20&age=100
'''
print(request.headers)
'''
Cookie: token=123456789
User-Agent: Apifox/1.0.0 (https://www.apifox.cn)
Accept: */*
Host: 127.0.0.1:5000
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: multipart/form-data; boundary=--------------------------515394430691289543429472
Content-Length: 373
'''
print(request.base_url)
'''
http://127.0.0.1:5000/request
'''
print(request.host_url)
'''
http://127.0.0.1:5000/
'''
print(request.root_url)
'''
http://127.0.0.1:5000/
'''
print(request.remote_addr)
'''
请求的客户端地址
127.0.0.1
'''
print(request.user_agent,9)
'''
用户代理,包括了浏览器和操作系统信息
Apifox/1.0.0 (https://www.apifox.cn)
'''
return 'request ok!'