Django url警告urls.W002

joa*_*nrb 7 python django url

提前抱歉,如果这个问题看起来有点多余,但是真的很困扰我.

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

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

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

此配置应允许URL:

/api/v1/account
/api/v1/account/login
/api/v1/account/logout
Run Code Online (Sandbox Code Playgroud)

这项工作符合我的目的,但我一直有类似的警告(我有几个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.
Run Code Online (Sandbox Code Playgroud)

如果我删除斜杠,服务器将不会验证我定义的URL.为此,我必须有一个斜杠到网址的第一级,如:

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

这将使帐户调用以斜杠结束,这是我不想要的.

我觉得我已经将我发现的最优雅的方式定义为我的目的,并且在我的日志中继续发出这种悲伤的警告.

难道我做错了什么?有没有正确的方法来定义网址而不影响我为他们选择的结构?或者有一种方法可以关闭此警告?

Ale*_*kov 6

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

例:

SILENCED_SYSTEM_CHECKS = ['urls.W002', 'security.W019']
Run Code Online (Sandbox Code Playgroud)


Ala*_*air 5

当我写支票时,我错误地假定了带有尾部斜杠的网址,例如/api/v1/account//api/v1/account/login/

如果不使用斜杠,则^/可以使用正确的开头的url模式,并且W002检查结果为假。

Django 1.10.2开始,如果您有APPEND_SLASH=False设置,则禁用该检查。有关讨论,请参见票证27238