Пропустить проверку модели по умолчанию в Flask Restplus - PullRequest
0 голосов
/ 09 января 2019

Из-за специфики проекта я должен написать свой собственный валидатор модели для приложения Flask-restplus API. Проще говоря, когда возникает ошибка проверки, ее формат и код состояния (400) не являются правильными. Он должен возвращать объект JSON с сообщениями в определенном формате с кодом состояния 422.

То, что я делаю, более или менее таково:


ns = api.namespace('somenamespace', description='blabla')

class MyModel(MyBaseModel):
    def __init__(self):
        self.id = fields.Integer()
        self.name = fields.String()


my_model = api.model('MyModel', MyModel())

@api.marshal_list_with(my_model, envelope='json')
@ns.route('/')
class SomeClass(Resource):

    @api.expect(my_model, validate=False)
    @api.doc(responses={
        200: 'Success',
        401: 'Authentication Error',
        403: 'Requested resource unavailable',
        409: 'Conflict, document already exists',
        422: 'Validation Error'
    })
    def post(self):
        """
        Save single document in the database.
        :return:
        """

        request_payload = json.loads(request.data)
        validated_payload, payload_errors = some_validation(request_payload)

        if payload_errors:
            return jsonify(payload_errors), 422
        else:
            return jsonify({'response': 'ok})
Экземпляр MyModel ведет себя в основном как dict, так что никаких проблем при регистрации. Проблема в том, что когда я отправляю данные в `-d`, будь то через` curl` из командной строки, или swagger, я постоянно получаю `400` вместо` 422`. Я предполагаю, что это связано со встроенной проверкой входных данных по умолчанию на основе MyModel. Это круто, но я должен опустить это и применить мою собственную проверку.
...