【问题标题】:Can Flask-Restful accept case-insensitive argument names?Flask-Restful 可以接受不区分大小写的参数名称吗?
【发布时间】:2016-04-20 17:20:04
【问题描述】:

如果我使用 Flask-Restful 执行此操作:

parser = reqparse.RequestParser()
parser.add_argument('group', type=str, help='Please specify a valid group')

那么解析器将接受group=X 的参数,但不接受Group=XGROUP=X

有没有办法让它在取参数名称时不区分大小写?

reqparse.Argument 类有一个名为 case_sensitive 的参数,但不幸的是,这只会使 不区分大小写(通过将它们设为小写)。它不会影响参数名称。

【问题讨论】:

    标签: python flask flask-restful


    【解决方案1】:

    将不同的Argument 类传递给RequestParser,它将args 包装在不区分大小写的MultiDict 子类中。

    class CaseInsensitiveMultiDict(MultiDict):
        def __init__(self, mapping=None):
            super().__init__(mapping)
            # map lowercase keys to the real keys
            self.lower_key_map = {key.lower(): key for key in self}
    
        def __contains__(self, key):
            return key.lower() in self.lower_key_map
    
        def getlist(self, key):
            return super().getlist(self.lower_key_map.get(key.lower()))
    
        def pop(self, key):
            return super().pop(self.lower_key_map.get(key.lower()))
    
    
    class CaseInsensitiveArgument(Argument):
        def source(self, request):
            return CaseInsensitiveMultiDict(super().source(request))
    
    parser = RequestParser(argument_class=CaseInsensitiveArgument)
    

    您仍然可以通过将Argument 实例而不是关键字传递给add_argument 来获得区分大小写的参数。

    MultiDict 子类的实现刚好足以对解析器的用例不区分大小写,它不适合作为一般实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多