Vodič za Django: započnite s radom s Django 2.0

Django je jednostavan Python web okvir koji je nadahnut Ruby on Railsom i koristi mnoge iste metafore kako bi razvoj web stranica bio brz i jednostavan. Potpuno učitan i fleksibilan, Django je postao jedan od Pythonovih najčešće korištenih web okvira.

Django uključuje gotovo sve što vam je potrebno za izradu web aplikacije bilo koje veličine, a njegova popularnost olakšava pronalaženje primjera i pomoć za različite scenarije. Plus Django nudi alate koji omogućavaju vašoj aplikaciji da se razvija i elegantno dodaje značajke te migrira svoju shemu podataka (ako je ima).

Django također ima reputaciju složenog, s mnogim komponentama i dosta konfiguracije "ispod haube". Zapravo, možete uspostaviti i pokrenuti jednostavnu aplikaciju u relativno kratkom redoslijedu, a zatim prema potrebi proširiti njezinu funkcionalnost.

U ovom ćemo vodiču proći kroz stvaranje osnovne aplikacije Django 2.0 i ukratko se dotaknuti najvažnijih značajki koje pruža web programerima.

Nadogradnja s Django 1.x

Ako imate iskustva s ranijim, 1.x izdanjem Djanga, ovo su najvažnije prijelomne promjene kojih biste trebali biti svjesni:

  • Django 2.0 podržava samo Python 3.4 i novije verzije. Python 2.x neće biti podržan u budućim verzijama Djanga.
  • Django 2 slijedi Python 3 obrazac korištenja izvornih Unicode nizova gdje god je to moguće. Neke Django funkcije više neće prihvaćati bytestings kao ulaz. 

Postoje mnoge druge unatrag nespojive promjene, ali to su dvije najznačajnije, posebno pri pokretanju novih projekata.

Instaliranje Djangovih osnovnih knjižnica

Da biste instalirali Django 2.0, trebat će vam Python 3.4 ili noviji. Tada je Django najlakši način instaliranja putem Pythonovog pipuslužnog programa:

pip install django

Ovim se instaliraju temeljne Django knjižnice i django-adminuslužni program naredbenog retka koji se koristi za upravljanje Django projektima.

Ako želite surađivati ​​s više verzija Djanga, stvorite virtualno okruženje, tamo instalirajte željenu verziju Djanga i upotrijebite je za predmetni Django projekt.

Imajte na umu da za stvaranje više projekata s jednom instancom Djanga ne morate koristiti virtualna okruženja . Oni su vam potrebni samo za korištenje različitih točkastih revizija Django okvira  s različitim projektima.

Izrada novog Django projekta

Django instance organizirane su u dva sloja: projekti i aplikacije .

  • Projekt je instanca Django sa svojim vlastitim konfiguracije baze podataka, postavke i aplikacije. Najbolje je zamisliti projekt kao mjesto za pohranu svih konfiguracija na razini web mjesta koje ćete koristiti.
  • App je podjela projekta, s vlastitim rute i renderiranje logike. U jedan Django projekt može se smjestiti više aplikacija. 

Da biste stvorili novi Django projekt od nule, unesite direktorij u koji želite pohraniti projekt i upišite:

django-admin startproject

gdje je naziv i projekta i poddirektoriju u kojem će se projekt pohraniti. Obavezno odaberite ime za koje nije vjerojatno da će se sudarati s imenom koje interno koriste Python ili Django. Ime poput dobro myprojće poslužiti.

Rezultirajući direktorij trebao bi sadržavati  manage.pydatoteku koja se koristi za upravljanje ponašanjem aplikacije iz naredbenog retka i drugi poddirektorij (također s nazivom projekta) koji sadrži sljedeće datoteke:

  • __init__.pyDatoteka, koji se koristi od strane Python za označavanje poddirektorij kao kod modula.
  • settings.py, koji sadrži postavke korištene za projekt. Mnoge najčešće postavke bit će unaprijed popunjene za vas.
  • urls.py, koji navodi rute ili URL-ove dostupne vašem Django projektu ili za koje će projekt vratiti odgovore.
  • wsgi.py, koji se koriste za posluživanje aplikacija vašeg projekta putem web poslužitelja kompatibilnih s WSGI, poput Apache HTTP ili Nginx.

Prije bilo čega drugog, testirajte projekt kako biste bili sigurni da funkcionira. Iz naredbenog retka u direktoriju koji sadrži manage.pydatoteku vašeg projekta pokrenite:

python manage.py runserver

Ovo bi trebalo pokrenuti razvojni web poslužitelj dostupan na //127.0.0.1:8000/. Posjetite tu vezu i trebali biste vidjeti jednostavnu stranicu dobrodošlice koja vam govori da je instalacija bila uspješna.

Imajte na umu da se web poslužitelj za razvoj ne smije koristiti za služenje Django projekta javnosti. Neće se prilagoditi potrebnom prometu.

Izrada Django aplikacije

Dalje moramo stvoriti aplikaciju unutar ovog projekta. Idite u isti direktorij kao manage.pyi izdajte ovu naredbu:

python manage.py startapp myapp

Ovo stvara poddirektorij za aplikaciju s imenom myapp koja sadrži sljedeće:

  • migrationsImenik. Sadrži kôd koji se koristi za migraciju web-mjesta između verzija njegove sheme podataka.
  • admin.py. Sadrži objekte koje koriste ugrađeni Djangovi alati za administraciju. Ako vaša aplikacija ima administratorsko sučelje ili privilegirane korisnike, ovdje biste konfigurirali povezane objekte.
  • apps.py. Pruža informacije o konfiguraciji o aplikaciji projektu općenito putem AppConfigobjekta.
  • models.py. Sadrži objekte koji definiraju podatkovne strukture koje vaša aplikacija koristi za povezivanje s bazama podataka.
  • tests.py. Sadrži sve testove koji se koriste kako bi se osiguralo da funkcije i moduli web mjesta rade kako je predviđeno.
  • views.py. Sadrži funkcije koje generiraju i vraćaju odgovore.

Da bismo započeli rad s aplikacijom, prvo je moramo registrirati u projektu. Da biste to učinili, uredite myproj/settings.pyi dodajte redak na vrh INSTALLED_APPSpopisa:

INSTALLED_APPS = [ ‘myapp.apps.MyappConfig’, ‘django.contrib.admin’, ... 

Ako pogledate myapp.apps, vidjet ćete unaprijed generirani objekt s imenom MyappConfig, na što se ovdje pozivamo.

Dodavanje ruta i pogleda u vašu aplikaciju Django

Django aplikacije slijede osnovni obrazac za obradu zahtjeva:

  • Kada primi dolazni zahtjev, Django raščlanjuje URL za rutu na koju ga primjenjuje.
  • Rute su definirane u urls.py, pri čemu je svaka ruta povezana s prikazom , tj. Funkcijom koja vraća podatke koji se vraćaju klijentu. Pogledi se mogu nalaziti bilo gdje u Django projektu, ali najbolje ih je organizirati u vlastite module.
  • Views can contain the results of a template, i.e. code that formats requested data according to a certain design.

To get an idea of how all these pieces fit together, let’s modify the default route of our sample app to return a custom message.

Routes are defined in urls.py in a list named urlpatterns. If you open the sample urls.py, you’ll see urlpatterns already predefined:

urlpatterns = [ path(‘admin/’, admin.site.urls), ] 

The path function—a Django built-in—takes a route and a view function as arguments and generates a reference to a URL path. By default, Django creates an admin path that is used for site administration, but we need to create our own routes.

Add another entry, so that the whole file looks like:

from django.contrib import admin from django.urls import include, path urlpatterns = [ path(‘admin/’, admin.site.urls), path(‘myapp/’, include(‘myapp.urls’)) ] 

The include function tells Django to look for more route pattern information in the file myapp.urls. All of the routes found in that file will be attached to the top-level route myapp (e.g., //127.0.0.1:8080/myapp).

Next, create a new urls.py in myapp and add the following:

from django.urls import path from . import views urlpatterns = [ path(‘’, views.index) ] 

Django prepends a slash to the beginning of each URL, so to specify the root of the site (/), we just supply a blank string as the URL.

Now edit the file myapp/views.py so it looks like this:

from django.http import HttpResponse def index(request): return HttpResponse(“Hello, world!”) 

django.http.HttpResponse is a Django built-in that generates an HTTP response from a supplied string. Note that request, which contains the information for an incoming HTTP request, must be passed as the first parameter to a view function.

Stop and restart the development server, and navigate to //127.0.0.1:8000/myapp/. You should see Hello, world! appear in the browser.

Adding routes with variables in Django

Django can accept routes that incorporate variables as part of their syntax. Let’s say you wanted to accept URLs that had the format year/. You could accomplish that by adding the following entry to urlpatterns:

path(‘year/’, views.year) 

The view function views.year would then be invoked through routes like year/1996, year/2010, and so on, with the variable year passed as a parameter to views.year.

To try this out for yourself, add the above urlpatterns entry to myapp/urls.py, then add this function to myapp/views.py:

def year(request, year): return HttpResponse(‘Year: {}’.format(year)) 

If you navigate to /myapp/year/2010 on your site, you should see Year: 2010 displayed in response. Note that routes like /myapp/year/rutabaga will yield an error, because the int: constraint on the variable year allows only an integer in that position. Many other formatting options are available for routes.

Earlier versions of Django had a more complex and difficult-to-parse syntax for routes. If you still need to add routes using the old syntax—for instance, for backward compatibility with an old Django project—you can do so by using the django.urls.re_path function.

Django templates

Django’s built-in template language can be used to generate web pages from data.

Templates used by Django apps are stored in a directory that is central to the project: /templates//. For our myapp project, the directory would be myapp/templates/myapp/. This directory structure may seem a little awkward, but Django can look for templates in multiple places, so this avoids name collisions between templates with the same names across multiple apps.

In your myapp/templates/myapp/ directory, create a file named year.html with the following content:

Year: {{year}} 

Any value within double curly braces in a template is treated as a variable. Everything else is treated literally.

Modify myapp/views.py to look like this:

from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse(“Hello, world!”) def year(request, year): data = {’year’:year} return render(request, ‘myapp/year.html’, data) 

The render function, a Django “shortcut” (a combination of multiple built-ins for convenience), takes the existing request object, looks for the template myapp/year.html in the list of available template locations, and passes the dictionary data to it as context for the template.

The amount of processing you can perform on data within Django templates is intentionally quite limited. Django’s philosophy is to enforce separation of presentation and business logic whenever possible. Thus you can loop through an iterable object, and you can perform if/then/else tests, but modifying the data within a template is frowned upon.

For instance, a simple “if” test can be encoded this way:

{% if year > 2000 %} 21st century year: {{year}} {% else %} Pre-21st century year: {{year}} {% endif %} 

The {% and %} markers delimit blocks of code that can be executed in Django’s template language.

If you want to use a more sophisticated template processing language, you can swap in others, such as Jinja2 or Mako. Django includes back-end integration for Jinja2, but any template language that returns a string can be used—for instance, by returning that string in a HttpResponse object as in the case of our ”Hello, world!” route.

Next steps with Django

What we’ve seen here covers only the most basic elements of a Django application. Django includes a great many other components that can be employed in a web project. All of these are worth discussing in detail separately, but I will leave you with a brief overview:

  • Databases and data models. Django’s built-in ORM can be used to define data structures and relationships between them for your app, as well as migration paths between versions of those structures.

  • Obrasci . Django pruža dosljedan način za prikaze za isporuku ulaznih obrazaca korisniku, dohvaćanje podataka, normalizaciju rezultata i pružanje dosljednog izvještavanja o pogreškama.

  • Sigurnost i komunalne usluge . Django uključuje mnoge ugrađene funkcije za predmemoriranje, bilježenje, rukovanje sesijama, rukovanje statičkim datotekama i normaliziranje URL-ova. Također uključuje pakete alata za uobičajene sigurnosne potrebe, poput upotrebe kriptografskih certifikata ili zaštite od krivotvorenja na više mjesta ili klikanja.