Django - 以任何顺序解析URL?

时间:2016-07-19 23:25:13

标签: python regex django django-rest-framework

我正在设置Django / Django Rest Framework API,大多数查询都是使用url中的参数生成的。该模式遵循{param name}/{param value}

例如:

users/
users/id/{id}/
users/name/{name}/
users/group/{group}/name/{name}/
users/group/{group}/email/{email}/

使用正则表达式解析参数,并将其发送到查看方法,如教程中所示。这三者中的每一个都有一个单独的视图方法。

我很好奇是否有办法编写一个可以捕获所有这些参数的视图方法,无论它们的显示顺序如何。例如:

users/id/{id}/
users/group/{group}/
users/name/{name}/
users/email/{email}/
users/email/{email}/group/{group}

是否会转到一个过滤用户模型/表的视图方法。是否有可能编写一个简洁的正则表达式/ url解析器,而不必编写覆盖所有可能迭代的url模式匹配?

1 个答案:

答案 0 :(得分:1)

我建议改用查询字符串。

查询:/users/?email=user@example.com&name=Doge

然后在你的观点中:

email = self.request.query_params.get('email', None)
name = self.request.query_params.get('name', None)

您的网址格式如下:

r'^/users/$'

或者你可以这样做:

r'^/users/{paramtype}/{param}/({subparamtype}/{subparam})?$'

但是你必须检查你视图中的所有情况:

if paramtype == 'id': # query on id in param
elif paramtype == 'email' # query on email in param
elif ...