【问题标题】:Django url warning urls.W002Django url 警告 urls.W002
【发布时间】:2017-05-17 22:00:59
【问题描述】:

如果这个问题看起来有点多余,但确实让我感到困扰,请提前抱歉。

我有一组用 Django 编写的 API,由以下 url 定义。

# urls.py
import ...
urlpatterns = [
    url(r"^api/v1/account", include(profile.urls))
]

# profile/urls.py
import ...
urlpatterns = [
    url(r"^$", AccountAPI.as_view()),
    url(r"^/login$", LoginAPI.as_view()),
    url(r"^/logout$", LogoutAPI.as_view())
]

此配置应只允许 url:

/api/v1/account
/api/v1/account/login
/api/v1/account/logout

这项工作是为了我的目的,但我一直收到类似警告(我有几个使用此规则定义的 API,并且警告列表更大):

?: (urls.W002) Your URL pattern '^/login$' has a regex beginning with a '/'. Remove this slash as it is unnecessary.
?: (urls.W002) Your URL pattern '^/logout$' has a regex beginning with a '/'. Remove this slash as it is unnecessary.

如果我删除 斜杠,服务器将不会验证我定义的网址。为此,我必须在 URL 的第一级添加一个 斜杠,例如:

# urls.py
import ...
urlpatterns = [
    url(r"^api/v1/account/", include(profile.urls))
]

这将使帐户调用以斜线结尾,这是我不希望的。

我觉得我已经以我发现的最优雅的方式定义了网址,以达到我的目的,并且我的日志中一直有这个悲伤的警告。

我做错了吗?是否有正确的方法来定义 url,而不影响我为它们选择的结构?还是有办法关闭此警告?

【问题讨论】:

    标签: python django url


    【解决方案1】:

    这将使帐户调用以斜线结尾,这是我不希望的。

    为什么?有什么具体原因吗?

    就 Django 而言,以斜杠结束 url 并没有什么不正确。此外,Django 的管理网址以斜杠结尾。 Django polls tutorial 也将斜杠附加到根 URLconfs。

    如果您阅读 URL Dispacher 示例,它会说:

    无需添加前导斜杠,因为每个 URL 都有。例如,它是 ^articles,而不是 ^/articles

    【讨论】:

    • 因为我没有定义它。就个人而言,我更喜欢没有。我阅读了 URL 调度程序,这似乎对根 url 有效,而不是根中“包含”的那些。
    【解决方案2】:

    您可以使用SILENCED_SYSTEM_CHECKS 选项关闭警告。

    例子:

    SILENCED_SYSTEM_CHECKS = ['urls.W002', 'security.W019']
    

    【讨论】:

      【解决方案3】:

      当我写支票时,我错误地假设了带有斜杠的 URL,例如 /api/v1/account//api/v1/account/login/

      如果您不使用尾部斜杠,则以 ^/ 开头的包含 url 模式可能是正确的,而 W002 检查会给出误报。

      Django 1.10.2 开始,如果您的设置中有APPEND_SLASH=False,则禁用检查。讨论见ticket 27238

      【讨论】:

        猜你喜欢
        • 2017-04-13
        • 2016-04-24
        • 2020-11-11
        • 1970-01-01
        • 2019-04-27
        • 1970-01-01
        • 2015-05-26
        • 2017-10-27
        • 1970-01-01
        相关资源
        最近更新 更多