Python from Scratch - Creați un site dinamic

Am acoperit destul de puțin Python în tutorialele anterioare din această sesiune. Astăzi, vom combina tot ceea ce am învățat până acum pentru a construi un site dinamic cu Python.


Prefer un Video Tutorial?

Urmăriți mai multe tutoriale video pe YouTube.

Deci, cum începeți să creați site-uri web cu Python? Ei bine, puteți să le faceți singur și să scrieți un program care rulează pe un server web, acceptând cererile de pagini și oferind răspunsuri sub formă de cod HTML și alte resurse. Cu toate acestea, este o mulțime de muncă, deci de ce să mergeți la toate necazurile atunci când există o mulțime de instrumente existente acolo pentru a face treaba pentru tine? Aceste instrumente sunt numite cadre și sunt ceea ce vom folosi astăzi pentru a crea site-ul nostru web.

Python Frameworks

Există destul de multe cadre web Python, dar aici sunt unele dintre cele mai bune:

  • Django - Vom folosi asta astăzi. Are un set imens de caracteristici, dar rămâne simplu de utilizat. Documentația este de asemenea excelentă, deci, dacă rămâneți blocat, veți avea cel mai ușor timp pentru a rezolva problema cu Django.
  • Grok - Un alt cadru cu un set de caracteristici apropiat de Django. Dacă decideți că nu preferați Django, aceasta este o alternativă bună.
  • WebPy - Un cadru mult mai ușor. Nu are atâtea caracteristici, deși a făcut puterea Reddit pentru o perioadă de timp!
  • TurboGears - Deși anterior a avut o reputație pentru documentația slabă, TurboGears sa îmbunătățit substanțial în ultimul an.

O listă mai cuprinzătoare poate fi găsită pe site-ul Python dacă aveți nevoie de opțiuni suplimentare. Astăzi o vom pune pe Django pentru dezvoltare pe o mașină locală și apoi vom construi un blog simplu. De asemenea, vom examina procesul de instalare a acestuia pe un server web de la distanță.


Instalarea Django

Vom efectua cea mai mare parte a activității noastre astăzi în Terminal. Toate acestea ar trebui să funcționeze pe Mac și Linux; cu toate acestea, dacă executați Windows, procesul este oarecum diferit. O familiaritate cu linia de comandă nu este necesară dacă scriem doar Python, dar dacă intenționați să utilizați Django sau să rulați un site dinamic în general, merită să învățați.

Terminale Tutoriale

Luați în considerare revizuirea acestor tutoriale pentru a vă face să lucrați cu Terminalul.

  • Un intro pentru a lucra în terminal, care acoperă și Git și Github.
  • 10 sfaturi pentru a lucra mai repede în terminal.

Iată comenzile de care aveți nevoie pentru a instala Django. Nu este compatibil cu Python 3, deci va trebui să instalați versiunea 2.7 sau o versiune anterioară pentru ao face să ruleze.

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

Apoi, putem elimina opțional fișierele de instalare.

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

Ar trebui să o facă! Hai să încercăm.

 python de la django import get_version get_version ()

Ar trebui să vedeți "1.3.1". Dacă faceți asta, totul a funcționat și Django este instalat pe sistemul dvs. Felicitări! Suntem gata să începem să creăm site-ul nostru!


Construirea blogului nostru

Vom construi un sistem blog astăzi, pentru că este o modalitate excelentă de a învăța elementele de bază. În primul rând, trebuie să creăm un proiect Django.

cd ~ / Documente / Proiecte django-admin.py startproject FirstBlog cd FirstBlog ls

Ce face fiecare dintre aceste fișiere?

  • __init__.py spune Python că acest dosar este un pachet Python. Am aflat despre acestea în a treia lecție; permite Python să importe toate scripturile din folder ca module.
  • manage.py nu este de fapt parte a site-ului dvs.; este un script de utilitate pe care îl executați din linia de comandă. Acesta conține o serie de funcții pentru gestionarea site-ului.
  • settings.py conține setările site-ului dvs. Web. Django nu utilizează fișiere XML pentru configurare; totul este Python. Acest fișier este pur și simplu un număr de variabile care definesc setarea pentru site-ul dvs..
  • urls.py este fișierul care direcționează adresele URL către pagini. De exemplu, ar putea harta yourwebsite.com/about la un Despre noi pagină.

Django se referă la un cadru MTV, care se referă la Model Template View.

Aplicații

Cu toate acestea, niciunul dintre aceste fișiere nu poate crea un site funcțional. Pentru asta, avem nevoie de Apps. Aplicațiile sunt în cazul în care scrieți codul care face ca site-ul să funcționeze, dar înainte de a le arunca o privire, trebuie să înțelegem puțin despre principiile de proiectare ale lui Django.

În primul rând, Django este un cadru MVC, care reprezintă Model View Controller. Django se referă la un cadru MTV, care se referă la Model Template View. Este o abordare puțin diferită față de MVC, dar, în esență, sunt destul de asemănătoare. Oricum, MVC este un model arhitectural care oferă o metodă de structurare a proiectelor dvs. Se separă codul utilizat pentru procesarea datelor din codul care gestionează interfața de utilizator.

Django subscrie filosofiei DRY sau "Nu repetați-vă".

În al doilea rând, Django subscrie filosofiei DRY sau Do not Repeat Yourself, ceea ce înseamnă că nu trebuie să scrieți niciodată un cod care să îndeplinească o anumită sarcină de mai multe ori. De exemplu, în blogul nostru, dacă am scris o funcție care a ales un articol aleatoriu din arhivă și a implementat această funcție pe mai multe pagini, nu l-am mai codifica din nou de fiecare dată când era nevoie. Am codificat-o o dată și apoi l-am folosit pe fiecare pagină.

Deci, ce legătură are aceasta cu aplicațiile? Aplicațiile vă permit să vă scrieți site-ul într-un stil DRY. Fiecare proiect, ca cel pe care îl avem aici, poate conține mai multe aplicații. În schimb, fiecare aplicație poate face parte din mai multe proiecte. Folosind exemplul de mai devreme, aceasta înseamnă că, dacă am fi făcut un alt site în viitor, care avea nevoie și de o caracteristică aleatorie a paginii, nu ar fi trebuit să o scriem din nou. Am putea importa aplicația din acest proiect. Din acest motiv, este important ca fiecare aplicație să aibă un scop distinct. Dacă scrieți toate funcționalitățile site-ului dvs. într-o singură aplicație și apoi trebuie să utilizați o parte din acesta din nou mai târziu, trebuie să le importați pe toate. Dacă faceți un site web de eCommerce, de exemplu, nu doriți să importați toate caracteristicile blogului. Cu toate acestea, dacă faceți o aplicație pentru caracteristica aleatorie și o aplicație pentru sistemul de publicare a blogurilor, puteți alege și alege biții de care aveți nevoie.

Acest lucru înseamnă, de asemenea, că în cadrul site-ului, codul este bine organizat. Dacă doriți să modificați o caracteristică, nu trebuie să căutați printr-un fișier masiv; puteți să răsfoiți aplicația relevantă și să o schimbați fără să vă faceți griji cu privire la interferarea cu altceva.

python mangage.py startapp blog cd blog ls

Din nou, avem un __init__.py fișier pentru a face un pachet, și alte trei fișiere: modele, teste și vizualizări. Nu avem nevoie să ne facem griji cu privire la teste pentru moment, dar celelalte două sunt importante. Modelele și viziunile sunt M și V părți ale MVC.

În modele, definim structurile noastre de date.

Dacă ați lucrat vreodată cu PHP înainte, ați fi putut folosi PhpMyAdmin pentru a crea tabelele MySQL și apoi ați scris manual întrebările SQL în scripturile dvs. PHP. În Django, este mult mai ușor. Definim toate structurile de date de care avem nevoie în acest fișier de modele, apoi executați o comandă și toate bazele de date necesare sunt făcute pentru noi.

Când doriți să accesați aceste date, treceți prin aceste modele apelând o metodă pe ele, în loc să rulați interogări brute. Acest lucru este foarte util, deoarece Django poate folosi mai multe programe de baze de date. Vom folosi MySQL astăzi, deoarece este cel mai puternic și este ceea ce majoritatea gazde oferă, dar dacă ar trebui să trecem la o bază de date diferită în viitor, tot codul va fi în continuare valabil! În alte limbi, dacă doriți să comutați la SQLite sau ceva similar, va trebui să rescrieți codul care accesează baza de date.

În fișierul de vizualizări, scriem codul care generează de fapt paginile web. Acest lucru leagă toate celelalte părți împreună. Atunci când un utilizator introduce într-o adresă URL, acesta este trimis de către url-uri script pe care l-am văzut mai devreme vizualizari script, care apoi primeste date relevante din modele, proceseaza-l si trece-l intr-un template, care in sfarsit devine servit ca pagina pe care utilizatorul o vede. Vom examina aceste șabloane în scurt timp. Ele sunt cea mai ușoară parte - mai ales HTML.

Pentru un blog, vom avea nevoie de o masă de postări, cu mai multe câmpuri pentru titlu, text, autor, momentul în care a fost scris și așa mai departe. Un blog real ar avea comentarii, dar acest lucru este dincolo de sfera de demo de astăzi.

de la django.db modele de import posturi de clasă (modele.Model): author = models.CharField (max_length = 30) titlu = models.CharField (max_length = 100) bodytext = models.TextField () timestamp = models.DateTimeField

MySQL

Aceste modele sunt doar o descriere. Trebuie să facem o bază de date reală de la ei. În primul rând, însă, avem nevoie de MySQL care rulează pe sistemul nostru. Pe un server web real, acest lucru nu ar fi o problemă, deoarece de obicei, acesta este preinstalat. Din fericire, cu un manager de pachete, este ușor de instalat. În primul rând, trebuie să instalați Homebrew și Easy Install

brew instalează mysql easy_install mysql-python mysqld_safe --skip-grant-tables # fiecare are permisiuni complete mysql -u rădăcină UPDATE mysql.user SET Password = PASSWORD ('nettuts') WHERE User = "root"; #giveți "root" -ul utilizatorului o parolă PRIVILEGI FLUX; mysql -u rădăcină -p #log in cu parola noastră 'nettuts' CREATE DATABASE firstblog; părăsiți python2.6 run.py run.py

Când reporniți, MySQL nu va fi difuzat, de fiecare dată când trebuie să faceți acest lucru în viitor, rulați mysqld pentru a porni serverul. Puteți rula apoi python2.6 manange.py runserver într-o filă nouă pentru a porni serverul de dezvoltare.

Această comandă nu va rula încă serverul, va reveni doar la o eroare. Asta pentru că trebuie să configuram setările noastre. Să aruncăm o privire la settings.py.

Trebuie să modificați mai întâi setările bazei de date. Acestea încep în linia a douăsprezece.

DATABASES = 'default': 'ENGINE': 'django.db.backends.mysql', # Adauga 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' sau 'oracle'. 'NAME': 'firstblog', # Sau calea catre fisierul bazei de date daca foloseste sqlite3. 'USER': 'root', # Nu este folosit cu sqlite3. 'PASSWORD': 'nettuts', # Nu este folosit cu sqlite3. 'HOST': ", # Setați ca șir gol pentru localhost.Nu este folosit cu sqlite3. 'PORT':", # Setați ca șir gol pentru implicit. Nu este folosit cu sqlite3. 

Dacă încercați să rulați din nou serverul, ar trebui să funcționeze, cu condiția să fi instalat cu succes MySQL. Dacă vizitați 127.0.0.1:8000 în browserul dvs. web, ar trebui să vedeți pagina implicită Django.

Acum să transformăm site-ul nostru Django într-un blog. În primul rând, trebuie să folosim modelele noastre pentru a crea tabele în baza de date executând următoarea comandă:

python2.6 manage.py syncdb

De fiecare dată când modificați modelele, trebuie să executați această comandă pentru a actualiza baza de date. Rețineți că acest lucru nu poate modifica câmpurile existente; poate adăuga numai altele noi. Deci, dacă doriți să eliminați câmpurile, va trebui să faceți acest lucru manual cu ceva asemănător cu PhpMyAdmin. Pentru că aceasta este prima dată când executăm comanda, Django va configura toate tabelele implicite construite pentru lucruri precum sistemul de administrare. Doar tastați "da" și apoi completați detaliile.

Acum, să punem bazele urls.py fişier. Dezactivați prima linie din secțiunea de exemple și schimbați-o pentru a spune url (r '^ $', 'FirstBlog.blog.views.home', nume = "acasă") .

Acum, să creăm fișierul de vizualizare pentru a răspunde acestor solicitări.

de la django.shortcuts import render_to_response de la blog.models posturi de import def home (cerere): return render_to_response ('index.html')

Template-uri

Acest index.html fișierul nu există încă, deci hai să reușim. Creați un dosar numit șabloane în blogul app și salvați un fișier numit în el index.html, care poate conține pur și simplu "Hello World" pentru moment. Apoi, trebuie să editați fișierul de setări, astfel încât Django să știe unde se află acest șablon.

Linia 105 este locul în care pornește secțiunea pentru declararea dosarelor de șabloane; astfel încât să-l ajustați, după cum urmează:

TEMPLATE_DIRS = ("blog / template-uri", # # Puneți șiruri de caractere aici, cum ar fi "/ home / html / django_templates" sau "C: / www / django / templates". să folosim căi absolute, nu căi relative.)

Dacă rulați din nou serverul și actualizați pagina în browser, ar trebui să vedeți mesajul "Hello World". Acum putem începe să ne prezentăm blogul. Vom adăuga câteva cod HTML pentru pagina de pornire.

      Primul blog   

Primul blog

Titlu

Postat pe data de autor

Corpul textului

Dacă salvați și actualizați pagina, trebuie să vedeți că pagina a fost actualizată cu acest conținut nou. Următorul pas este adăugarea conținutului dinamic din baza de date. Pentru a realiza acest lucru, Django are un limbaj templificator care vă permite să încorporați variabilele cu bretele curbate. Modificați secțiunea din mijloc a paginii dvs. pentru a arăta astfel:

Primul blog

titlu

Postat pe date de către author

corp

Putem apoi să trecem valori către acești locașii variabile de la views.py fișier prin crearea unui dicționar de valori.

de la django.shortcuts import render_to_response de la blog.models posturi de import def home (request): content = 'title': 'My First Post', 'author': 'Giles', 'date' corp ":" Lorem ipsum dolor stați amet, consectetur adipiscing elit. Etiam cursus tempus dui, ut vulputate nisl eleifend eget. Aenean justo felis, dapibus quis vulputate la, porta et dolor. Praesent enim libero, malesuada nec vestibulum vitae, fermentum nec ligula. Etiam eget convallis turpis. Donec non sem justo. ', Returnați render_to_response (' index.html ', conținut)

Salvați și reîmprospătați și ar trebui să vedeți că acum transmiteți conținut într-un șablon din fișierul de vizualizări. Ultimul pas este sa obtinem date din baza noastra de date si sa trecem in locul lor. Din fericire, putem face acest lucru fără interogări SQL, folosind modelele lui Django. Trebuie să adăugăm noi blogul app pentru noi FirstBlog proiect prin schimbarea altui setare. Mergi la INSTALLED_APPS pe linia 112 și adăugați

'FirstBlog.blog',

în listă.

Apoi schimbați views.py așa că adaugă date din baza de date.

de la django.shortcuts import render_to_response de la blog.models import posts def home (cerere): entries = posts.objects.all () [: 10] return render_to_response ('index.html', 'posts': entries)

Apoi, actualizați șablonul pentru a accesa aceste date.

Primul blog


% pentru post în postări%

post.title

Postat pe post.timestamp de post.author

post.bodytext


% endfor%

Aici putem accesa toate datele din tabelul nostru din views.py fișier, apoi selectați numai primele zece intrări. Transmitem aceste date în șablon, introducem prin intrări și afișăm datele cu codul HTML al site-ului nostru. Acest lucru nu va funcționa încă, deoarece nu există nimic în baza de date. Opriți serverul și executați:

python2.6 manage.py syncdb

Acest lucru va adăuga tabelul nou pentru postările noastre în baza de date. Apoi, deschideți o filă nouă și tastați:

mysql -u root -p

... introduceți parola, apăsați pe Enter și executați:

INSCRIEȚI în valorile blog_posts (autor, titlu, bodytext) ("Bob", "Hello World", "Lorem Ipsum");

Reveniți la fila anterioară și rulați din nou serverul. Reîmprospătați pagina și ar trebui să vedeți o postare pe blog cu conținutul inactiv pe care tocmai l-ați adăugat. Dacă rulați de mai multe ori comanda MySQL, ar trebui să vedeți mai multe postări apărute pe pagină atunci când actualizați.

Sistemul de administrare al lui Django

Ultimul lucru pe care trebuie să-l facem astăzi este revizuirea sistemului de administrare al lui Django. Aceasta este o caracteristică foarte puternică a lui Django, care vă permite să gestionați site-ul fără a mai scrie cod, așa cum ar trebui să faceți dacă creați un site de la zero. Pentru ao activa, trebuie să modificăm câteva setări. În primul rând, linii de necomentare 4, 5, 13 și 16 în interiorul urls.py, astfel încât să puteți accesa pagina de administrare. Apoi, mergeți la INSTALLED_APPS secțiune din settings.py și necompletați 'Django.contrib.admin', și 'django.contrib.admindocs',. Pentru a permite administratorului dvs. să vă controleze posturi tabel, creați un fișier nou numit admin.py în blogul și adăugați următoarele linii:

de la django.contrib import de admin de la blog.models posturi de import admin.site.register (posturi)

Alerga python2.6 manage.py syncdb din nou pentru a adăuga tabelele pentru secțiunea de administrare și reporniți serverul.

Dacă vizitați 127.0.0.1:8000/admin acum în browserul dvs., ar trebui să vedeți o pagină de conectare. Utilizați detaliile pe care le-ați ales mai devreme când ați executat prima dată syncdb comanda pentru a vă conecta. Ar trebui să vedeți o secțiune, numită Blog, cu o subtitrare pentru posturi masa. Puteți folosi acest lucru pentru a crea, edita și elimina mesajele pe blog cu o interfață simplă.

Asta e tot ce trebuie să faceți. Tocmai ați creat un blog pe deplin funcțional, deși simplu. Pentru a termina această lecție, vom examina instalarea Django pe un server web.


Instalarea pe un server Web

Există două tipuri de găzduire web și care dintre acestea le va afecta dacă puteți utiliza Django. Dacă ați partajat găzduirea, sunteți în întregime la mila gazdei voastre.

Multe gazde web ieftine nu acceptă Python. În timp ce PHP este aproape garantat, suportul pentru alte limbi adesea nu este. Va trebui să verificați panoul de control pentru a determina dacă Python (și Django) sunt disponibile. Evident, procesul este ușor diferit față de fiecare gazdă. Aproape toate găzduirile rulează pe Apache și îl putem folosi pentru a găzdui Django, folosind mod_wsgi sau mod_python Module Apache.

Majoritatea gazdelor web rulează scripturi în mai multe limbi folosind CGI. Django poate rula pe FastCGI și, teoretic, pe CGI, dar acest lucru nu este susținut oficial și ar fi mult prea lent pentru un site web actual de producție. Va trebui să verificați dacă acestea sunt instalate. Ele sunt de obicei găsite sub o rubrică, cum ar fi "CGI și Scripting Language Support".

Dacă aveți VPS hosting sau sunteți suficient de norocoși să aveți un server dedicat, viața dvs. este mult mai ușoară. De obicei, acestea vin cu Pyinton preinstalat, și de acolo trebuie doar să urmați aceiași pași prin care am trecut pentru a obține o copie locală a lui Django care rulează. Dacă nu aveți Python, îl puteți instala cu un manager de pachete. Sistemul dvs. poate chiar să vină cu Django.

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

După ce ați instalat Django pe serverul dvs., încărcați site-ul pe care tocmai l-ați făcut utilizând orice client de transfer de fișiere. Puteți pune fișierele oriunde, dar păstrați-le din public sau oricine va putea vedea codul sursă al site-ului dvs. eu folosesc /Acasă pentru toate proiectele mele.

Apoi, creați o bază de date MySQL, numită 'firstblog' pe serverul dvs. și executați syncdb din nou. Va trebui să creați din nou contul dvs. pentru panoul de control al administratorului, dar acesta este un lucru unic.

Dacă încercați să executați acest lucru, este posibil să primiți o eroare, și aceasta deoarece setările pentru server sunt diferite de cele de pe computerul dvs. local. Este posibil să trebuiască să schimbați parola bazei de date în interiorul settings.py, dar în funcție de configurația serverului dvs., este posibil să întâlniți și alte probleme. Google este prietenul tău în aceste situații!

Pentru a rula serverul de această dată, comanda este puțin diferită. Trebuie să specificați o adresă IP și un port, astfel încât să puteți accesa site-ul prin intermediul internetului.

python manage.py runserver 0.0.0.0:8000

Dacă vizitați site-ul dvs. într-un browser web, pe portul 8000, ar trebui să vedeți site-ul dvs.!


Concluzie

Asta e pentru această lecție ... și seria noastră. Sper că ați învățat o serie de aptitudini utile în ultimele cinci lecții și că sunteți pregătit să continuați și să învățați și mai mult Python în viitor. Dacă vă place aspectul lui Django și doriți să continuați să vă îmbunătățiți cunoștințele despre cadru, iată câteva tutoriale suplimentare pe această temă.

  • Scufundări în Django
  • Efectuarea unei liste de sarcini
  • 10 sfaturi utile Django

Ca întotdeauna, sunt bucuros să discut orice întrebări despre acest tutorial sau despre Python în general în cadrul comentariilor. Vă mulțumim pentru lectură.

Aflați Python

Aflați Python cu ghidul nostru complet de instrucțiuni Python, indiferent dacă sunteți doar începători sau sunteți un coder experimentat în căutarea unor noi abilități.

Cod