flask_restful.reqparse
устарел (https://flask-restful.readthedocs.io/en/latest/reqparse.html):
Вся часть синтаксического анализатора запроса Flask -RESTful запланирована для удаления и будет заменена на документация о том, как интегрироваться с другими пакетами, которые делают ввод / вывод лучше (например, marshmallow ). Это означает, что он будет поддерживаться до 2.0, но считается устаревшим. Не беспокойтесь, если у вас есть код, использующий его сейчас, и wi sh для продолжения, он не исчезнет в ближайшее время go.
Я кратко посмотрел на Зефир и до сих пор немного озадачен тем, как его использовать, если я хочу заменить reqparse.RequestParser()
. Что бы мы написали вместо чего-то вроде следующего:
from flask import Flask, request, Response
from flask_restful import reqparse
@app.route('/', methods=['GET'])
def my_api() -> Response:
parser = reqparse.RequestParser()
parser.add_argument('username', type=str, required=True)
args = parser.parse_args()
return {'message': 'cool'}, 200
(через полчаса чтения еще немного документации…)
RequestParser по умолчанию смотрит на MultiDict
request.values
(очевидно запросить параметры, затем сформировать параметры тела в соответствии с { ссылка }). Итак, нам просто нужно как-то проверить данные в request.values
.
Вот фрагмент некоторого соответствующего кода из Marshmallow. Кажется, это намного сложнее, чем reqparse
: сначала вы создаете класс схемы, затем создаете его экземпляр, а затем загружаете запрос JSON. Я бы предпочел не писать отдельный класс для каждой конечной точки API. Есть ли что-то более легкое, похожее на reqparse
, где вы можете записать все типы информации проверки аргументов в функции, определяющей вашу конечную точку?
from flask import Flask, request, Response
from flask_restful import reqparse
from marshmallow import (
Schema,
fields,
validate,
pre_load,
post_dump,
post_load,
ValidationError,
)
class UserSchema(Schema):
id = fields.Int(dump_only=True)
email = fields.Str(
required=True, validate=validate.Email(error="Not a valid email address")
)
password = fields.Str(
required=True, validate=[validate.Length(min=6, max=36)], load_only=True
)
joined_on = fields.DateTime(dump_only=True)
user_schema = UserSchema()
@app.route("/register", methods=["POST"])
def register():
json_input = request.get_json()
try:
data = user_schema.load(json_input)
except ValidationError as err:
return {"errors": err.messages}, 422
# etc.