Flask-Restful 可以接受不区分大小写的参数名称吗?
Can Flask-Restful accept case-insensitive argument names?
如果我用 Flask 这样做-Restful:
parser = reqparse.RequestParser()
parser.add_argument('group', type=str, help='Please specify a valid group')
那么解析器将接受参数 group=X
但不接受 Group=X
或 GROUP=X
.
有没有办法让它在获取参数名称时不区分大小写?
(reqparse.Argument
class 有一个名为 case_sensitive
的参数,但不幸的是,这只会使 values 不区分大小写(通过将它们设为小写). 它不影响参数名称。
将不同的 Argument
class 传递给 RequestParser
,将参数包装在不区分大小写的 MultiDict
subclass.[=17= 中]
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
subclass 实现足以对解析器的用例不区分大小写,它不适合作为通用实现。
如果我用 Flask 这样做-Restful:
parser = reqparse.RequestParser()
parser.add_argument('group', type=str, help='Please specify a valid group')
那么解析器将接受参数 group=X
但不接受 Group=X
或 GROUP=X
.
有没有办法让它在获取参数名称时不区分大小写?
(reqparse.Argument
class 有一个名为 case_sensitive
的参数,但不幸的是,这只会使 values 不区分大小写(通过将它们设为小写). 它不影响参数名称。
将不同的 Argument
class 传递给 RequestParser
,将参数包装在不区分大小写的 MultiDict
subclass.[=17= 中]
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
subclass 实现足以对解析器的用例不区分大小写,它不适合作为通用实现。