Pisanie pierwszej aplikacji Django, część 1.Link to this heading

Nauczmy się na przykładzie.

Z pomocą tego tutoriala przeprowadzimy cię przez stworzenie prostej aplikacji ankietowej.

Będzie ona się składało z dwóch części:

  • Publicznej strony, która pozwoli ludziom obejrzeć ankiety i głosować w nich.

  • Panelu administracyjnego, który pozwoli ci dodawać, zmieniać i usuwać ankiety.

Zakładamy, że masz już zainstalowane Django. Możesz sprawdzić, czy jest zainstalowane i w której wersji, uruchamiając następującą komendę:

Shell
$ python -m django --version

Jeśli Django jest zainstalowane, powinieneś zobaczyć wersję swojej instalacji. Jeśli nie jest, dostaniesz błąd „No module named django”.

Ten tutorial jest napisany dla Django 1.10 i Pythona 3.4 lub późniejszych. Jeśli wersja Django się nie zgadza, możesz przełączyć się na swoją wersję Django używając przełącznika wersji w prawym dolnym rogu tej strony, lub możesz zaktualizować Django do najnowszej wersji. Jeśli wciąż używasz Pythona 2.7, będziesz musiał dostosować nieco próbki kodu, według opisu w komentarzach.

Zobacz Jak zainstalować Django, by znaleźć wskazówki jak usunąć stare wersje Django i zainstalować nową.

Tworzenie projektuLink to this heading

Jeśli po raz pierwszy korzystasz z Django, będziesz musiał zająć się wstępną konfiguracją. Konkretnie, będziesz potrzebował wygenerować trochę kodu, który stworzy projekt Django – zbiór ustawień dla instacji Django, wliczając konfigurację bazy danych, ustawienia specyficzne dla Django i specyficzne dla aplikacji.

Z linii komend, wejdź cd do katalogu, gdzie chciałbyś przechowywać swój kod, następnie uruchom następującą komendę:

Shell
$ django-admin startproject mysite

Stworzy ona katalog mysite w twoim bieżącym katalogu. Jeśli nie zadziałała, zobacz Problemy z uruchomieniem django-admin.

Spójrzmy co stworzyło startproject:

Code
mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

Te pliki to:

  • Zewnętrzny katalog główny mysite/ jest tylko pojemnikiem na twój projekt. Jego nazwa nie ma znaczenia dla Django; możesz zmienić jego nazwę na dowolną, jaką chcesz.

  • manage.py: Narzędzie linii komend, które pozwala ci oddziaływać z tym projektem Django na wiele sposobów. Możesz przeczytać szczegóły na temat manage.py w django-admin and manage.py.

  • Wewnętrzny katalog mysite/ jest właściwym pakietem Pythona dla twojego projektu. Jego nazwa jest nazwą pakietu Pythona, którą musisz używać, aby zaimportować cokolwiek w tym pakiecie (np. mysite.urls).

  • mysite/__init__.py: Pusty plik, który mówi Pythonowi, że ten katalog powinien być uważany za pakiet Pythona. Jeśli jesteś początkujący w Pythonie, przeczytaj więcej o pakietach w oficjalnej dokumentacji Pythona.

  • mysite/settings.py: Ustawienia/konfiguracja dla tego projektu Django. Django settings powie ci wszystko o tym, jak działają ustawienia.

  • mysite/urls.py: Deklaracje URL-i dla tego projektu Django; „spis treści” twojej strony opartej na Django. Możesz przeczytać więcej o URL-ach w URL dispatcher.

  • mysite/wsgi.py: Punkt wejściowy dla serwerów WWW kompatybilnych z WSGI do serwowania twojego projektu. Zobacz How to deploy with WSGI dla większej ilości szczegółów.

Serwer deweloperskiLink to this heading

Zweryfikujmy czy twój projekt Django działa. Przejdź do zewnętrzenego katalogu mysite, jeśli jeszcze tego nie zrobiłeś, i uruchom następujące polecenia:

Shell
$ python manage.py runserver

Zobaczysz następujące wyjście w linii komend:

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

09 sie 2026 - 15:50:53
Django version 1.10, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Wystartowałeś serwer deweloperski Django, lekki web-serwer napisany w całości w Pythonie. Zawarliśmy go w Django, abyś mógł dewelopować rzeczy błyskawicznie, nie musząc zajmować się konfiguracją produkcyjnego serwera – jak na przykład Apache – dopóki nie będziesz gotowy na produkcję.

Teraz jest dobry moment, by zwrócić na to uwagę: nie używaj tego serwera w czymkolwiek podobnym do produkcyjnego środowiska. Jest on przewidziany tylko do użytku podczas dewelopmentu. (Jesteśmy w świecie tworzenia web-frameworków, nie web-serwerów.)

Kiedy serwer jest już uruchomiony, odwiedź http://127.0.0.1:8000/ w swojej przeglądarce internetowej. Zobaczysz stronę „Welcome to Django”, w przyjemnych jasnoniebieskich pastelowych kolorach. Zadziałało!

Tworzenie aplikacji AnkietyLink to this heading

Teraz, kiedy twoje środowisko – „projekt” – jest uruchomione, jesteś gotowy zabrać się do pracy.

Każda aplikacjia, którą piszesz w Django, składa się z pakietu Pythona, który realizuję pewną konwencję. Django zawiera narzędzie, które automatycznie generuje podstawową strukturę katalogów aplikacji, abyś mógł skupić się na pisaniu kodu zamiast na tworzeniu katalogów.

Twoje aplikacje mogą żyć gdziekolwiek na twojej ścieżce Pythona. W tym tutorialu stworzymy aplikację ankietową tużo obok twojego pliku manage.py, aby mogła być zaimportowana jako jego własny moduł najwyższego poziomu, zamiast podmodułu mysite.

Aby stworzyć swoją aplikację, upewnij się, że jesteś w tym samym katalogu co manage.py i wpisz tę komendę:

Shell
$ python manage.py startapp polls

Stworzy ona katalog polls, który jest tak rozplanowany:

Code
polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    views.py

Ta struktora katalogów będzie domem dla aplikacji ankietowej.

Napisz swój pierwszy widokLink to this heading

Napiszmy pierwszy widok. Otwórz plik polls/views.py i umieść tam następujący pythonowy kod:

polls/views.py
Code
from django.http import HttpResponse


def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

To jest najprostszy widok, jaki jest możliwy w Django. Aby go wywołać, potrzebujemy zmapować go na URL – i do tego potrzebujemy URLconf.

Aby stworzyć URLconf w katalogu ankiet, stwórzmy plik o nazwie urls.py. Katalog twojej aplikacji powinien teraz wyglądać tak:

Code
polls/
    __init__.py
    admin.py
    apps.py
    migrations/
        __init__.py
    models.py
    tests.py
    urls.py
    views.py

W pliku polls/urls.py zawrzyj następujący kod:

polls/urls.py
Code
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.index, name='index'),
]

Następnym krokiem jest wskazanie URLconfowi w korzeniu na moduł polls.urls. W mysite/urls.py dodaj import dla django.conf.urls.include i wstaw include() na listę urlpatterns, aby mieć:

mysite/urls.py
Code
from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', admin.site.urls),
]

Funkcja include() function pozwala na odniesienia do innych URLconfów. Zwróć uwagę, że wyrażenia regularne dla funkcji include() nie zawierają $ (znaku końca linii) ale ukośnik rozdzielający. Kiedykolwiek Django napotyka include(), odcina tę część URL-a, która została dopasowana do tego punktu i wysyła pozostłą część ciągu znaków do zaincludowanego URLconfa, do dalszego przetworzenia.

Pomysłem leżącym za include() jest ułatwienie podłączania URL-i. Skoro ankiety są w swoim własnym URLconfie (polls/urls.py), mogą być umieszczone pod „/polls/” lub pod „/fun_polls/” lub pod „/content/polls/” lub dowolnym innym początkiem ścieżki i aplikacja wciąż będzie działać.

Podłączyłeś właśnie widok index do URLconf. Zweryfikujmy, czy działa. Uruchom następujące polecenie:

Shell
$ python manage.py runserver

Przejdź do http://localhost:8000/polls/ w swojej przeglądarce. Powinieneś zobaczyć napis „Hello, world. You’re at the polls index.”, który zdefiniowałeś w widoku index.

Do funkcji url() są przekazane cztery argumenty, dwa wymagane: regex i view oraz dwa opcjonalne: kwargs i name. Warto w tym momencie dowiedzieć się, do czego służą.

Argument url(): regexLink to this heading

Termin „regex” jest powszechnie używaną krótką formą oznaczającą „wyrażenie regularne”, które jest składnią do dopasowywania wzorców w ciągach znaków, lub w tym przypadku, wzorcach URL-i. Django zaczyna od pierwszego wyrażenia regularnego i idzie w dół listy, porównując zażądany URL z wszystkimi wyrażeniami regularnymi aż odnajdzie takie, które pasuje.

Zwróć uwagę, że te wyrażenia regularne nie przeszukują parametrów GET i POST lub nazwy domeny. Na przykład, w żądaniu do https://www.example.com/myapp/, URLconf będzie szukał myapp/. W żądaniu do https://www.example.com/myapp/?page=3, URLconf też będzie szukał myapp/.

Jeśli potrzebujesz pomocy z wyrażeniami regularnymi, zobacz wpis na Wikipedii i dokumentację modułu re. Również fantastyczna jest książka O’Reilly’ego „Mastering Regular Expressions” napisana przez Jeffreya Friedla. Jednakże w praktyce nie musisz być ekspertem od wyrażeń regularnych, bo tak naprawdę potrzebujesz jedynie wiedzieć jak wyłapywać proste wzorce. Tak naprawdę złożone wyrażenia regularne mogą mieć słabą wydajność wyszukiwania, więc prawdopodobnie nie powinieneś polegać na pełnej ich mocy.

Ostatatecznie, uwaga na temat wydajności: te wyrażenia regularne są kompilowane, gdy po raz pierwszy ładowany jest moduł URLconf. Są super-szybkie (tak długo jak same wyrażenia nie są zbyt skomplikowane, tak jak zauważyliśmy wyżej).

Argument url(): viewLink to this heading

Kiedy Django znajdzie pasujące wyrażenie regularne, wywołuje podaną funkcję widoku z obiektem HttpRequest jako pierwszym argumentem i dowolnymi „złapanymi” wartościami z wyrażenia regularnego jako pozostałymi argumentami. Jeśli regex używa prostych złapań, wartości są przekazane jako argumenty pozycyjne; jeśli używa nazwanych złapań, wartości są przekazane jako argumenty nazwane. Za chwilę damy tego przykład.

Argument url(): kwargsLink to this heading

Arbitralne argumenty słownikowe mogą być przekazane w słowniku do docelowego widoku. Nie będziemy używać tej funkcjonalności Django w tym tutorialu.

Argument url(): nameLink to this heading

Nazwanie twojego URL-a pozwala odwołać się do niego jednoznacznie z każdego miejsca w Django, szczególnie z wnętrza szablonów. Ta potężna cecha pozwala ci na robienie globalnych zmian we wzorcach URL projektu przez zmianę w pojedynczym pliku.

Jeśli czujesz się dobrze z przepływem żądań i odpowiedzi, przeczytaj drugą część tego tutoriala, aby zacząć pracę z bazą danych.