Python fra scratch - Lag et dynamisk nettsted

Vi har dekket ganske mye Python i de tidligere opplæringene i denne sesjonen. I dag skal vi kombinere alt vi har lært så langt for å bygge et dynamisk nettsted med Python.


Foretrekker en videoopplæring?

Se flere videoopplæringer på YouTube.

Så hvordan begynner du å lage nettsteder med Python? Vel, du kan gjøre alt selv, og skrive et program som kjører på en webserver, aksepterer sideforespørsler og serverer svar i form av HTML og andre ressurser. Men det er mye arbeid, så hvorfor gå til alle problemer når det er mange eksisterende verktøy der ute for å gjøre jobben for deg? Disse verktøyene kalles rammer, og de er det vi skal bruke i dag for å lage vår nettside.

Python Rammer

Det er ganske mange Python web-rammer, men her er noen av de beste:

  • Django - Vi skal bruke dette i dag. Den har et stort sett med funksjoner, men er fortsatt enkelt å bruke. Dokumentasjonen er også utmerket, så hvis du sitter fast, har du den enkleste tiden å løse problemet med Django.
  • Grok - Et annet rammeverk med et funksjonssett som kommer nær Django. Hvis du bestemmer deg for at du ikke foretrekker Django, er dette et godt alternativ.
  • WebPy - Et mye mer lett rammeverk. Det har ikke så mange funksjoner, men det gjorde kraften Reddit i en periode!
  • TurboGears - Selv om det tidligere har et rykte for dårlig dokumentasjon, har TurboGears forbedret seg vesentlig det siste året.

En mer omfattende liste kan bli funnet på Python-nettstedet hvis du har behov for flere alternativer. I dag skal vi sette Django opp for utvikling på en lokal maskin, og deretter bygge en enkel blogg. Vi skal også gjennomgå prosessen med å installere den på en ekstern webserver.


Installere Django

Vi skal utføre det meste av vårt arbeid i terminalen. Dette skal alle fungere på Mac og Linux; Men hvis du kjører Windows, er prosessen noe annerledes. En kjennskap til kommandolinjen er ikke nødvendig hvis du bare skriver Python, men hvis du planlegger å bruke Django eller kjører et dynamisk nettsted generelt, er det verdt å lære.

Terminal Tutorials

Vurder å gjennomgå disse veiledningene for å få deg i gang med terminalen.

  • Et intro å jobbe i terminalen, som også dekker Git og Github.
  • 10 tips for å jobbe raskere i terminalen.

Her er kommandoene du trenger for å installere Django. Det er ikke kompatibelt med Python 3, så du må installere versjon 2.7 eller tidligere for å få det til å kjøre.

 wget http://www.djangoproject.com/download/1.3.1/tarball/ tar xzvf Django-1.3.1.tar.gz cd Django-1.3.1 python setup.py installere

Deretter kan vi eventuelt fjerne installasjonsfilene.

 cd ... rm Django-1.3.1.tar.gz

Det burde gjøre det! La oss teste det ut.

 python fra django import get_version get_version ()

Du bør se '1.3.1'. Hvis du gjør det, jobbet alt og Django er installert på systemet ditt. Gratulerer! Vi er klare til å begynne å lage nettstedet vårt!


Bygg vår blogg

Vi skal bygge et bloggsystem i dag, fordi det er en utmerket måte å lære det grunnleggende. Først må vi opprette et Django-prosjekt.

cd ~ / Dokumenter / Prosjekter django-admin.py startprosjekt FirstBlog cd FirstBlog ls

Hva gjør hver av disse filene?

  • __init__.py forteller Python at denne mappen er en Python-pakke. Vi lærte om disse i den tredje leksjonen; det tillater Python å importere alle skriptene i mappen som moduler.
  • manage.py er egentlig ikke en del av nettstedet ditt; Det er et verktøyskript som du kjører fra kommandolinjen. Den inneholder en rekke funksjoner for å administrere nettstedet ditt.
  • settings.py inneholder nettstedets innstillinger. Django bruker ikke XML-filer for konfigurasjon; alt er python. Denne filen er bare en rekke variabler som definerer innstillingen for nettstedet ditt.
  • urls.py er filen som kartlegger nettadresser på sider. For eksempel kan det kartlegge yourwebsite.com/about til en Om oss side.

Django refererer til seg selv en MTV rammeverk, som står for Model Template View.

Apps

Men ingen av disse filene på egen hånd gjør et funksjonelt nettsted. For det trenger vi Apps. Apper er hvor du skriver koden som gjør nettstedet ditt, men før vi tar en titt på dem, må vi forstå litt om Djangos designprinsipper.

For det første er Django et MVC-rammeverk, som står for Model View Controller. Django refererer til seg selv en MTV rammeverk, som står for Model Template View. Det er en litt annen tilnærming enn MVC, men i utgangspunktet er de ganske like. MVC er likevel et arkitektonisk mønster som gir en metode for å strukturere prosjektene dine. Det skiller koden som brukes til å behandle data fra koden som administrerer brukergrensesnittet.

Django abonnerer på DRY, eller "Do not Repeat Yourself" filosofien.

For det andre abonnerer Django på DRY, eller Gjør ikke gjenta selvfilosofien, noe som betyr at du aldri skal skrive kode som utfører en bestemt oppgave mer enn en gang. For eksempel, i bloggen vår, hvis vi skrev en funksjon som plukket en tilfeldig artikkel fra arkivet, og implementerte denne funksjonen på flere sider, ville vi ikke kodes det igjen hver gang det var nødvendig. Vi ville kode det en gang, og deretter bruke det på hver side.

Så hvordan er dette relatert til apps? Vel, programmer lar deg skrive nettstedet ditt i en tørr stil. Hvert prosjekt, som det vi har her, kan inneholde flere apper. Omvendt kan hver app være en del av flere prosjekter. Ved hjelp av eksemplet fra tidligere, betyr dette at hvis vi laget et annet nettsted i fremtiden som også trengte en tilfeldig sidefunksjon, måtte vi ikke skrive det hele om igjen. Vi kunne ganske enkelt importere appen fra dette prosjektet. På grunn av dette er det viktig at hver app tjener en distinkt hensikt. Hvis du skriver all funksjonalitet på nettstedet ditt i én app, og da må du bruke en del av det igjen senere, må du importere alt. Hvis du for eksempel skulle lage en e-handelswebområde, ville du ikke ønsker å importere alle bloggfunksjonene. Men hvis du lager en app for den tilfeldige funksjonen og en app for bloggutgivelsessystemet, kan du velge og velge biter du trenger.

Dette betyr også at koden er godt organisert på nettstedet. Hvis du vil endre en funksjon, trenger du ikke å søke gjennom en massiv fil; Du kan i stedet bla gjennom den aktuelle appen og endre den uten å bekymre deg for å forstyrre noe annet.

python mangage.py startapp blog cd blog ls

Igjen har vi en __init__.py fil for å gjøre det til en pakke, og tre andre filer: modeller, tester og visninger. Vi trenger ikke å bekymre deg for tester for nå, men de to andre er viktige. Modeller og Visninger er M og V deler av MVC.

I modeller definerer vi våre datastrukturer.

Hvis du noen gang har jobbet med PHP før, kan du ha brukt PhpMyAdmin til å lage MySQL-tabeller, og deretter skrive ut dine SQL-spørringer manuelt i PHP-skriptene dine. I Django er det mye lettere. Vi definerer alle datastrukturene vi trenger i denne modellfilen, kjør deretter en kommando og alle nødvendige databaser er laget for oss.

Når du ønsker å få tilgang til dataene, går du via disse modellene ved å ringe metode på dem, i stedet for å kjøre raske spørringer. Dette er veldig nyttig, fordi Django kan bruke flere databaseprogrammer. Vi skal bruke MySQL i dag, fordi det er den mektigste, og er det som de fleste vertene gir, men hvis vi måtte bytte til en annen database i fremtiden, vil hele koden fortsatt være gyldig! På andre språk, hvis du vil bytte til SQLite eller noe lignende, må du skrive om koden som kommer til databasen din.

I visningsfilen skriver vi koden som faktisk genererer nettsidene. Dette knytter alle de andre delene sammen. Når en bruker skriver inn en URL, blir den sendt av webadresser skript vi så tidligere til visninger script, som deretter får relevant data fra modellene, behandler den og overfører den til en mal, som til slutt blir servert som siden brukeren ser. Vi tar en titt på disse malene snart. De er den enkleste delen - for det meste HTML.

For en blogg trenger vi et bord med innlegg, med flere felt for tittelen, kroppstexten, forfatteren, tidspunktet den ble skrevet og så videre. En ekte blogg ville ha kommentarer, men det er utenfor omfanget av dagens demo.

fra django.db importere modeller klasse innlegg (models.Model): author = models.CharField (max_length = 30) title = models.CharField (max_length = 100) bodytext = models.TextField () timestamp = models.DateTimeField ()

MySQL

Disse modellene er bare en beskrivelse. Vi må lage en faktisk database fra dem. Først må vi imidlertid ha MySQL på vårt system. På en faktisk webserver ville dette ikke være et problem, fordi de vanligvis har det forhåndsinstallert. Heldigvis, med en pakkebehandling, er det enkelt å installere. Først må du installere Homebrew og Easy Install

brygg installasjon mysql easy_install mysql-python mysqld_safe - skip-grant-tables # alle har full tillatelser mysql -u rot UPDATE mysql.user SET Passord = PASSWORD ('nettutsikt') WHERE User = "root"; #give brukerens rot 'et passord FLUSH PRIVILEGES; mysql -u root -p #logg inn med passordet 'nettuts' CREATE DATABASE firstblog; avslutte python2.6 manage.py runserver

Når du starter på nytt, vil MySQL ikke løpe, så hver gang du trenger å gjøre dette i fremtiden, løp mysqld for å starte serveren. Du kan deretter kjøre python2.6 manange.py runserver i en ny kategori for å starte utviklingsserveren.

Denne kommandoen kjører ikke serveren enda, den vil bare returnere en feil. Det er fordi vi må konfigurere innstillingene våre. La oss ta en titt på settings.py.

Du må først endre databaseinnstillingene. Disse begynner på linje tolv.

DATABASES = 'default': 'ENGINE': 'django.db.backends.mysql', # Legg til 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' eller 'oracle'. 'NAME': 'firstblog', # Eller vei til databasefil hvis du bruker sqlite3. 'BRUKER': 'root', # Ikke brukt med sqlite3. 'PASSWORD': 'netts', # Ikke brukt med sqlite3. 'HOST': ", # Sett til tom streng for localhost. Ikke brukt med sqlite3. 'PORT':", # Sett til tom streng for standard. Ikke brukt med sqlite3. 

Hvis du prøver å kjøre serveren igjen, bør den fungere, forutsatt at du har installert MySQL. Hvis du besøker 127.0.0.1:8000 i nettleseren din, bør du se standard Django-siden.

La oss nå gjøre vår Django-side til en blogg. Først må vi bruke våre Modeller for å lage tabeller i databasen ved å kjøre følgende kommando:

python2.6 manage.py syncdb

Hver gang du endrer modellene dine, bør du kjøre denne kommandoen for å oppdatere databasen. Merk at dette ikke kan endre eksisterende felt; Det kan bare legge til nye. Så hvis du vil fjerne felt, må du gjøre det manuelt med noe som PhpMyAdmin. Fordi dette er første gang vi har kjørt kommandoen, vil Django sette opp alle standard innebygde tabeller for ting som administrasjonssystemet. Skriv bare 'ja' og fyll inn dine opplysninger.

La oss nå sette opp urls.py fil. Uncomment den første linjen i eksempler delen, og endre den til å si url (r '^ $', 'FirstBlog.blog.views.home', name = "home") .

La oss nå lage visningsfilen for å svare på disse forespørslene.

fra django.shortcuts import render_to_response fra blog.models importere innlegg def home (request): return render_to_response ('index.html')

maler

Dette index.html filen eksisterer ikke ennå, så la oss gjøre det. Opprett en mappe, kalt maler i blog app og lagre en fil i den kalt index.html, som bare kan inneholde "Hello World" for nå. Da må vi redigere innstillingsfilen slik at Django vet hvor denne malen er.

Linje 105 er hvor delen for å deklarere malmapper starter. så juster det slik som:

TEMPLATE_DIRS = ("blogger / maler", # Legg strenger her, som "/ home / html / django_templates" eller "C: / www / django / templates". # Bruk alltid fremoverstreker, selv på Windows. å bruke absolutte baner, ikke relative veier.)

Hvis du kjører serveren igjen og oppdaterer siden i nettleseren din, bør du se meldingen "Hello World". Vi kan nå begynne å legge ut bloggen vår. Vi legger til noen boilerplate HTML for hjemmesiden.

      Første blogg   

Første blogg

Tittel

Skrevet på dato av forfatter

Kropps tekst

Hvis du lagrer og oppdaterer siden, bør du se at siden er oppdatert med dette nye innholdet. Det neste trinnet er å legge til dynamisk innhold fra databasen. For å oppnå dette har Django et templerende språk som lar deg legge inn variabler med krøllete braces. Endre midtdelen av siden din for å se slik ut:

Første blogg

title

Skrevet den date av author

kropp

Vi kan da sende inn verdier til disse variabile plassholderne fra views.py fil ved å opprette en ordliste av verdier.

fra django.shortcuts import render_to_response fra blog.models import innlegg def home (request): content = 'title': 'Min første innlegg', 'forfatter': 'Giles', 'date': '18 september 2011' kropp ':' Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam kurs tempus dui, ut vulputate nisl eleifend eget. Aenean bareo felis, dapibus quis vulputate på, porta et dolor. Foreløpig ikke tilgjengelig, ikke tilgjengelig, ikke tilgjengelig. Etiam eget convallis turpis. Donec non sem justo. ', Returnere render_to_response (' index.html ', innhold)

Lagre og oppdater, og du bør se at du nå sender innhold til en mal fra visningsfilen din. Det siste trinnet er å få data fra vår database og passere det i stedet. Heldigvis kan vi gjøre alt dette uten SQL-spørringer, ved hjelp av Django's modeller. Vi må legge til vår blog app til vår FirstBlog prosjekt ved å endre en annen innstilling. Gå til INSTALLED_APPS på linje 112, og legg til

'FirstBlog.blog',

til listen.

Endre deretter views.py så det legger til data fra databasen.

fra django.shortcuts import render_to_response fra blog.models import innlegg def home (request): oppføringer = posts.objects.all () [: 10] return render_to_response ('index.html', 'posts': entries)

Oppdater deretter malen for å få tilgang til disse dataene.

Første blogg


% for innlegg i innlegg%

post.title

Skrevet den post.timestamp av post.author

post.bodytext


% endfor%

Her kan vi få tilgang til alle dataene i vårt bord i views.py fil, velg deretter bare de første ti oppføringene. Vi overfører disse dataene til malen, slår gjennom oppføringene og viser dataene med HTML på nettstedet vårt. Dette vil ikke fungere enda, fordi det ikke er noe i databasen. Stopp serveren og kjøre:

python2.6 manage.py syncdb

Dette vil legge til det nye tabellen for innleggene våre i databasen. Deretter åpner du en ny kategori og skriver inn:

mysql -u rot-p

... skriv inn passordet ditt, trykk enter og utfør:

INSERT TIL blog_posts (forfatter, tittel, bodytext) verdier ('Bob', 'Hello World', 'Lorem Ipsum');

Gå tilbake til forrige kategori og kjør serveren igjen. Oppdater siden, og du bør se et blogginnlegg med dummyinnholdet du nettopp har lagt til. Hvis du kjører MySQL-kommandoen noen ganger, bør du se flere innlegg vises på siden når du oppdaterer.

Django's Admin System

Det siste vi trenger å gjøre i dag, er gjennomgang Django's administrasjonssystem. Dette er en veldig kraftig funksjon av Django som lar deg administrere nettstedet ditt uten å skrive noe mer kode, som du måtte gjøre hvis du opprettet et nettsted fra bunnen av. For å aktivere det, må vi endre noen innstillinger. Først ikke-kommende linjer 4, 5, 13 og 16 innenfor urls.py, slik at du faktisk kan få tilgang til admin siden. Deretter går du til INSTALLED_APPS del av settings.py og uncomment 'Django.contrib.admin', og 'django.contrib.admindocs',. Å la administratoren kontrollere din innlegg bord, opprett en ny fil som heter admin.py i blog mappe, og legg til følgende linjer:

fra django.contrib import admin fra blog.models importere innlegg admin.site.register (innlegg)

Løpe python2.6 manage.py syncdb igjen for å legge til tabellene for admin-delen, og start serveren på nytt.

Hvis du besøker 127.0.0.1:8000/admin Nå i nettleseren din, bør du se en innloggingsside. Bruk detaljene du valgte tidligere da du først kjørte SyncDB kommando for å logge inn. Du bør se en seksjon, kalt Blog, med en undertekst for innlegg bord. Du kan bruke dette til å lage, redigere og fjerne blogginnlegg med et enkelt grensesnitt.

Det er alt der er å gjøre. Du har nettopp opprettet en fullt fungerende, men enkel blogg. For å fullføre denne leksjonen, skal vi se på å installere Django på en webserver.


Installere på en webserver

Det er to typer web hosting, og den du har vil påvirke om du kan bruke Django. Hvis du har delt hosting, er du helt til din verts nåde.

Mange billige web verter støtter ikke Python. Mens PHP er nesten garantert, er det ofte ikke støtte for andre språk. Du må sjekke kontrollpanelet for å finne ut om Python (og Django) er tilgjengelig. Åpenbart er prosessen litt annerledes med hver vert. Nesten alle hosting kjører på Apache, og vi kan bruke den til å være vert for Django, ved hjelp av mod_wsgi eller mod_python Apache moduler.

De fleste webverter kjører skript på flere språk ved hjelp av CGI. Django kan kjøre på FastCGI, og også teoretisk på CGI, men dette støttes ikke offisielt og vil være altfor sakte for en faktisk produksjonswebside. Du må sjekke om disse er installert. De er vanligvis funnet under en overskrift, som "CGI og Scripting Language Support".

Hvis du har VPS hosting, eller er heldig nok til å ha en dedikert server, er livet ditt mye lettere. Vanligvis kommer disse med Python forhåndsinstallert, og derfra trenger du bare å følge de samme trinnene vi gikk gjennom for å få en lokal kopi av Django. Hvis du ikke har Python, kan du installere den med en pakkebehandling. Systemet ditt kan til og med komme med Django.

ssh [email protected] wget http://www.djangoproject.com/download/1.3.1/tarball/ tar xzvf Django-1.3.1.tar.gz cd Django-1.3.1 python setup.py install

Når du har installert Django på serveren din, last opp siden du nettopp har laget ved hjelp av en filoverføringsklient. Du kan sette filene hvor som helst, men hold dem ut av offentlig mappe, eller noen vil kunne se kildekoden til nettstedet ditt. jeg bruker /hjem for alle mine prosjekter.

Deretter oppretter du en MySQL-database, kalt "firstblog" på serveren din og kjører SyncDB en gang til. Du må opprette kontoen din til administrasjonskontrollpanelet igjen, men dette er en engangs ting.

Hvis du prøver å kjøre dette, kan du få en feil, og det er fordi innstillingene for serveren er forskjellige på den lokale datamaskinen. Du må kanskje endre databasens passord innen settings.py, men avhengig av serverkonfigurasjonen din, kan du også støte på andre problemer. Google er din venn i disse situasjonene!

For å kjøre serveren denne gangen, er kommandoen litt annerledes. Du må angi en IP-adresse og en port slik at du kan få tilgang til nettstedet over internett.

python manage.py runserver 0.0.0.0:8000

Hvis du besøker nettstedet ditt i en nettleser, på port 8000, bør du se nettstedet ditt!


Konklusjon

Det er det for denne leksjonen ... og vår serie. Jeg håper du har lært en rekke nyttige ferdigheter i løpet av de siste fem leksjonene, og at du er klar til å fortsette og lære enda mer Python i fremtiden. Hvis du liker utseendet på Django, og ønsker å fortsette å øke din kunnskap om rammen, er det noen ekstra opplæringsprogrammer om emnet.

  • Dykking inn i Django
  • Lag en oppgaveliste
  • 10 nyttige Django tips

Som alltid er jeg glad for å diskutere eventuelle spørsmål om denne opplæringen eller Python generelt i kommentarene. Takk for at du leste.

Lær python

Lær Python med vår komplette pythonveiledning, enten du er bare i gang eller du er en erfaren coder som ønsker å lære nye ferdigheter..