Obecnie definiuję wyrażenia regularne w celu przechwytywania parametrów w adresie URL, jak opisano w samouczku. Jak uzyskać dostęp do parametrów z adresu URL jako części HttpRequest
obiektu? Mój HttpRequest.GET
obecnie zwraca pusty QueryDict
obiekt.
Chciałbym się nauczyć, jak to zrobić bez biblioteki, aby lepiej poznać Django.
self.kwargs['parameter']
Aby wyjaśnić wyjaśnienie camflan, załóżmy, że masz
url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
http://domain/user/thaiyoshi/?message=Hi
Reguła dyspozytora adresów URL przechwytuje części ścieżki adresu URL (tutaj
"user/thaiyoshi/"
) i przekazuje je do funkcji widoku wraz z obiektem żądania.Ciąg zapytania (tutaj
message=Hi
) jest analizowany, a parametry są przechowywane jako „QueryDict
in”request.GET
. Nie jest wykonywane dalsze dopasowanie ani przetwarzanie parametrów HTTP GET.Ta funkcja widoku użyłaby zarówno części wyodrębnionych ze ścieżki URL, jak i parametru zapytania:
Na marginesie, znajdziesz metodę żądania (w tym przypadku
"GET"
i zwykle dla przesłanych formularzy"POST"
) wrequest.method
. W niektórych przypadkach warto sprawdzić, czy odpowiada oczekiwaniom.Aktualizacja: przy podejmowaniu decyzji, czy użyć ścieżki URL, czy parametrów zapytania do przekazania informacji, pomocne mogą być:
/blog/post/15/
(nie/blog/posts/?id=15
)/blog/post/15/?show_comments=1
lub/blog/posts/2008/?sort_by=date&direction=desc
/blog/post/2008/09/30/django-urls/
źródło
Korzystanie z GET
Korzystanie z POST
źródło
KeyError
wyjątków w przypadku braku klucza. Mądrze byłoby zrobić to samo (nprequest.POST.get('id', '')
.).źródło
W sytuacjach, gdy masz tylko
request
przedmiot, którego możesz użyćrequest.parser_context['kwargs']['your_param']
źródło
Chciałbym tutaj dodać opcję siebie. Ktoś mógłby się zastanawiać, jak ustawić ścieżkę w urls.py, na przykład
abyśmy mogli wywołać zapytanie.
Faktem jest, że NIE jest konieczne ustawianie takiej trasy w urls.py. Musisz tylko ustawić trasę w urls.py
a kiedy wejście http: // nazwa_serwera: port / domena / search / q = Kalifornia . Część zapytania „? Q = CA” zostanie automatycznie zarezerwowana w tabeli skrótów, do której można się jednak odwoływać
Oto przykład (views.py)
Ponadto podczas pisania ciągu zapytania w adresie URL
Nie zawijaj ciągu zapytania w cudzysłów, np
źródło
Chciałbym podzielić się wskazówkami, które mogą zaoszczędzić trochę czasu.
Jeśli planujesz użyć czegoś takiego w swoim
urls.py
pliku:Co w zasadzie oznacza
www.example.com/<username>
. Pamiętaj, aby umieścić go na końcu swoich wpisów URL, ponieważ w przeciwnym razie może powodować konflikty z poniższymi wpisami URL, tj. Uzyskanie dostępu do jednego z nich spowoduje ładny błąd:User matching query does not exist.
sam tego doświadczyłem; mam nadzieję, że to pomoże!
źródło
Możesz to zrobić na dwa sposoby, jeśli Twój URL wygląda tak:
v1:
Jeśli określony klucz jest obowiązkowy, możesz użyć:
Zwróci to wartość
a
if, jeśli klucz istnieje i wyjątek, jeśli nie.v2:
Jeśli twoje klucze są opcjonalne:
Możesz spróbować tego bez żadnego argumentu, to się nie zawiesi. Możesz więc owinąć go
try: except:
i powrócićHttpResponseBadRequest()
w przykładzie. Jest to prosty sposób na zmniejszenie złożoności kodu bez konieczności korzystania ze specjalnej obsługi wyjątków.źródło
To nie jest dokładnie to, co prosiłeś, ale ten fragment jest pomocne w zarządzaniu
query_strings
wtemplates
.źródło
Te zapytania są obecnie wykonywane na dwa sposoby. Jeśli chcesz uzyskać dostęp do parametrów zapytania (GET), możesz przesłać zapytanie:
Jeśli chcesz uzyskać dostęp do parametrów przekazywanych przez POST, musisz uzyskać dostęp w ten sposób:
Uzyskując dostęp do słownika (QueryDict) za pomocą „get ()”, możesz ustawić wartość domyślną. W powyższych przypadkach, jeżeli „status” lub „rola” nie są poinformowane, wartościami są Brak.
źródło
To kolejne alternatywne rozwiązanie, które można wdrożyć:
w konfiguracji adresu URL. :
w widokach:
źródło