是否可以在每个路由的基础上限制Flask POST数据大小?

时间:2014-07-30 12:10:44

标签: python python-3.x flask

我知道Flask中的set an overall limit on request size可以:

app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024

但我想确保一条特定路线不接受特定大小的POST数据。

这可能吗?

1 个答案:

答案 0 :(得分:30)

您需要检查具体路线本身;你总是可以测试内容的长度; request.content_lengthNone或整数值:

cl = request.content_length
if cl is not None and cl > 3 * 1024 * 1024:
    abort(413)

在访问请求中的表单或文件数据之前执行此操作。

你可以把它变成你的观点的装饰者:

from functools import wraps
from flask import request, abort


def limit_content_length(max_length):
    def decorator(f):
        @wraps(f)
        def wrapper(*args, **kwargs):
            cl = request.content_length
            if cl is not None and cl > max_length:
                abort(413)
            return f(*args, **kwargs)
        return wrapper
    return decorator

然后将其用作:

@app.route('/...')
@limit_content_length(3 * 1024 * 1024)
def your_view():
    # ...

这基本上是 Flask所做的事情;当您尝试访问请求数据时,首先检查Content-Length标头,然后再尝试解析请求正文。通过装饰器或手动检查,您只需进行相同的测试,但在视图生命周期中稍早一些。