flask before_request、after_request就是flask每次每一个请求都前后会额外自定义处理其他;before_first_request是这个整个flask程序运行前执行一次
代码:
from flask import Flask
app = Flask(__name__)
@app.before_request
def set_up():
print("ooooo")
print("#"*18)
# @app.before_first_request
# def set_up():
# print("ooooo")
# print("#"*18)
@app.after_request
def set_after(response):
print("eeeee")
print("&"*18)
return response
@app.route('/')
def first():
print("121212")
print("*"*18)
return "Hello, World!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5050)
报错:
1)@app.before_first_request AttributeError: ‘Flask’ object has no attribute ‘before_first_request’. Did you mean: ‘_got_first_request’
解决方法:这是因为flask在版本2.3以后这个函数before_first_request已经取消,要么降级版本。或者下面方法实现解决app.before_request_funcs = [(None, set_up())]:
def set_up():
print("ooooo")
print("#"*18)
app.before_request_funcs = [(None, set_up())] #与下面全局直接调用set_up()等效相当于
#set_up()
2)TypeError: ‘NoneType’ object is not callable
3) response =
self.ensure_sync(func)(response) TypeError: set_after() takes 0
positional arguments but 1 was given
解决方法:
这两个都是after_request导致,2)是因为没有return ;3)是因为set_after(response)里没有传参;after_request使用必须传参和retrun返回
@app.after_request
def set_after(response):
print("eeeee")
print("&"*18)
return response
flask request 与response
在 Flask 中,request 和 response 是两个非常重要的对象,它们在处理 Web 请求和生成响应时起着关键作用。
request 对象提供了与客户端发送的 HTTP 请求相关的信息。它包含了诸如请求的 URL、请求方法(如 GET、POST 等)、请求头、请求参数、表单数据等信息。通过访问 request 对象的属性和方法,你可以获取和处理客户端发送的请求数据。
例如,你可以使用 request.args 获取 URL 查询参数,使用 request.form 获取表单数据,使用 request.method 获取请求方法,使用 request.path 获取请求的路径等。
response 对象用于生成并发送给客户端的 HTTP 响应。你可以设置响应的状态码、响应头、响应正文等。通过对 response 对象进行操作,你可以控制响应的内容和格式。
例如,你可以使用 response.status 设置响应的状态码,使用 response.headers 设置响应头,使用 response.data 设置响应的正文数据,使用 response.send_file 发送文件等。
from flask import Flask, request, response
app = Flask(__name__)
@app.route('/post', methods=['POST'])
def post_endpoint():
# 获取表单数据
name = request.form['name']
message = request.form['message']
# 生成响应
response.status = 200
response.headers['Content-Type'] = 'application/json'
response.data = {'name': name, 'message': message}
return response
@app.route('/')
def home():
return 'Home Page'
if __name__ == '__main__':
app.run()
这里response data与get_data一样获取的是return结果;request可以获取请求参数,path是请求路由地址