【问题标题】:Django - Parsing URL in any order?Django - 以任何顺序解析 URL?
【发布时间】:2016-07-19 23:25:13
【问题描述】:

我正在设置一个 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}

都将使用一种过滤用户模型/表的视图方法。是否可以编写一个简洁的 regex/url 解析器来执行此操作,而无需编写涵盖所有可能迭代的 url 模式匹配?

【问题讨论】:

    标签: python regex django django-rest-framework


    【解决方案1】:

    我建议改用查询字符串。

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

    那么在你看来:

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

    你的 url 模式看起来像:

    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 ...
    

    【讨论】:

    • 我曾将其视为备份,但我也很想知道它是否可以在 url 中严格执行。
    猜你喜欢
    • 2017-11-08
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多