Проверка Flask Restplus на наличие необходимых заголовков

Я хочу проверить, предоставил ли запрос необходимые заголовки, используя Flask-RestPlus.

Я попытался использовать https://flask-restful.readthedocs.io/en/0.3.5/reqparse.html, который я использовал раньше, чтобы проверить тело на наличие необходимых параметров, и он работает, но мне также нужно проверить заголовки

        def RequestParser():
            parser = reqparse.RequestParser()
            parser.add_argument('PaymentMethod', location='headers')
            return parser

        @api.route('/request')
        class Request(Resource):
            parser = RequestParser()
            def post(self):
                data = self.parser.parse_args()
                paymentMethod = request.headers.get('PaymentMethod')
                paymentEndpoint = request.headers.get('PaymentEndpoint')
                return paymentMethod

Я ожидаю, что результат скажет мне, что отсутствуют заголовки, требующие того же результата, когда в теле отсутствуют параметры.


person Reub    schedule 24.01.2019    source источник


Ответы (2)


попробуйте добавить аргумент required:

parser.add_argument('PaymentMethod', required=True, location='headers')

См.: https://flask-restful.readthedocs.io/en/0.3.5/reqparse.html#required-arguments

person Chien Nguyen    schedule 24.01.2019
comment
Я согласен, в качестве примечания, вот рабочий код в restplus github, который показывает вывод. В нем говорится о чванстве, но код, представленный в этом выпуске, также должен быть полезен для вашей проблемы. - person IMCoins; 24.01.2019

Я использовал декоратор expect с parser, который проверяет user_id header.

app = Flask(__name__)
api = Api(app, authorizations=authorizations, security=[{"browser": ["ui"]}])


# Swagger namespaces - in Java they are controllers.
word_count_ns = api.namespace(name='Word count', path='/', description='Word count')


user_id_header_parser = api.parser()
user_id_header_parser.add_argument('user_id', location='headers')


@api.expect(user_id_header_parser)
@word_count_ns.route(api_word_count)
class WordCounter(Resource):
    def post(self):
        """Counts words in request text. Expects header user_id"""

        user_input = request.data.decode()
        user_id_header = request.headers.get('user_id')
        if not check_exists_by_id(user_id_header):
            return Response('user_id header is needed', 401)
        
        return return Response('[]', mimetype='application/json;charset=UTF-8')

Результат введите здесь описание изображения

person Yan Khonski    schedule 15.07.2020