Kom i gang med web-rammeverket Django

Published on 18 July 2008 by Jone in Django

0

De som følger med i den pågående webrammeverk-krigen bør ha fått med seg Django - Et open source web-rammeverk skrevet i Python. Deler visse likheter med Ruby on Rails, som er prosjektets største konkurrent. Django ble først utviklet i et privat nyhetsselskap og ble etterhvert lansert som open source programvare. Deretter har prosjektet hatt enorm vekst og er i dag en av de mest brukte web-rammeverkene som finnes. Selveste Guido van Rossum (mannen som laget Python og nå jobber for google) har også uttalt at han både liker og bruker Django.

Målet med Django er å effektivisere arbeidet med å utvikle webapplikasjoner. Jeg har selv levd av å programmere PHP i over 5 år, og synes det var fantastisk spennende å gå over til Django. Plutselig ble det gøy å programmere igjen, for det gikk så fort. Jeg tør å påstå at tiden det tar meg å utvikle tradisjonelle nettløsninger er redusert med minst 25% siden jeg gikk over til Python og Django. I løpet av minutter kan man lage seg en database-struktur og et enkelt grensesnitt for å presentere strukturen. Man slipper å bruke evigheter på å skrive SQL manuelt, noe som mildt sagt er en befrielse. I dette innlegget skal jeg prøve å gi en kort innledning i hvordan man kan sette i gang med Django.

Last ned og installer Django

Det er mulig å kjøre Django på Windows men jeg har ingen erfaring med det og alle eksempler i dette innlegget tar utgangspunkt i at det blir gjort i et Linux-miljø.

Først må du laste ned Django. Det anbefales å laste ned fra SVN, da den er stabil nok til å brukes i produksjon. De er svært forsiktige med hva de flytter inn i trunk, og varsler alltid hvis det skjer noen endringer som ikke er bakoverkompatible. Jeg kjører selv flere sider i produksjon med SVN versjonen.

Last ned Django fra SVN

svn co http://code.djangoproject.com/svn/django/trunk/ django

Når den blir ferdig med å laste ned fra Subversion kan du installere Django ved hjelp av python setup.py install

cd django
python setup.py install

Hvis du ikke får opp noen feilmeldinger nå skal Django være installert og tilgjengelig i Python. Jeg anbefaler virkelig å installere IPython (Interactive Python), som er et Python shell med masse hendig funksjonalitet (tab completion og mye mer…). IPython kan kombineres med Django slik at man kan kjøre en kommando og få et Python shell med ditt Django prosjekt tilgjengelig (og dermed dine databasemodeller o.l.). Det gjør det svært lett å eksperimentere og teste egen kode. Hvis du bruker en distribusjon med Debians pakkesystem kan du installere IPython med følgende kommando:

apt-get install ipython

På bildet over kan du se IPython i aksjon. Det er tab-completion som sørger for at alle de alternativene kommer opp i slutten.

Start et Django prosjekt

Til dette innlegget (og muligens flere) skal vi lage et prosjekt som skal styre bokmerker. Vi begynner med noe enkelt, som en database over linker i kategorier. Dermed skal vi opprette et prosjekt som heter bookmarks. Når Django er installert vil et par verktøy være tilgjengelig i kommandolinjen. Et av disse heter django-admin.py, og brukes blant annet når man ønsker å starte et nytt prosjekt. Kommandoen vi skal bruke da heter startproject og tar et argument for prosjektnavn. Å bruke et bra prosjektnavn er viktig, for man kommer til å bruke ordet svært mye rundtomkring i koden til prosjektet. Det bør være noenlunde kort og lett å skrive. Finn deg en plass du ønsker å ha prosjektet, og utfør følgende:

django-admin.py startproject bookmarks

Det skal nå være opprettet en mappe bookmarks der hvor kommandoen ble kjørt fra. Denne mappen inneholder et par filer. Et Django prosjekt består av en eller flere applikasjoner. Hver applikasjon kan ha egne databasestrukturer og så videre. Et prosjekt kan også plugge inn andre applikasjoner som er installert - noe som er veldig nyttig hvis man vil gjenbruke noen andres kode. Til vårt bookmarks prosjekt trenger vi ikke flere applikasjoner, så vi begynner bare med å opprette en applikasjon som heter main.

cd bookmarks
django-admin.py startapp main

Rediger konfigurasjonsfilen til bookmarks

Før du kan gjøre noe særlig med prosjektet ditt må du konfiguere innstillingene for database og lignende. Det finner du i settings.py, som ligger i rota til prosjektet. Åpne filen med din favoritt teksteditor. Først av alt må vi sette opp informasjon angående databasen. For å holde ting så lite komplisert som mulig har jeg tenkt å velge SQLite som database for dette prosjektet. Det eneste du da trenger å redigere er DATABASE_NAME og DATABASE_ENGINE. For mitt prosjekt blir linjene som følger, det blir annerledes for deg basert på hvor du har det lagret.

DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = '/home/enoj/projects/bookmarks/sqlite.db'

Deretter er det et par andre linjer vi må fikse. Vi må sette tidssone til GMT+1 samt sette et par andre innstillinger. Først må vi opprette to mapper for templates og media. Disse mappene kan opprettes direkte i rota til prosjektet, som følger:

mkdir media
mkdir templates

Deretter må vi redigere settings.py filen for å legge inn disse verdiene (jeg har kun lagt inn linjene som skal endres):

TIME_ZONE = 'Europe/Oslo'
LANGUAGE_CODE = 'no'
MEDIA_ROOT = '/home/enoj/projects/bookmarks/media'
MEDIA_URL = '/site_media/'

TEMPLATE_DIRS = (
    '/home/enoj/projects/bookmarks/templates',
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'bookmarks.main',
)

Som du ser måtte vi legge til vår applikasjon under INSTALLED_APPS. Vi måtte også legge inn template-katalogen i TEMPLATE_DIRS.

Hvis alt er gjort riktig skal vi nå kunne starte utviklingsserveren til Django. I hvert prosjekt finnes det en fil som heter manage.py, som man kan bruke til å utføre diverse operasjoner for prosjektet. En av disse funksjonene er å starte utviklingsserveren. Man starter da denne på egen port, slik at applikasjonen du utvikler er tilgjengelig på denne til enhver tid. Serveren bør da naturligvis kjøre i screen hvis du ønsker at den skal kjøre hele tia. Prøv å starte serveren med python manage.py runserver 0:8000. Hvis du får følgende respons skal alt fungere:

enoj@enoj-laptop:~/projects/bookmarks$ python manage.py runserver 0:8000
Validating models...
0 errors found

Django version 0.97-pre-SVN-unknown, using settings 'bookmarks.settings'
Development server is running at http://0:8000/
Quit the server with CONTROL-C.

Hvis du ikke får opp noen feilmeldinger kan du nå åpne http://localhost:8000/ i en nettleser og få opp Djangos standard “It worked! Welcome to Django” side.

Databasen-innstillingene som vi satte opp tidligere er fortsatt ikke tatt i bruk. For å opprette SQLite-databasen må vi igjen bruke verktøyet manage.py, denne gang med kommandoen syncdb. Syncdb tar seg av å synkronisere databasestrukturen til enhver tid. Hvis du legger til en ny modell i prosjektet ditt, må du kjøre syncdb for at tabellen til modellen din skal bli opprettet.

NB: Syncdb har for øyeblikket ingen mulighet til å vite om endringer som skjer på enkelte kolonner i en database. Hvis du derfor endrer en kolonne fra å være VARCHAR(100) til VARCHAR(200) må du dermed selv oppdatere strukturen ved å kjøre ALTER TABLE for å redigere kolonnen. Det samme gjelder også hvis du legger til nye eller sletter eksisterende kolonner. Hvis du lurer på hvordan kolonnen sin SQL ser ut, kan du alltid bruke manage.py sqlreset <appnavn>. Du vil da få printet ut all SQL’en som skal til for å generere databasestrukturen. Finn rett tabell og kopier kolonnedefinisjonen.

Første gang man kjører syncdb i et prosjekt vil Djangos interne tabeller installeres. Samtidig blir det opprettet en “superbruker” konto som du skal bruke til å administrere prosjektet. Hvilke Django tabeller som installeres er avhengig av hvilke applikasjoner du har valgt å bruke. La oss kjøre syncdb og se om det fungerer:

enoj@enoj-laptop:~/projects/bookmarks$ python manage.py syncdb
Creating table auth_message
Creating table auth_group
Creating table auth_user
Creating table auth_permission
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'enoj'): Jone
E-mail address: epost-adresse
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Message model
Installing index for auth.Permission model

Hvis du får opp lignende beskjed selv er konfigurasjonen gjort riktig og alt skal være installert og klart til bruk. Jeg kommer til å skrive flere innlegg i løpet av kort tid hvor jeg forklarer nærmere hvordan man går frem i Django. Dette var bare for å forklare hvordan man installerer og setter i gang et prosjekt. I neste innlegg får du vite hvordan man oppretter database-tabeller, views, templates og mye mer! Hvis det er noe som går galt eller du har noen spørsmål så bruk kommentarfeltet under.

Her kommer et par linker fra Djangos dokumentasjon som forklarer visse konsepter.

Leave a Reply