2017-01-03 7 views
4

この質問が少し余分に見える場合は申し訳ありませんが、本当に私を悩ますものです。Django url warning urls.W002

次のURLで定義されたDjangoで書かれた一連のAPIがあります。

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

私の目的のためにこの作品を、私は(私はいくつかのAPIで定義されているような警告を持つ保つ:

# 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を許可する必要がありますこのルールと警告リストは大きくなります):

?: (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)) 
] 

をそして、これはスラッシュ、私はしたくない何かを終了するには、アカウントの呼び出しを行います。

私は自分の目的を果たすために見つけた最もエレガントな方法でURLを定義していると感じています。私はこの悲しい警告をログに残しています。

何か間違っていますか?私がそれらのために選んだ構造を妥協することなく、URLを定義する正しい方法がありますか?または、この警告をオフにする方法がありますか?

答えて

2

私がチェックを書いたとき、間違って末尾にスラッシュがあるURLを仮定しました(/api/v1/account//api/v1/account/login/など)。

末尾のスラッシュを使用しない場合は、含まれるURLパターンを^/で開始することができ、W002のチェックで偽陽性が返されます。

Django 1.10.2の場合、設定にAPPEND_SLASH=Falseがある場合、チェックは無効になります。説明はticket 27238を参照してください。

3

SILENCED_SYSTEM_CHECKSオプションを使用して警告をオフにすることができます。

例:

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

これはスラッシュで終了するアカウント呼び出し、私はしたくない何かを行います。

なぜですか?何か特別な理由はありますか?

Djangoに関する限り、は、が間違っていて、スラッシュが付いたURLが終了しません。さらに、Djangoの管理者URLはスラッシュで終わります。 Django polls tutorialは、ルートURLconfsにスラッシュを追加します。

あなたがURL Dispacher例を読めば、それは言う:

すべてのURLがそれを持っているので、先頭のスラッシュを追加する必要は、ありません。たとえば、^articlesではなく、^/articlesです。

+1

私はそれを定義しないためです。個人的に、私は好きではない。私はURLのディスパッチャを読んで、ルートのURLには有効であるように見えますが、ルートに含まれているものはそうではありません。 – joaonrb