【问题标题】:Flask Restplus check for required headersFlask Restplus 检查所需的标头
【发布时间】:2019-01-24 07:41:09
【问题描述】:

我想使用 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

我希望结果会告诉我,当正文中缺少参数时,缺少标题需要相同的结果。

【问题讨论】:

    标签: python flask flask-restplus


    【解决方案1】:

    尝试添加参数required:

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

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

    【讨论】:

    • 我同意,作为旁注,这是restplus github 中的一个工作代码,它显示了输出。它谈到了招摇,但这个问题中提供的代码也应该对您的问题有用
    【解决方案2】:

    我使用 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')
    
    

    结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多