Flask-Restful可以接受不区分大小写的参数名称吗?

时间:2016-04-20 17:20:05

标签: python flask flask-restful

如果我使用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的参数,但不幸的是,它只会使不区分大小写(通过使它们小写)。它不会影响参数名称。

1 个答案:

答案 0 :(得分:3)

将另一个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子类实现的程度足以对解析器的用例不区分大小写,它不适合作为一般实现。