Pisanie pierwszej aplikacji Django, część 1.¶
Nauczmy się na przykładzie.
Z pomocą tego tutoriala przeprowadzimy cię przez stworzenie prostej aplikacji ankietowej.
Będzie się ona składać z dwóch części:
Publicznej strony, która pozwala ludziom obejrzeć ankiety i głosować w nich.
Panelu administracyjnego, który pozwala ci dodawać, zmieniać i usuwać ankiety.
Będziemy zakładać, że masz już zainstalowane Django. Możesz sprawdzić, czy Django jest zainstalowane i w jakiej wersji uruchamiając następującą komendę w prompcie powłoki (wskazywanym przez prefix $):
$ python -m django --version
...\> py -m django --version
Jeśli Django jest zainstalowane, powinieneś zobaczyć wersję swojej instalacji. Jeśli nie jest, dostaniesz błąd „No module named django”.
This tutorial is written for Django 5.1, which supports Python 3.10 and later. If the Django version doesn’t match, you can refer to the tutorial for your version of Django by using the version switcher at the bottom right corner of this page, or update Django to the newest version. If you’re using an older version of Python, check Której wersji Pythona mogę użyć z Django? to find a compatible version of Django.
Zobacz Jak zainstalować Django, by znaleźć wskazówki jak usunąć stare wersje Django i zainstalować nową.
Gdzie szukać pomocy:
Jeśli masz trudności w przejściu tego tutorialu, przejdź do sekcji Uzyskiwanie pomocy często zadawanych pytań.
Tworzenie projektu¶
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.
From the command line, cd
into a directory where you’d like to store your
code and create a new directory named djangotutorial
. (This directory name
doesn’t matter to Django; you can rename it to anything you like.)
$ mkdir djangotutorial
...\> mkdir djangotutorial
Then, run the following command to bootstrap a new Django project:
$ django-admin startproject mysite djangotutorial
...\> django-admin startproject mysite djangotutorial
This will create a project called mysite
inside the djangotutorial
directory. If it didn’t work, see Problemy z uruchomieniem django-admin.
Informacja
Musisz unikać nazywania projektów tak samo jak wbudowane w Pythona albo Django komponenty. W szczególności znaczy to, że powinieneś unikać używania nazw jak django
(co wejdzie w konflikt z samym Django) lub test
(wejdzie w konflikt z wbudowanym pakietem Pythona).
Spójrzmy co stworzyło startproject
:
djangotutorial/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
Te pliki to:
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 tematmanage.py
w django-admin and manage.py.mysite/
: A directory that is the actual Python package for your project. Its name is the Python package name you’ll need to use to import anything inside it (e.g.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. Ustawienia Django 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/asgi.py
: Punkt wejściowy dla serwerów WWW kompatybilnych z ASGI do serwowania twojego projektu. Zobacz Jak wdrażać z ASGI po więcej szczegółów.mysite/wsgi.py
: Punkt wejściowy dla serwerów WWW kompatybilnych z WSGI do serwowania twojego projektu. Zobacz Jak wdrażać z WSGI dla większej ilości szczegółów.
Serwer deweloperski¶
Let’s verify your Django project works. Change into the djangotutorial
directory, if you haven’t already, and run the following commands:
$ python manage.py runserver
...\> py 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. listopada 19, 2024 - 15:50:53 Django version 5.1, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
Informacja
Zignoruj na razie ostrzeżenie o niezastosowanych migracjach bazy danych; zajmiemy się bazą danych za chwilę.
Kiedy serwer jest już uruchomiony, odwiedź http://127.0.0.1:8000/ w swojej przeglądarce internetowej. Zobaczysz stronę „Gratulacje!” ze startującą rakietą. Zadziałało!
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.)
(To serve the site on a different port, see the runserver
reference.)
Automatyczne przeładowywanie runserver
Serwer deweloperski automatycznie przeładowuje kod Pythona dla każdego żądania, wedle potrzeby. Nie musisz restartować serwera, aby zmiany w kodzie miały efekt. Jednakże niektóre działania, jak dodawanie plików, nie powodują restartu, więc będziesz musiał zrestartować serwer w tych przypadkach.
Tworzenie aplikacji Ankiety¶
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.
Projekty versus aplikacje
Jaka jest różnica pomiędzy projektem a aplikacją? Aplikacja jest aplikacją webową, która coś robi – na przykład system blogowy, baza danych publicznych wpisów lub mała aplikacja ankietowa. Projekt jest zbiorem konfiguracji i aplikacji dla konkretnej witryny. Projekt może zawierać wiele aplikacji. Aplikacja może być w wielu projektach.
Your apps can live anywhere in your Python path. In
this tutorial, we’ll create our poll app inside the djangotutorial
folder.
Aby stworzyć swoją aplikację, upewnij się, że jesteś w tym samym katalogu co manage.py
i wpisz tę komendę:
$ python manage.py startapp polls
...\> py manage.py startapp polls
Stworzy ona katalog polls
, który jest tak rozplanowany:
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 widok¶
Napiszmy pierwszy widok. Otwórz plik polls/views.py
i umieść tam następujący pythonowy kod:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
This is the most basic view possible in Django. To access it in a browser, we
need to map it to a URL - and for this we need to define a URL configuration,
or „URLconf” for short. These URL configurations are defined inside each
Django app, and they are Python files named urls.py
.
To define a URLconf for the polls
app, create a file polls/urls.py
with the following content:
from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
Your app directory should now look like:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
The next step is to configure the global URLconf in the mysite
project to
include the URLconf defined in polls.urls
. To do this, add an import for
django.urls.include
in mysite/urls.py
and insert an
include()
in the urlpatterns
list, so you have:
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]
The path()
function expects at least two arguments:
route
and view
.
The include()
function allows referencing other URLconfs.
Whenever Django encounters include()
, it chops off whatever
part of the URL matched up to that point and sends the remaining string to the
included URLconf for further processing.
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ć.
Kiedy używać include()
You should always use include()
when you include other URL patterns.
The only exception is admin.site.urls
, which is a pre-built URLconf
provided by Django for the default admin site.
Podłączyłeś właśnie widok index
do URLconf. Zweryfikuj, czy działa, uruchamiając następujące polecenie:
$ python manage.py runserver
...\> py 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
.
Strona nie została znaleziona?
Jeśli dostajesz tutaj stronę błędu, upewnij się, że wchodzisz na http://localhost:8000/polls/, a nie na http://localhost:8000/.
Jeśli czujesz się dobrze z przepływem żądań i odpowiedzi, przeczytaj drugą część tego tutoriala, aby zacząć pracę z bazą danych.