10 erori de bază făcute django-developers

10 erori de bază făcute django-developers

Django - gratuit rețea open source Python-cadru pentru a ajuta la rezolvarea problemelor comune în dezvoltarea. Acesta vă permite să creați aplicații flexibile, bine structurate. În Django este deja scos din cutie are o multime de caracteristici moderne. De exemplu, pentru a avea astfel de caracteristici ca administrator, obiect instrument de cartografiere relational (ORM), Routing și Templating, Django face ca primul candidat în selectarea instrumentelor de dezvoltare. Crearea unei aplicații necesită o mulțime de energie, și se bucură de munca lor, precum și orice dezvoltator Vreau să-și petreacă cât mai puțin timp pe sarcini de rutină. Django mult acest lucru ajută, nu forțând aplicația să sacrifice flexibilitatea.

Criminalul-caracteristica Django - puternic interfata configurabile admin care în mod automat (automagic?) Generate pe schema de model si admin modelul. Simțiți-vă expertul de-a dreptul. Utilizatorul poate configura interfața de administrare mai multe lucruri, printre ele - (lista de control acces, ACL) ACL de management, rezoluția și acțiunea la rândul-nivel (nivel de rând), filtre, sortare comenzi (ordine), widget-uri, formulare, suplimentare URL-ajutoare și mai mult. Eu cred că este nevoie de panoul de administrare pentru fiecare aplicație. Aceasta este doar o chestiune de timp înainte de un astfel de panou va avea nevoie de aplicația principală. În Django este creată rapid și ușor.

Django are, de asemenea, un ORM puternic, din cutie funcționează cu toate bazele de date importante. Ea este „leneș“: spre deosebire de alte ORM, se referă la baza de date numai atunci când este necesar. Acesta are suport pentru SQL importante-instrucțiuni (și funcții) pe care le puteți utiliza de la Python codul său original, împreună cu toate celelalte caracteristici ale limbii.
În Django, un templating foarte puternic și flexibil (templating motorului). Accesul la mai multe filtre standard și etichete (tag-uri), puteți crea propria. Django sprijină alte motoare, cum ar fi propriile șabloane, oferă un API pentru integrare ușoară cu alte motoare utilizând comenzi rapide-funcții standard pentru șabloanele de procesare.

Cadrul are multe alte caracteristici importante, cum ar fi URL-un router care analizează cererile de intrare și generează un nou scheme de rutare bazate pe URL. În general Django plăcut să lucreze și atunci când aveți nevoie de ajutor, trebuie doar să citiți documentația.

Numărul erorii 1. Utilizarea pentru proiectul dependențelor Python globale de mediu

Nu folosiți mediul global Python pentru dependențe ale proiectului, deoarece aceasta poate duce la conflicte de dependență. Python nu știe cum să lucreze cu mai multe versiuni ale unui pachet, în același timp. Acest lucru devine o problemă în cazul în care diferitele proiecte au nevoie de versiuni diferite, incompatibile ale aceluiași pachet.

De obicei, această eroare a permite noilor veniți Python- și Django-dezvoltare, nu știe despre Python caracteristicile de izolare a mediului.

Există mai multe modalități de a izola mediul înconjurător, cele mai frecvente sunt:

  • virtualenv. Pachetul Python care generează un dosar cu mediul. Conține script-ul (de) activează mediul și gestionarea pachetelor instalate în ea. Aceasta este preferata mea și cea mai simplă metodă. Am crea, de obicei, un mediu mai aproape de directorul de proiect.
  • virtualenvwrapper. Pachetul Python la nivel mondial stabilește un set de instrumente pentru a crea / șterge / activare și mediile virtuale așa mai departe. D. și asigură accesul la acest set. Toate mediile sunt stocate în același director (poate fi rescrisă folosind o WORKON_HOME variabilă). Nu văd nici un beneficiu pentru utilizarea virtualenvwrapper în loc virtualenv.
  • Mașini virtuale. Nici o izolare mai bună decât o întreagă mașină virtuală este alocată pentru aplicația dumneavoastră. Există o mulțime de instrumente disponibile, cum ar fi VirtualBox (gratuit), VMware. Paralele și Proxmox (favorita mea, există o versiune gratuită). În combinație cu virtuală instrument de automatizare mașină ca Hoinar poate fi o soluție foarte puternic.
  • Containere. În ultimii ani, am aproape fiecare proiect utilizează Docker. în special în proiecte noi, începe de la zero. Docker - instrument incredibil cu multe posibilități. Pentru automatizarea sa este disponibilă o grămadă de instrumente terță parte. Docker are un nivel de cache (stratul de cache), permițând ultra rapid re-crea containere. În ele am folosi un mediu Python la nivel mondial, pentru că fiecare container are propriul sistem de fișiere și proiecte izolate, la un nivel ridicat. Docker permite noilor membri ai echipei vor începe să lucreze la un proiect, mai ales dacă au experiență cu această tehnologie.

Numărul erorii 2. Lipsa de legare a dependențelor de fișier requirements.txt

Fiecare proiect Python noi ar trebui să înceapă cu fișier requirements.txt și un nou mediu de sine stătătoare. De obicei, prin intermediul pip / instalarea easy_install toate pachetele, fără a uita requirements.txt. De obicei, mai ușor (probabil. Corect) pentru a implementa proiecte de servere sau mașini de membri ai echipei.

De asemenea, este important să se requirements.txt fișier pentru a fixa (PIN), versiuni specifice ale dependențelor tale. De obicei, versiuni diferite ale pachetelor oferă diferite module, funcții și parametrii funcției. Chiar și în versiunile anterioare schimbări de dependențe pot fi de așa natură încât se va rupe pachetul. Aceasta este o problemă foarte gravă, dacă aveți un proiect live și intenționați să-l implementați în mod regulat, pentru că fără un sistem de control al versiunii este sistemul dvs. construi va instala întotdeauna cea mai recentă versiune disponibilă a pachetului.

Producția a efectua întotdeauna de pachete de legare! Eu folosesc acest lucru pentru un instrument foarte bun pip-unelte. Acesta oferă un set de comenzi pentru a ajuta la gestionarea dependențe. Instrumentul genereaza automat requirements.txt. care sunt legate nu doar dependenta, dar, în general, întregul copac, t. e., și în funcție de relațiile tale.

Pentru a fi chiar mai atent, atunci puteți face o copie de rezervă a fișierelor originale ale dependentele. Păstrați o copie în sistemul de fișiere, Git-dosar, S3-dosar, FTP, SFTP - oriunde, doar la îndemână. Există situații în care o excepție din lista de pachet relativ mic străpunge un număr mare de pachete în MNP. Pip vă permite să descărcați toate dependențele necesare sub formă de fișiere sursă. Cititi mai multe despre acest lucru prin rularea comenzii pip ajuta sa descarcati.

Numărul erorii 3. Utilizarea funcțiilor-Python modă în loc de clase (reprezentări de clasă bazate pe vizualizări)

Uneori este recomandabil să se folosească în dosarul de cerere views.py mici Python-funcție, în special pentru testare și vederi utilitare. Dar, de obicei, aplicațiile trebuie să folosească o prezentare bazată pe clasa (CBV).

CBV - această prezentare de uz general, cu clase abstracte care implementează sarcini comune de dezvoltare web. CBV creat de către profesioniști și să acopere cele mai căutate după modele de comportament. Ei au un API bine structurat, și CBV vă va oferi posibilitatea de a se bucura de toate avantajele OOP. Codul dvs. este mai curat și mai ușor de citit. Uita de dificultățile folosind reprezentarea standard a funcțiilor (vezi funcții) Django pentru a crea liste, CRUD-Operations, face prelucrarea, și așa mai departe. D. puteți extinde pur și simplu corespunzătoare CBV pentru prezentarea și redefinirea (suprascrie) funcție sau clasă de proprietăți, configurarea comportamentului de prezentare (de obicei funcţia returnează o proprietate, și puteți adăuga la ea orice logica, care poate transforma codul în spaghete dacă în loc de CBV te va întoarce la funcțiile de reprezentare).

Am creat pachetul Django Nume șablon. care standardizează nume pentru șabloanele de observațiile dvs. pe baza numelui aplicației și numele clasei de vedere. Eu folosim în fiecare zi și am salva o mulțime de timp atunci când aleg nume. Doar introduceți în dvs. hagfish CBV - clasa de Detaliu (TemplateNames, DetailView): - și începe să lucreze! Desigur, puteți trece peste funcția mea și adăugați un template-uri adaptive mobile, alte template-uri pentru utilizator-agent'ov sau orice altceva.

4. Numărul de eroare de scriere „gros» (grăsime) și reprezentări ale „subțire» modele (skinny)

Dacă ați mutat de la logica de aplicare în modelul de vedere, acest lucru înseamnă că, în observațiile este codul aparținând modelului. Adică prezentarea devine „gros“, iar modelul - „subțire“.

O nevoie de a scrie un model de „gros“ și prezentarea „subțire“.

Break logica metodelor mici în model. Acest lucru va permite utilizarea lor ori și din surse multiple (interfața cu utilizatorul admin, interfața cu utilizatorul, front-end final API punct, mai multe reprezentări). Este nevoie de doar câteva linii de cod, și nu trebuie să copy-paste o grămadă de linii. Data viitoare când vă scrie funcționalitatea pentru a trimite e-mail unui utilizator, extinde modelul cu ajutorul e-mail-funcție și să nu scrie logica în controler.

Numărul de eroare 5. imens, greoi fișier de configurare

Chiar și în noul fișier de configurare Django-proiect conține multe dintre aceste setări. Și în proiecte reale fișier crește la 700 + linii care sunt dificil de întreținut, mai ales atunci când mediul de dezvoltare, Productions și steydzhinga au nevoie de diferite configurații.

Aici este un exemplu de configurație minimă:

Eroare № 6. Anexa all-in-o singură structură și aplicarea deficitară alocarea incorectă a resurselor

Orice Django-proiect este format din mai multe aplicații. În terminologia unei aplicații Django - un Python-proiect care conține cel puțin __init__.py și fișierele models.py. Cele mai recente versiuni ale Django models.py nu mai este nevoie, doar tu __init__.py.

Django-app pot conține Python-module specifice modulelor Django (vizualizări, URL-uri, model, panoul de administrare, forme, modele, etichete, și așa mai departe. D.), fișiere statice, șabloane, migrarea bazei de date, echipa de management, teste unitare și așa mai departe. trebuie să te desparți aplicarea lor în monolitic reutilizabile mai mici cu logica simplă a cererii.

Se recomandă pentru a apela proiectul dosarul de proiect și a pus cererea în proiecte / aplicații /. Apoi pune toate dependențele de aplicații în propriile lor subfoldere.

  • fișiere statice: proiect / apps / APPNAME / static / APPNAME /
  • șablon Tag-uri: proiecte / aplicații / APPNAME / templatetags / appname.py
  • Fișiere șablon: proiect / aplicații / APPNAME / template-uri / APPNAME /

Întotdeauna adăugați numele aplicației ca prefix în numele subfoldere, deoarece toate dosarele statice sunt combinate într-o singură. În cazul în care două sau mai multe aplicații au js / fișier core.js. ultima cerere în settings.INSTALLED_APPLICATIONS suprascrie toate cele anterioare. Într-o zi am fugit în această problemă în proiectul dumneavoastră și a petrecut aproximativ șase ore, până când depanare a dat seama că un alt dezvoltator a redefinit meu static / admin / js / core.js. deoarece membrii echipei au implementat SPA-panoul de un administrator personalizat și da fișierele aceleași nume.

Aici este un exemplu de structură pentru aplicația portal care conține multe resurse și Python-module.

Desigur, proiectul real va fi dificil, dar această structură face mai ușoară și mai transparente multe aspecte.

Eroare № 7. STATICFILES_DIRS STATIC_ROOT și confunde cele noi pentru Django-dezvoltare

În modul de proiectare - Python manage.py runserver - Django caută fișierele statice utilizând setările STATICFILES_FINDERS. În mod implicit, încearcă să găsească fișierul solicitat în dosarul enumerate în STATICFILES_DIRS. În cazul în care nu a fost găsit, acesta caută folosind django.contrib.staticfiles.finders.AppDirectoriesFinder. care verifică fiecare dosar static specificat în proiectul de aplicare. Acest sistem vă permite să scrie, prevăzut cu propriile sale fișiere statice aplicații reutilizabile.

În producția vi se însămânțarea date statice printr-un server web separat, cum ar fi Nginx. El nu știe nimic despre structura aplicației Django proiect sau dacă fișierele statice sunt distribuite pentru unele dosare. Din fericire, Django ne ofera o echipa gestiona colectarea de date statice (colecta comanda de management statică) - Python manage.py collectstatic. care se extinde STATICFILES_FINDERS și copii toate fișierele statice din aplicațiile statice dosar, precum și din dosarele enumerate în STATICFILES_DIRS. într-un dat în directorul STATIC_ROOT. Acest lucru vă permite să activați (rezoluție) resurse sub formă de date statice folosind aceeași logică ca și cea a serverului Django în modul de dezvoltare, și se adună într-un singur loc pentru toate fișierele dvs. statice la serverul de web.

Nu uitați să collectstatic în dvs. de producție-mediu!

Numărul de eroare 8. Utilizare în mod implicit STATICFILES_STORAGE de producție și porniți Django-Template

Acest lucru poate fi folosit ca ManifestStaticFilesStorage STATICFILES_STORAGE (atentie hashingul inclus numai în REMEDIERE = mod fals) si executa collectstatic. Acest lucru va duce la o scădere a numărului de resurse de producție solicită-site-ul dvs. și de a face mult mai rapid de redare.

caracteristică cool Django - memorată în cache încărcător șablon. El nu repornește și analizează fișierul șablon de fiecare dată când este tras. Parsarea șablon - o operațiune foarte costisitoare, este nevoie de o mulțime de resurse de calcul. În mod implicit, Django-Șabloanele sunt analizate la fiecare cerere, și este rău, mai ales într-o producție, în cazul în care într-un timp scurt, poate fi procesat mii de solicitări.

În cached.Loader de configurare poate găsi un bun exemplu, precum și detaliile problemei. Nu utilizați încărcătorul în modul de dezvoltare, deoarece nu repornească otparsennye template-uri din sistemul de fișiere. Va trebui să reporniți proiectul folosind Python manage.py startapp. pentru fiecare model de schimbare. In dezvoltarea acest lucru poate fi enervant, dar este ideal pentru producție-mediu.

Numărul erorii 9. Clean Python pentru utilități sau scripturi

În Django există o mare facilitate - echipa de management. Folosiți-le în loc să reinventeze roata în formă de scriere scripturi Python pur pentru instrumentele dvs. de proiect.

De asemenea, să acorde o atenție la pachet Django extensii. care este o colecție de extensii personalizate pentru Django. Poate că cineva a implementat deja echipa ta! Există mai multe comenzi țintă comune.

Număr eroare 10. Velosipedostroenie

Pentru Django și Python au mii de soluții gata făcute. Vă rugăm să consultați motoarele de căutare înainte de a scrie ceva care nu este unic. Probabil au deja o soluție adecvată.

Nu este nevoie să complice lucrurile. În primul rând - Google! Instalați găsit pachetul de calitate, configurați, să extindă și să se integreze în proiectul dumneavoastră. Și dacă poți, aduce o contribuție pentru a deschide sursa.

Aici trebuie să înceapă cu o listă a propriilor mele pachete pentru Django:

  • Django Macrocomenzi URL. folosind macro-uri simplifică scrierea (și citirea) URL-modele în Django-aplicații.
  • Django Nume șabloane. hagfish mici, face ușor de a standardiza numele dvs. CBV-șabloane.
  • Django Split, Setări. Acesta vă permite să distribuiți Django-setări în mai multe fișiere și directoare. Ușor pentru a trece peste și modifica setările. Acesta folosește un joker (wildcard) în căile de fișiere și marchează setările ca fișiere opționale.

Nu te (uscat) se repetă!

Sunt un susținător al DRY-concept, prin urmare, a creat Django scheletul - un instrument la îndemână, cu o serie de caracteristici frumos deja din cutie:

  • Docker-imagini pentru dezvoltare / producție, condus docher-scriere, făcându-l ușor să orchestreze o listă de containere.
  • Simplu Fabric-script pentru implementare în producție.
  • Configurarea pentru pachetul Django Split, Setări cu setările de bază și surse locale.
  • WebPACK integrate în proiect - comanda collectstatic Django va colecta doar dist dosar.
  • Configurați toate setările de bază și caracteristicile Django-cum ar fi stocate în memoria cache în producție Django-șabloane trunchiate fișiere statice, o bară de instrumente integrate pentru depanare, logare, și așa mai departe. D.

Este gata de utilizare Django-schelet pentru urmatorul tau proiect, creat de la zero. Să sperăm că va salva o mulțime de timp. WebPACK are o configurație minimă de bază, dar, de asemenea, stabilit folosind SASS preconfigurat pentru a procesa fișiere .scss.

articole similare