30 maja 2019

Pierwsza aplikacja w Django

W poprzednim wpisie skupiłem się na instalacji django oraz uruchomieniu w środowisku deweloperskim oraz produkcyjnym.

Ten wpis to bezpośrednia kontynuacja, czyli po uruchomieniu czystego django następnym krokiem jest instalacja aplikacji wewnątrz naszego projektu, ustawienie wewnętrznych adresów url oraz widoków.

Pierwsza aplikacja

W celu zainstalowania aplikacji wewnątrz projektu, musimy uruchomić terminal, udać się do katalogu gdzie posiadamy swój projekt (ten sam katalog gdzie posiadamy plik „manage.py”) i wydajemy wewnątrz polecenie:

python manage.py startapp {nazwa aplikacji}

Oczywiście ostatni człon polecenia podmieniamy na naszą nazwę aplikacji, w moim przypadku jest to nazwa „company” więc ostateczna wersja polecenia prezentowała się następująco:

python manage.py startapp company

Dzięki temu poleceniu stworzony zostaje nowy katalog z całą strukturą plików.

Następnym krokiem przy instalacji aplikacji jest dopisanie jej nazwy do listy o nazwie „INSTALLED_APPS” wewnątrz pliku „settings.py”.

Właśnie zainstalowaliśmy swoją pierwszą aplikację.

Po co nam nowa aplikacja, co to za nowa struktura plików przejdziemy później.

Pierwszy adres url

Sprawdźmy nasz plik „urls.py” projektu. Swój projekt nazwałem „tutorial” więc plik ten znajduje się w ścieżce „/tutorial/tutorial/urls.py”

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

W tej skromnej liście (tablicy) będziemy dopisywać kolejne adresy url. Każdy adres url to tak naprawdę wywołanie funkcji „path” z odpowiednimi parametrami wewnątrz listy „urlpatterns”.

Dopiszmy więc nowy element do listy:

path('', views.home, name='frontpage')

Pierwszym argumentem jest wzorzec url, zostawiliśmy pusty wiersz. Powyższy wpis oznacza stronę główną. Drugim argumentem jest kierunek w który chcemy skierować django, odwołanie. My wskazaliśmy plik „views” i funkcję „home”. „Name” to po prostu nazwa wpisu, dzięki temu możemy odwołać się do adresu z każdego miejsca w projekcie.

Wracając do pierwszego argumentu, możemy podać dokładny adres jaki powinien zostać wywołany, lub skorzystać z opcji podania wzoru. Na temat ustawienia adresów url zrobię osobny wpis w którym opiszę wszystko bardziej szczegółowo.

Wracając do naszej strony głównej. W obecnej formie otrzymamy błąd:

Unresolved reference 'views'

Python nie wie co to „views”, dopiszmy więc na górze pliku:

from . import views

Błąd powtórzy się, tym razem jednak w miejscu gdzie podaliśmy import, a to dlatego, że taki plik nie istnieje. Stwórzmy go więc:

from django.http import HttpResponse

def home(request):
    return HttpResponse('Hello World')

Na tym etapie prac proponuję odpalić stronę główną naszego projektu. Zobaczymy napis „Hello World” na ekranie, to nasza strona główna 🙂

W jednym pliku „views” możemy mieć oczywiście wiele zdefiniowanych funkcji.

Funkcje widoku mogą przyjmować również parametry, zróbmy więc proste i szybkie zarazem ćwiczenie.

Dopiszmy do listy adresów:

path('<str:text>', views.home, name='frontpage')

Oznacza to, że każdy adres który pasuje do powyższego wzoru, czyli „/{tutaj jakiś string}” a jednocześnie nie pasuje do żadnego wzoru podanego wcześniej, wpadnie właśnie tutaj. W pierwszym argumencie podaliśmy coś takiego: „<str:text>”, oznacza to, że podać możemy w url jakiś ciąg znaków który jest stringiem. Python wpisze go jako wartość do zmiennej o nazwie „text” i przekaże jako argument do funkcji „home” która znajduje się wewnątrz pliku „views”.

Skoro Python przekaże nasz string jako argument do funkcji „home” oznacza to że musimy funkcję na to przygotować:

def home(request, text = 'Hello World'):
    return HttpResponse(text)

Jak widzimy powyżej, funkcja przyjmuje dodatkowy parametr, jeśli go jednak nie będzie, ustawiamy mu domyślną wartość „Hello World”.

Wykorzystanie dodatkowej aplikacji „company”

Co z aplikacją którą zainstalowaliśmy na początku wpisu ? Teraz nam się przyda.

Nie musimy w urls podawać „views.funkcja”, drugim argumentem może być załadowanie adresów url z naszej aplikacji „company”.

Poniżej przykład wykorzystania wszystkich adresów url z aplikacji „company”:

path('company', include('company.urls'))

Powyższy wpis spowoduje, że wszystkie adresy url które rozpoczną się od słowa „company” zostaną przypisane do adresów url zadeklarowanych w aplikacji „company” w pliku „urls”.

Jeśli w pliku urls w aplikacji company dopiszemy np takie adresy:

path('', views.home, name='home'),
path('drugi', views.two, name='drugi')

wywołanie powyższych adresów będzie następujące:

domena/company
domena/company/drugi

Struktura plików w aplikacji jest analogicznie taka sama jak dla projektu. Więc widoki należy stworzyć w pliku „views” w głównym katalogu aplikacji.

Powyższe informacje powinny wystarczyć aby móc zbudować stronę internetową opartą o proste teksty, lecz zdaję sobie sprawę, że potrzebne są layouty aby wszystko wyglądało jak należy.

W następnym wpisie opiszę jak wykorzystać do prezentacji treści, pliki html.