Python flask 在请求前拦截

原文链接: Python flask 在请求前拦截

上一篇: python 密码加密算法库passlib

下一篇: flask 简单flask-httpauth验证

使用before_request 和 after_request的方法都非常简单,使用 @app.before_request  或者@app.after_request  修饰期望在请求前或请求后执行的函数即可

示例:

@app.before_request
def before_request():
    if not m_ip_range.is_ip_strict():
        return
    ranges = m_ip_range.get_range()
    ip_int = utils.ip_to_int(request.remote_addr)
    yes = False
    for item in ranges:
        if item['is_used']==0:
            continue
        if ip_int >= item['ip_start'] and ip_int <= item['ip_end']:
            yes = True
            break
    if not yes:
        abort(400)

before_request()函数被修饰以后,每一次请求到来后,都会先执行它,如果没问题即没有执行到abort(400),那么就会进入到正常的被app.route修饰的函数中进行响应,如果有多个函数被app.before_request修饰了,那么这些函数会被依次执行。

你很关心这个before_request装饰器有什么用,其实它的用处非常大,比如我们希望能对ip地址进行过滤,虽然你可以使用nginx,但我们也可以使用before_request来做,使用nginx,我们不得不手动的进行设置,但如果是用flask自身的before_request机制,我们可以在程序判断出某个ip有恶意访问行为后将其加入到缓存当中(redis),每次请求到来时,由before_request来判断这个ip是不是合法的。

被app.after_request修饰过的函数会在请求得到相应后返回给用户前被调用,也就是说,这个时候,请求已经被app.route装饰的函数响应过了,已经形成了response,我们在这个时候做一些操作,flask有一个插件叫 flask-compress,是对响应结果进行压缩的,它就是用after_request的这个机制,在response返回前对数据进行了压缩,如果你有别的想要操作的事情,同样可以使用after_request来完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用 Flask 实现 POST 请求的示例代码: ```python from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/api/data', methods=['POST']) def post_data(): data = request.get_json() # 获取 POST 请求中的 JSON 数据 # 在这里对数据进行处理和计算 result = {'result': 'success'} return jsonify(result) if __name__ == '__main__': app.run(debug=True) ``` 在这个例子中,我们使用 Flask 框架创建了一个名为 `app` 的应用程序。我们创建了一个 `post_data` 函数,它将处理 POST 请求并返回响应。我们使用 `@app.route` 装饰器指定了路由路径 `/api/data` 和请求方法 `POST`。 在 `post_data` 函数中,我们使用 `request.get_json()` 方法获取 POST 请求中的 JSON 数据,并将其存储在 `data` 变量中。在这里,我们可以对数据进行处理和计算,并将结果存储在 `result` 变量中。最后,我们使用 `jsonify` 方法将 `result` 变量转换为 JSON 格式,并将其作为响应返回。 当我们运行这个应用程序时,它将在本地主机(localhost)的 5000 端口上监听请求。可以使用类似于以下的 curl 命令来向 `/api/data` 路由发送 POST 请求: ``` $ curl -X POST -H "Content-Type: application/json" -d '{"data": "example"}' http://localhost:5000/api/data ``` 这个命令将发送一个包含 JSON 数据的 POST 请求。在这个例子中,我们发送的 JSON 数据是 `{"data": "example"}`。收到请求后,Flask 将执行 `post_data` 函数并返回 JSON 格式的响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值