Ich definiere derzeit reguläre Ausdrücke, um Parameter in einer URL zu erfassen, wie im Tutorial beschrieben. Wie greife ich über die URL als Teil des HttpRequest
Objekts auf Parameter zu ? Mein gibt HttpRequest.GET
derzeit ein leeres QueryDict
Objekt zurück.
Ich würde gerne lernen, wie man das ohne Bibliothek macht, damit ich Django besser kennenlernen kann.
self.kwargs['parameter']
Nehmen wir an, Sie haben Camflans Erklärung
url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
http://domain/user/thaiyoshi/?message=Hi
Die URL-Dispatcher-Regel fängt Teile des URL- Pfads (hier
"user/thaiyoshi/"
) ab und übergibt sie zusammen mit dem Anforderungsobjekt an die Ansichtsfunktion.Die Abfragezeichenfolge (hier
message=Hi
) wird analysiert und die Parameter werden alsQueryDict
in gespeichertrequest.GET
. Es wird keine weitere Übereinstimmung oder Verarbeitung für HTTP-GET-Parameter durchgeführt.Diese Ansichtsfunktion würde sowohl aus dem URL-Pfad extrahierte Teile als auch einen Abfrageparameter verwenden:
Als Randnotiz finden Sie die Anforderungsmethode (in diesem Fall
"GET"
und normalerweise für eingereichte Formulare"POST"
) inrequest.method
. In einigen Fällen ist es hilfreich zu überprüfen, ob es Ihren Erwartungen entspricht.Update: Bei der Entscheidung, ob der URL-Pfad oder die Abfrageparameter zum Übergeben von Informationen verwendet werden sollen, kann Folgendes hilfreich sein:
/blog/post/15/
(nicht/blog/posts/?id=15
)/blog/post/15/?show_comments=1
oder/blog/posts/2008/?sort_by=date&direction=desc
/blog/post/2008/09/30/django-urls/
quelle
Verwenden von GET
POST verwenden
quelle
KeyError
Ausnahmen bei einem fehlenden Schlüssel zu vermeiden . Es wäre ratsam, dasselbe zu tun (zrequest.POST.get('id', '')
. B. ).quelle
Für Situationen, in denen Sie nur das
request
Objekt haben, das Sie verwenden könnenrequest.parser_context['kwargs']['your_param']
quelle
Ich möchte hier eine Option von mir hinzufügen. Jemand würde sich fragen, wie man einen Pfad in urls.py einstellt, wie z
damit wir die Abfrage aufrufen können.
Tatsache ist, dass es NICHT notwendig ist, eine solche Route in urls.py festzulegen. Was Sie einstellen müssen, ist nur die Route in urls.py
und wenn Sie http: // Servername: port / domain / search /? q = CA eingeben . Der Abfrageteil '? Q = CA' wird automatisch in der Hash-Tabelle reserviert, auf die Sie jedoch verweisen können
Hier ist ein Beispiel (views.py)
Darüber hinaus, wenn Sie eine Abfragezeichenfolge in der URL schreiben
Brechen Sie die Abfragezeichenfolge nicht in Anführungszeichen, z
quelle
Ich möchte einen Tipp teilen, der Ihnen Zeit sparen kann.
Wenn Sie vorhaben, so etwas in Ihrer
urls.py
Datei zu verwenden:Was im Grunde bedeutet
www.example.com/<username>
. Achten Sie darauf , es zu platzieren am Ende Ihrer URL - Einträge, denn sonst, es zu Konflikten mit den URL - Einträgen anfällig ist , die unten folgen, das heißt zugreifenden einer von ihnen werden Sie den schönen Fehler:User matching query does not exist.
Ich habe es einfach selbst erlebt; ich hoffe es hilft!
quelle
Sie haben zwei Möglichkeiten, dies zu tun, falls Ihre URL so aussieht:
v1:
Wenn ein bestimmter Schlüssel obligatorisch ist, können Sie Folgendes verwenden:
Dies gibt den Wert zurück,
a
wenn der Schlüssel vorhanden ist, und eine Ausnahme, wenn nicht.v2:
Wenn Ihre Schlüssel optional sind:
Sie können versuchen, dass dies ohne Argument nicht abstürzt. Sie können es also mit einem Beispiel umhüllen
try: except:
und zurückgebenHttpResponseBadRequest()
. Dies ist eine einfache Möglichkeit, Ihren Code weniger komplex zu gestalten, ohne eine spezielle Ausnahmebehandlung zu verwenden.quelle
Dies ist nicht genau das, wonach Sie gefragt haben, aber dieses Snippet ist hilfreich für die Verwaltung
query_strings
intemplates
.quelle
Diese Abfragen werden derzeit auf zwei Arten durchgeführt. Wenn Sie auf die Abfrageparameter (GET) zugreifen möchten, können Sie Folgendes abfragen:
Wenn Sie auf die vom POST übergebenen Parameter zugreifen möchten, müssen Sie auf folgende Weise zugreifen:
Wenn Sie mit 'get ()' auf das Wörterbuch (QueryDict) zugreifen, können Sie einen Standardwert festlegen. In den oben genannten Fällen sind die Werte Keine, wenn 'Status' oder 'Rolle' nicht informiert werden.
quelle
Dies ist eine weitere alternative Lösung, die implementiert werden kann:
in der URL-Konfiguration. ::
in den Ansichten:
quelle