Wprowadzenie do widoków
W programowaniu widok jest zazwyczaj składnikiem, który wyświetla informacje użytkownikowi. Zadania wykonywane przez widok mogą się różnić w zależności od struktury i konwencji, w tym odpowiedzialności za ładowanie danych.
W Django widok jest zwykle odpowiedzialny za:
- Weryfikowanie żądania użytkownika.
- Ładowanie lub modyfikowanie odpowiednich danych.
- Zwracanie szablonu HTML z informacjami do użytkownika.
Rozpoczniemy eksplorację, omawiając ręczne tworzenie widoków i konfigurując odpowiednie adresy URLLconfs. UrLconf to lista ścieżek, które wskazują wzorzec do dopasowania, funkcję do wywołania i opcjonalnie nazwę. W kolejnej lekcji zobaczymy, jak Django może automatycznie obsługiwać część kodu, który napisaliśmy ręcznie.
Utwórz widok
Aby utworzyć widok od podstaw w narzędziu Django, zazwyczaj tworzy się funkcję. Funkcja często zawiera odpowiedni kod:
- Wykonaj zadanie, którego zażądał użytkownik.
- Zwróć szablon z odpowiednimi danymi, aby wyświetlić użytkownikowi.
Funkcje widoku zawsze przyjmują co najmniej jeden parametr o nazwie request
, który reprezentuje żądanie użytkownika. Jeśli spodziewasz się więcej informacji od użytkownika w adresie URL, możesz podać więcej parametrów, takich jak nazwa lub identyfikator elementu. Zarejestrujesz je podczas tworzenia trasy, o której będziemy mówić w dalszej części lekcji.
Ładowanie danych
Możesz użyć narzędzia Django ORM, aby załadować wszystkie potrzebne dane z zarejestrowanej bazy danych.
Projekt, który tworzymy, ma dwa modele i Shelter
Dog
. Możemy załadować wszystkie obiekty lub wykonać inne zapytania przy użyciu utworzonych modeli. Aby załadować wszystkie schroniska, na przykład użyjemy polecenia Shelter.objects.all()
. Możemy załadować pojedyncze schronienie przy użyciu polecenia Shelter.objects.get(pk=1)
.
Uwaga
pk
to skrót do klucza podstawowego. Możesz użyć id
polecenia i mieć ten sam wynik, ale użycie pk
zapewni, że polecenie działa, jeśli zmieniono właściwość reprezentującą klucz podstawowy na inną nazwę.
Błędy 404
Błąd 404 w aplikacjach internetowych oznacza "nie znaleziono". Najlepszym rozwiązaniem jest zwrócenie wartości 404 za każdym razem, gdy zostanie wykonane żądanie dla obiektu, który nie istnieje.
Platforma Django udostępnia skróty do próby załadowania danych:
get_object_or_404
iget_list_or_404
: Ładuje obiekt za pomocą klucza podstawowego lub zwraca użytkownikowi wartość 404, jeśli obiekt nie zostanie znaleziony.get_list_or_404
: wykonuje tę samą operację co inny skrót, z tą różnicą, że akceptuje parametr filtru.
Użyjemy get_object_or_404
w naszym ćwiczeniu.
Renderowanie szablonu
Aparat tworzenia szablonów Django pobierze utworzony szablon HTML, połączy go z dowolnymi danymi, które udostępniamy, i emituje kod HTML dla przeglądarki. Funkcja pomocnika do wykonania tego zadania to render
.
Funkcja render
wymaga obiektu reprezentującego żądanie, czyli parametru wyróżnionego request
wcześniej. Przekazujesz również nazwę szablonu, zazwyczaj plik HTML, który będzie znajdować się w folderze o nazwie templates.
Aby przekazać dane do szablonu, należy podać render
obiekt słownika context
. Obiekt context
zawiera zestaw par klucz/wartość, gdzie każdy klucz staje się zmienną w szablonie.
Przykład
Aby utworzyć widok do wyświetlania wszystkich schronów, możesz użyć następującego kodu:
def shelter_list(request):
shelters = Shelter.objects.all()
context = { 'shelters': shelters }
return render(request, 'shelter_list.html', context)
Rejestrowanie ścieżki
Prawie każda platforma internetowa używa ścieżek do przetwarzania żądań użytkowników. Ścieżki konwertują część adresu URL po nazwie domeny i przed ciągiem zapytania (który następuje po znaku zapytania) do wywołania funkcji.
Wywołanie www.contoso.com/shelters
polecenia może wywołać funkcję w celu wyświetlenia listy wszystkich schronów, podczas gdy www.contoso.com/shelters/1
może wywołać funkcję w celu wyświetlenia schronienia o identyfikatorze 1. Ścieżki są rejestrowane w usłudze Django przez utworzenie pliku URLconf.
Załóżmy, że mamy moduł o nazwie views
, który jest konwencją Django. Możemy kierować ruch indeksu, w którym nie określono ścieżki (na przykład www.contoso.com
) do funkcji o views
nazwie , i nadać jej nazwę o nazwie index
index
, używając następującej ścieżki:
path('', views.index, 'index')
Możemy również tworzyć foldery wirtualne dla określonych żądań. Jeśli na przykład chcemy wyświetlić listę wszystkich schronisk, jeśli ktoś żąda /shelters, możemy użyć następującego polecenia:
path('shelters', views.shelter_list, 'shelter_list')
Parametry URL
Typowym rozwiązaniem jest przekazywanie parametrów do aplikacji w ramach adresu URL, takiego jak identyfikator lub nazwa. Ponieważ te wartości się zmienią, nie chcemy kodować ich w naszej ścieżce. W języku Django można określić parametr przy użyciu specjalnej składni. W tej składni możesz wskazać oczekiwany typ danych, na przykład liczbę całkowitą i nazwę.
Aby na przykład utworzyć ścieżkę do żądania określonego schronienia według identyfikatora, potrzebujemy parametru typu integer
. (Przyczyną jest to, że nasz klucz podstawowy jest liczbą całkowitą). Następnie możemy podać nazwę, której chcemy użyć dla zmiennej, która następnie zostanie przekazana jako parametr do funkcji view. Składnią identyfikującą ten parametr będzie <int:pk>
. Zwróć uwagę na deklarację typu, dwukropek, a następnie nazwę zmiennej.
Pełna ścieżka może wyglądać następująco:
path('shelter/<int:pk>', views.shelter_detail, name='shelter_detail')
Skojarzona funkcja widoku będzie miała następujący podpis:
def shelter_detail(request, pk):
# code
Część pk
podpisu ścieżki jest przekazywana shelter_detail
jako parametr, podobnie jak w przypadku wywoływania go jak normalna funkcja języka Python.