Wprowadzenie do widoków

Ukończone

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 ShelterDog. 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 i get_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 indexindex, 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.