Django (tīmekļa ietvars)

***Django*** ir atvērtā pirmkoda tīmekļa lietotņu ietvars, kas sarakstīts *[[Python]]* programmēšanas valodā. Sākotnēji *Django* izstrādāja, lai pārvaldītu vairākus ziņu portālus, bet 2005. gada jūlijā atvēra tā pirmkodu ar BSD licences nosacījumiem. *Django* nosaukts džeza ģitārista Džango Reinharda vārdā.

*Django* ietvara galvenais mērķis ir atvieglot sarežģītu tīmekļa resursu radīšanu, kuru pamatā ir relāciju datu bāzu vadības sistēma. Galvenais uzsvars tiek likts uz komponenšu modularitāti un vēlreizēju izmantošanu, ātru izstrādi, kā arī DRY (*Don't Repeat Yourself* — 'neatkārtojies') principa ievērošanu. *Django* ir pilnībā uzrakstīts *[[Python]]* programmēšanas valodā — ieskaitot datu modeļus un konfigurācijas failus. *Django* ietver administrācijas saskarni, kas ļauj veidot, skatīt, labot un dzēst datubāzes ierakstus. Administrācijas saskarne tiek ģenerēta dinamiski, lietojot introspekciju, un to ir iespējams pielāgot.

*Django* ietvars izmantots tādās labi pazīstamās tīmekļa vietnēs kā *[[Instagram]]*, *[[Mozilla]]*, *Disqus*, *Bitbucket*, *Nextdoor* un *Clubhouse*.

## Komponentes
Lai gan *Django* lieto savu terminoloģiju (piemēram, HTTP atbildes ģenerējošas funkcijas ir "skati"), tas kopumā atbilst MVC arhitektūrai. Tā sastāvā ietilpst:

* objektu-relāciju kārtotājs (*ORM, object-relational mapper*), kas nodrošina saikni starp datu modeļiem (definētiem *Python* klašu formā) un relāciju DBVS ("Modelis"),
* sistēma HTTP pieprasījumu apstrādei un HTTP atbilžu ģenerēšanai izmantojot šablonus ("Skats"),
* uz regulārām izteiksēm bāzēts HTTP pieprasījumu maršrutētājs ("Kontrolieris").

*Django* standarta komplektācija ietver arī:

* Vienkāršu, patstāvīgu tīmekļa serveri izstrādei un testēšanai.
* Ievades formu izveides un pārbaudes sistēmu, kas no HTML formas saņemto informāciju sagatavo saglabāšanai datubāzē.
* Šablonu sistēmu, kas izmanto pārmantojamības paradigmu, līdzīgi kā objektorientētā programmēšanā.
* Kešošanas ietvaru, kas ļauj lietot vairākas kešošanas metodes.
* Starpprogrammatūras klašu atbalstu, kas ļauj dažādās HTTP pieprasījuma apstrādes fāzēs piemērot pielāgotas funkcijas.
* Iekšēju signalizēšanas sistēmu, kas ļauj lietotnes komponentēm savā starpā sūtīt un saņemt iepriekš definētu veidu signālus.
* Lokalizācijas sistēmu, ieskaitot Django iebūvēto komponenšu lokalizāciju.
* Serializācijas sistēmu, kas ļauj serializēt un deserializēt *Django* modeļu instances XML un JSON formātos.
* Integrāciju ar *Python* iebūvēto vienībtestēšanas funkcionalitāti.

## Iekļautā programmatūra
*Django* komplektācija ietver dažādas papildus lietotnes *contrib* pakotnē, tai skaitā:

* Paplašināmu autentifikācijas sistēmu.
* Automātiski veidotu administrācijas paneli.
* Rīkus RSS un *[[Atom]]* barotņu izveidei.
* *Sites* ietvaru, ar kura palīdzību viena *Django* instalācija var darbināt vairākas tīmekļa vietnes, katru ar atšķirīgu saturu un lietotnēm.
* Rīkus *[[Google Sitemaps|Sitemaps]]* ģenerēšanai.
* Rīkus XSS, CSRF, SQL injekciju, paroļu uzlaušanas un citu tipisku draudu novēršanai. Lielākā daļa šo rīku ir aktīvi pēc noklusējuma.
* Rīkus ģeogrāfisko informācijas sistēmu izstrādei.

## Paplašināmība
*Django* projektus iespējams paplašināt, instalējot un pievienojot dažādu autoru uzturētas papildu komponentes. Ir pieejamas vairāk kā 5000 komponentes, kas *Django* standarta funkcionalitāti papildina ar risinājumiem lietotāju reģistrācijai, satura meklēšanai, API saskarnes nodrošināšanai, satura vadībai u.c.

## Tīmekļa serveru un DBVS atbalsts
*Django* lietotnes var darbināt tīmekļa serveros, kas atbalsta ASGI vai WSGI protokolus. *Django* oficiāli atbalsta piecas DBVS: *[[PostgreSQL]]*, *[[MariaDB]]*, *[[MySQL]]*, *[[SQLite]]* un *[[Oracle datu bāze|Oracle]]*. Izmantojot *mssql-django* pakotni, iespējams lietot arī *[[Microsoft SQL Server]]*.

## Versiju vēsture

## Atsauces

## Ārējās saites

* 

* DjangoSnippets — moduļi
* Google vēstkopa — Django lietotāji
* Google vēstkopa — Django attīstītāji
* Django meklētājs — meklē informāciju ar django tematiku saistītos resursos
* Django špikeris 
* DjangoSites