Skriva din första Django-app, del 1¶
Låt oss lära oss genom exempel.
I den här handledningen går vi igenom hur du skapar en grundläggande poll-applikation.
Den kommer att bestå av två delar:
En publik webbplats som låter människor se omröstningar och rösta i dem.
En administratörswebbplats där du kan lägga till, ändra och ta bort omröstningar.
Vi antar att du redan har Django installerat. Du kan se om Django är installerat och vilken version det är genom att köra följande kommando i en shell-prompt (anges med prefixet $):
$ python -m django --version
...\> py -m django --version
Om Django är installerat bör du se versionen av din installation. Om den inte är det får du ett felmeddelande som säger ”Ingen modul med namnet django”.
Denna handledning är skriven för Django 5.2, som stöder Python 3.10 och senare. Om Django-versionen inte matchar kan du hänvisa till handledningen för din version av Django genom att använda versionsomkopplaren längst ner till höger på denna sida, eller uppdatera Django till den senaste versionen. Om du använder en äldre version av Python, kontrollera Vilken Python-version kan jag använda med Django? för att hitta en kompatibel version av Django.
Var du kan få hjälp:
Om du har problem med att gå igenom den här handledningen kan du gå till avsnittet Att få hjälp i FAQ.
Skapa ett projekt¶
Om det här är första gången du använder Django måste du ta hand om en del inledande inställningar. Du måste nämligen autogenerera en del kod som upprättar ett Django project - en samling inställningar för en instans av Django, inklusive databaskonfiguration, Django-specifika alternativ och applikationsspecifika inställningar.
Från kommandoraden, cd
till en katalog där du vill lagra din kod och skapa en ny katalog med namnet djangotutorial
. (Detta katalognamn spelar ingen roll för Django; du kan byta namn på det till vad du vill)
$ mkdir djangotutorial
...\> mkdir djangotutorial
Kör sedan följande kommando för att starta upp ett nytt Django-projekt:
$ django-admin startproject mysite djangotutorial
...\> django-admin startproject mysite djangotutorial
Detta kommer att skapa ett projekt som heter mysite
i katalogen djangotutorial
. Om det inte fungerade, se Problem med att köra django-admin.
Observera
Du måste undvika att namnge projekt efter inbyggda Python- eller Django-komponenter. I synnerhet innebär detta att du bör undvika att använda namn som django
(som kommer att stå i konflikt med Django själv) eller test
(som står i konflikt med ett inbyggt Python-paket).
Låt oss titta på vad startproject
skapade:
djangotutorial/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
Dessa filer är:
:fil:`manage.py`: Ett kommandoradsverktyg som låter dig interagera med det här Django-projektet på olika sätt. Du kan läsa alla detaljer om
manage.py
i django-admin och manage.py.:fil:`mysite/`: En katalog som är det faktiska Python-paketet för ditt projekt. Dess namn är det Python-paketnamn som du måste använda för att importera något i den (t.ex.
mysite.urls
).:fil:`mysite/__init__.py`: En tom fil som talar om för Python att den här katalogen ska betraktas som ett Python-paket. Om du är nybörjare i Python, läs mer om paket i de officiella Python-dokumenten.
mysite/settings.py
: Inställningar/konfiguration för detta Django-projekt. Django-inställningar berättar allt om hur inställningar fungerar.:fil:`mysite/urls.py`: URL-deklarationerna för det här Django-projektet; en ”innehållsförteckning” för din Django-drivna webbplats. Du kan läsa mer om webbadresser i URL-distributör.
:fil:`mysite/asgi.py`: En ingångspunkt för ASGI-kompatibla webbservrar för att betjäna ditt projekt. Se Så här distribuerar du med ASGI för mer information.
:fil:`mysite/wsgi.py`: En ingångspunkt för WSGI-kompatibla webbservrar för att betjäna ditt projekt. Se Så här distribuerar du med WSGI för mer information.
Server för utveckling¶
Låt oss verifiera att ditt Django-projekt fungerar. Byt till djangotutorial
-katalogen, om du inte redan har gjort det, och kör följande kommandon:
$ python manage.py runserver
...\> py manage.py runserver
Du kommer att se följande utdata på kommandoraden:
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. augusti 11, 2025 - 15:50:53 Django version 5.2, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C. WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead. For more information on production servers see: https://docs.djangoproject.com/en/5.2/howto/deployment/
Observera
Ignorera varningen om oanvända databasmigreringar för tillfället; vi kommer att ta itu med databasen inom kort.
Nu när servern är igång kan du besöka http://127.0.0.1:8000/ med din webbläsare. Du kommer att se en ”Grattis!”-sida med en raket som lyfter. Det fungerade!
Du har startat Djangos utvecklingsserver, en lättviktig webbserver som är skriven helt i Python. Vi har inkluderat detta med Django så att du kan utveckla saker snabbt, utan att behöva ta itu med att konfigurera en produktionsserver - till exempel Apache - tills du är redo för produktion.
Nu är det dags att påpeka: använd inte den här servern i något som liknar en produktionsmiljö. Den är endast avsedd för användning under utveckling. (Vi är i branschen för att göra webbramverk, inte webbservrar)
(För att servera webbplatsen på en annan port, se runserver
-referensen)
Automatisk omladdning av runserver
Utvecklingsservern laddar automatiskt om Python-koden för varje begäran efter behov. Du behöver inte starta om servern för att kodändringar ska träda i kraft. Vissa åtgärder, som att lägga till filer, utlöser dock inte en omstart, så du måste starta om servern i dessa fall.
Skapa appen Polls¶
Nu när din miljö - ett ”projekt” - har skapats är du redo att börja arbeta.
Varje applikation du skriver i Django består av ett Python-paket som följer en viss konvention. Django levereras med ett verktyg som automatiskt genererar den grundläggande katalogstrukturen för en app, så att du kan fokusera på att skriva kod istället för att skapa kataloger.
Projekt kontra appar
Vad är skillnaden mellan ett projekt och en app? En app är en webbapplikation som gör något - t.ex. ett bloggsystem, en databas med offentliga register eller en liten app för opinionsundersökningar. Ett projekt är en samling konfigurationer och appar för en viss webbplats. Ett projekt kan innehålla flera appar. En app kan finnas i flera projekt.
Dina appar kan ligga var som helst i din Python-sökväg. I den här handledningen skapar vi vår poll-app i mappen djangotutorial
.
För att skapa din app, se till att du befinner dig i samma katalog som manage.py
och skriv detta kommando:
$ python manage.py startapp polls
...\> py manage.py startapp polls
Det skapar en katalog polls
, som är uppbyggd så här:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
Denna katalogstruktur kommer att hysa pollapplikationen.
Skriv din första vy¶
Låt oss skriva den första vyn. Öppna filen polls/views.py
och lägg in följande Python-kod i den:
polls/views.py
¶from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
Detta är den mest grundläggande vyn som är möjlig i Django. För att komma åt den i en webbläsare måste vi mappa den till en URL - och för detta måste vi definiera en URL-konfiguration, eller ”URLconf” för kort. Dessa URL-konfigurationer definieras i varje Django-app, och de är Python-filer med namnet urls.py
.
För att definiera en URLconf för appen polls
skapar du en fil polls/urls.py
med följande innehåll:
polls/urls.py
¶from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
Din appkatalog bör nu se ut som följer:
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
Nästa steg är att konfigurera rot-URLconf i projektet mysite
så att den inkluderar URLconf som definieras i polls.urls
. För att göra detta lägger du till en import för django.urls.include
i mysite/urls.py
och infogar en include()
i listan urlpatterns
, så att du har:
mysite/urls.py
¶from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]
Funktionen path()
förväntar sig minst två argument: route
och view
. Funktionen include()
tillåter referenser till andra URLconfs. När Django stöter på include()
, hugger den av den del av URL:en som matchade fram till den punkten och skickar den återstående strängen till den inkluderade URLconf för vidare bearbetning.
Tanken bakom include()
är att göra det enkelt att plugga in och spela upp webbadresser. Eftersom omröstningar finns i sin egen URLconf (polls/urls.py
) kan de placeras under ”/polls/”, eller under ”/fun_polls/”, eller under ”/content/polls/”, eller någon annan sökvägsrot, och appen kommer fortfarande att fungera.
När ska man använda include()
Du bör alltid använda include()
när du inkluderar andra URL-mönster. Det enda undantaget är admin.site.urls
, som är en förbyggd URLconf som tillhandahålls av Django för standardadministratörsplatsen.
Du har nu kopplat en index
-vy till URLconf. Verifiera att det fungerar med följande kommando:
$ python manage.py runserver
...\> py manage.py runserver
Gå till http://localhost:8000/polls/ i din webbläsare, och du bör se texten ”Hello, world. You’re at the polls index.”, som du definierade i vyn index
.
Sidan hittades inte?
Om du får en felsida här, kontrollera att du går till http://localhost:8000/polls/ och inte http://localhost:8000/.
När du känner dig bekväm med det grundläggande flödet för begäran och svar kan du läsa del 2 av denna handledning för att börja arbeta med databasen.