flask before_request、before_first_request、after_request;AttributeError: ‘Flask‘ object has no attrib

本文介绍了Flask框架中before_request和after_request钩子的使用,以及request和response对象的作用。特别提到在Flask2.3版本后before_first_request不再可用,以及处理TypeError关于NoneType和参数传递的问题。
摘要由CSDN通过智能技术生成

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是请求路由地址
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loong_XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值