2017-01-03 3 views
4

Sorry im Voraus, wenn diese Frage ein wenig überflüssig aussieht, aber ist etwas, das mich wirklich stört.Django Url Warnung urls.W002

Ich habe eine Reihe von APIs in Django geschrieben durch die folgenden URLs definiert.

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

und

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

Diese Konfiguration sollte nur die URLs erlauben:

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

Diese Arbeit für meine Zwecke aber ich halte Warnungen, die wie (ich habe mit mehreren API definiert Diese Regel und die Warnliste ist viel größer):

?: (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. 

Wenn ich den Schrägstrich entferne, validiert der Server die von mir definierten URLs nicht. Dafür habe ich musste ein auf der ersten Ebene der Urls wie Slash:

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

Und dies wird das Konto Anruf mit einem Schrägstrich Ende machen, was ich will nicht.

Ich fühle, dass ich die URLs die eleganteste Weise definiert habe, die ich gefunden habe, um meinem Zweck zu dienen, und ich halte diese traurigen Warnungen in meinen Protokollen.

Mache ich etwas falsch? Gibt es einen richtigen Weg, die URLs zu definieren, ohne die Struktur zu kompromittieren, die ich für sie auswähle? Oder gibt es eine Möglichkeit, diese Warnungen auszuschalten?

Antwort

2

Als ich die Überprüfung schrieb, nahm ich fälschlicherweise URLs mit Schrägstrichen wie /api/v1/account/ und /api/v1/account/login/ an.

Wenn Sie keine abschließenden Schrägstriche verwenden, kann das Starten eines eingeschlossenen URL-Musters mit ^/ korrekt sein, und die W002-Prüfung gibt ein falsches positives Ergebnis.

Ab Django 1.10.2 ist die Prüfung deaktiviert, wenn Sie APPEND_SLASH=False in Ihren Einstellungen haben. Siehe ticket 27238 für die Diskussion.

3

Sie können die Warnung (en) mit der Option SILENCED_SYSTEM_CHECKS deaktivieren.

Beispiel:

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

dies das Konto Anruf mit einem Schrägstrich zu beenden, was ich will nicht.

Warum? Gibt es einen bestimmten Grund?

Soweit Django betroffen ist, gibt es nichts inkorrekt in eine URL mit einem Schrägstrich zu beenden. Außerdem enden Djangos Admin-URLs in einem Schrägstrich. Django polls tutorial fügt auch einen Schrägstrich an die root URLconfs an.

Wenn Sie URL Dispacher Beispiel lesen, heißt es:

Es gibt keine Notwendigkeit, einen führenden Schrägstrich hinzuzufügen, denn jede URL, dass hat. Zum Beispiel ist es ^Artikel, nicht ^/Artikel.

+1

Weil ich es ohne definieren. Persönlich bevorzuge ich ohne. Ich habe den URL-Dispatcher gelesen und dieser scheint für die Root-URL gültig zu sein, nicht die, die im Root "enthalten" sind. – joaonrb