flask Request

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

4.request.form

@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!'

posted @ 2023-05-29 17:23  春游去动物园  阅读(13)  评论(0编辑  收藏  举报