一、请求报文常用参数
- method:请求的类型(GET/POST/OPTIONS等)
- form:POST请求数据dict
- args:GET请求数据dict
- values:POST请求和GET请求数据集合dict
- files:上传的文件数据dict
- cookies:请求中的cookie dict
- headers:HTTP请求头
二、获取get参数
from flask import Flask,current_app,request
app = Flask(__name__)
@app.route("/test/req")
def test_request():
"""
请求报文练习
:return:
"""
get_args = request.args
print(get_args)
#页码一定是正整数
page = request.args.get("page",1)
print(page)
return "request success"
if __name__ == '__main__':
app.run(debug=True)
image.png
from flask import Flask,current_app,request
app = Flask(__name__)
@app.route("/test/req")
def test_request():
"""
请求报文练习
:return:
"""
get_args = request.args
print(get_args)
#页码一定是正整数
page = request.args.get("page",1)
print(page)
# 获取服务器所在的主机地址
headers = request.headers
print(headers)
print(headers.get("host"))
# 获取ip地址
ip = request.remote_addr
print("远程iP地址",ip)
# 获取User-agent
user_agent = request.headers.get("User-Agent",None)
print("user_agent",user_agent)
return "request success"
if __name__ == '__main__':
app.run(debug=True)
二、请求钩子
应用场景
- 每个请求中都要验证用户信息(是否已登录、是否有权限访问)
- 限制来自某些ip的恶意请求
- 使用钩子函数可以减少重复代码的编写,便于维护
具体应用
- before_first_request:在处理第一个请求前运行
@app.before_first_request
- before_request:在每次请求前运行
- after_request(response):如果没有未处理的异常抛出,在每次请求后运行
- teardown_request(response):在每次请求后运行,即使有未处理的异常
from flask import Flask,current_app,request
app = Flask(__name__)
@app.route("/test/req")
def test_request():
"""
请求报文练习
:return:
"""
get_args = request.args
#页码一定是正整数
page = request.args.get("page",1)
# 获取服务器所在的主机地址
headers = request.headers
# 获取ip地址
ip = request.remote_addr
# 获取User-agent
user_agent = request.headers.get("User-Agent",None)
return "request success"
@app.before_first_request
def first_request():
"""
服务器启动后第一个请求到达
:return:
"""
print("first_request")
@app.before_request
def per_request():
"""
每一个请求到达前
:return:
"""
print("befor request")
if __name__ == '__main__':
app.run(debug=True)
image.png
网友评论