НО Я хочу, чтобы один конкретный маршрут не принимал данные POST за определенный размер.
Возможно ли это?
Ответ 1
Вам нужно будет проверить это для самого конкретного маршрута; вы всегда можете проверить длину содержимого; request.content_length - либо None, либо целочисленное значение:
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
Это по существу то, что делает Flask; при попытке доступа к данным запроса заголовок Content-Length сначала проверяется перед попыткой разобрать тело запроса. С помощью декоратора или ручной проверки вы просто сделали тот же тест, но немного раньше в жизненном цикле просмотра.