2017-01-03 85 views
4

對不起,如果這個問題看起來有點多餘,但是是真的困擾我的東西。Django網址警告網址.W002

我有一套由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()) 
] 

這個配置應該允許網址:

/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。對於我已經到了削減像URL的第一級:

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

,這將使該帳戶調用結尾加上一個斜線,這是我不想。

我覺得我已經定義了這些網址,這是我發現爲我的目的服務的最優雅的方式,我在我的日誌中一直有這種悲傷的警告。

我做錯了什麼?有沒有正確的方式來定義網址,而不會影響我爲他們選擇的結構?或者有辦法將這些警告關閉?

回答

2

當我寫了支票時,我錯誤地認爲帶有尾部斜線的網址,例如/api/v1/account//api/v1/account/login/

如果您不使用尾部斜線,則啓動包含的網址格式^/可能是正確的,並且W002檢查會給出誤報。

Django 1.10.2開始,如果您的設置中有APPEND_SLASH=False,則該檢查將被禁用。討論請參閱ticket 27238

3

您可以使用SILENCED_SYSTEM_CHECKS選項關閉警告。

例子:

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

這將使該帳戶調用結尾加上一個斜線,這是我不想。

爲什麼?有什麼具體原因嗎?

就Django而言,沒有什麼不正確用斜槓結尾的網址。此外,Django的管理網址以斜線結尾。 Django polls tutorial也附加斜槓到根URLconf。

如果你讀URL Dispacher例子,它說:

沒有必要添加一個斜線,因爲每個URL都有。例如,它是^文章,而不是^/文章

+1

因爲我沒有定義它。就個人而言,我更喜歡沒有。我讀了URL調度器,它似乎對根URL有效,而不是「包含」在根中的那些。 – joaonrb