Onion Information
Python -- Django - GASERI
Primjeri web sjedišta u Djangu:
Onion Details
Page Clicks: 0
First Seen: 03/15/2024
Last Indexed: 10/23/2024
Onion Content
Preskoči na sadržaj Python: Django Primjeri web sjedišta u Djangu: Instagram (velikim dijelom) RiTeh (shoutout: Zavod za računarstvo ) Postavljanje razvojnog okruženja web aplikacija na operacijskim sustavima sličnim Unixu i Windowsima. Stvaranje projekta i organizacija koda. Korištenje dokumentacije Stvaranje prvog projekta Stvaranje direktorija gdje ćemo stvoriti naš projekt: $ mkdir moja_prva_stranica ( ... ) Zatim idemo u taj direktorij naredbom: $ cd moja_prva_stranica ( ... ) U njemu stvaramo Django projekt naredbom: $ django-admin startproject mysite ( ... ) Ostale raspoložive naredbe možemo vidjeti s komandom django-admin , a za detaljnije o pojedinim naredbama koristite django-admin help , npr. za naredbu startproject na način: $ django-admin help startproject ( ... ) Naredba startproject kreira novi direktorij naziva kojega smo proslijedili, u našem slučaju to je mysite . Prebacimo se u direktorij mysite pomoću naredbe cd mysite i ispišimo sadržaj direktorija u obiliku stabla s naredbom tree mysite , možete koristiti i naredbu ls mysite . $ tree mysite ├── manage.py └── mysite ├── asgi.py ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py Direktorij mysite je središnji direktorij naše stranice koju ćemo graditi. Ovo je "glavna" tj. središnja aplikacija. Njena uloga je usmjeravanje Djanga na druge aplikacije koje ćemo kreirati. Ono što ćemo tu razvijati je samo usmjeravanje na druge aplikacije koje razvijamo i podešavanje postavki. Projektni direktorij i njegov sadržaj Sadržaj koji se nalazi u novo kreiranom projektu: Izvan direktorija mysite/ : korijenski je direktorij koji ima ulogu mjesta gdje se nalaze sve datoteke i direktoriji projekta. Unutar direktorija mysite/ : nalazi se Python package projekta, a njegov sadržaj je prikazan iznad. Datoteka mysite/__init__.py : Govori interpreteru da sve unutar ovoga direktorija bude tretirano kao Python package. Datoteka mysite/settings.py : Postavke/konfiguracija za Django projekt. Obratiti pažnju na INSTALLED_APPS koji nam je trenutno najbitniji dio u ovoj datoteci koji će nam trebati. Svaki puta kada se dodaje nova aplikacija na našu web stranicu, moramo ju ovdje ručno dodavati. Danger Paziti na SECRET_KEY da nije vidljiv svima, npr. na GitHubu-u. Zlonamjerni pojedinac može to iskoristiti i upravljati vašom stranicom kao administrator. Datoteka mysite/urls.py : Sadrži deklarirane URLove vezane za Django projekt, služi Django aplikaciji kao "kazalo sadržaja". Njegova uloga je 'kontroliranje' naše stranice/aplikacije. Pomoću njega 'pokazujemo/usmjeravamo' program na naše aplikacije. Osvježite si znanje regularnih izraza Regularni izrazi na kolegiju Operacijski sustavi Regularni izrazi i Python Datoteke mysite/wsgi.py i mysite/asgi.py : ASGI je nasljednik WSGI, dugogodišnjeg Python standarda za kompatibilnost između web poslužitelja, frameworka i aplikacija. WSGI povećava mogućnosti u radu na webu pomoću Pythona, dok je cilj ASGI-a produžiti to za područje asinkronog Pythona. Datoteka manage.py : Koristimo pri radu u terminalu za prosljeđivanje raznih naredbi koje prosljeđujemo programu da se izvrše nad projektom, više o tome u nastavku. Kreiranje prve aplikacije Započnimo s kreiranjem prve aplikacije. Za početak dodat ćemo aplikacije na naš projekt mysite , to činimo naredbom: ./manage.py startapp main . Primijetit ćete da u direktoriju mysite je stvoren novi poddirektorij naziva main . Zadatak Provjerite sadržaj direktorija mysite/mysite i direktorija mysite/main s naredbama tree i ls . Lokalni poslužitelj za razvoj Pokrenimo sada naš lokalni poslužitelj ( eng.server ) na kojemu ćemo razvijati aplikaciju. Napomena za pokretanje lokalnog poslužitelja Za pokretanje poslužitelja koristite zasebni terminal. Poslužitelj aktivno radi za vrijeme razvoja i nije potrebno ponovno pokretati poslužitelj nakon svake promjene. U zasebnom terminalu za pokretanje poslužitelja koristi se naredba: $ ./manage.py runserver ( ... ) Zadatak Provjerite rad poslužitelja posjetom adrese http://127.0.0.1:8000/ u web pregledniku. Ovo je poslužitelj na kojem ćemo razvijati Django aplikacije. U terminalu možemo vidjeti HTTP zahtjeve na poslužitelj i statusni kod odgovora na njih. Zadatak Provjerite ispis u terminalu prilikom osvježavanja stranice pritiskom na tipki Ctrl + R ili F5 . Dodatak: Čitanje dokumentacije i StackOverflow Tko radi taj i griješi, a iz grešaka se najbolje uči. Djangovu službenu dokumentaciju možete pronaći ovdje . Stack Overflow je mjesto za pitanja i odgovore za profesionalne programere i entuzijaste. Sadrži pitanja i odgovore na širok raspon tema u računalnom programiranju. Više na Wikipediji . Primjeri pitanja postavljenih na Stack Overflowu vezanih za probleme u Pythonu i Djangu: Primjer 1 Primjer 2 Primjer 3 Korištenje baze podataka. Stvaranje modela i objektno-relacijsko preslikavanje Paradigma model-view-controller (MVC) Django koristi paradigmu model-view-controller (MVC) koju naziva model-template-view (MTV). Svaka stranica kreirana pomoću Django frameworka vjerojatno koristi ove tri stvari kako bi vam prikazala podatke. Iako ga nazivamo MVC (model-view-controller), način na koji radi ide u obrnutom slijedu. Korisnik će posjetiti URL, vaš kontroler ( /urls.py ) ukazat će na određeni prikaz ( /views.py ). Taj se prikaz tada može (ili ne mora) povezati s vašim modelima. Drugim riječima, prvo ide Controller, zatim View i na posljetku Model po potrebi. Unutar Djanga koristi se djelomično izmijenjena terminologija. Stoga od sad nadalje koristit ćemo Django terminologiju (model, template i view). U tablici u nastavku detaljnije su objašnjeni pojmovi i termini koji se koriste. Korišteni naziv Django naziv Značenje Model Sloj modela u Djangu odnosi se na bazu podataka plus Python kôd koji je izravno koristi. Modelira stvarnost. Pohranjuje sve potrebne vrijednosti unutar baze podataka koje su potrebne web aplikaciji. Django vam omogućuje pisanje Python klasa koje nazivamo modeli, koje se vezuju za tablice baze podataka. Stvoreni modeli nisu trajno zadani, nego se mogu izmjenjivati i dopunjavati. Izmjene su dostupne odmah nakon primjene migracija o kojima detaljnije kasnije na ovim vježbama u poglavlju ORM. View Template View sloj u Djangu odnosi se na korisničko sučelje (UI). Funkcija pregleda ili skraćeno prikaz ( eng. view ) je Python funkcija koja je zadužena za generiranje HTMLa i ostalih UI elemenata. Pomoću Python kôda renderiraju se pogledi. Django uzima web zahtjev i vraća web odgovor. Ovaj odgovor može biti bilo što, npr. HTML sadržaj web stranice, preusmjeravanje, statusni kod , XML dokument ili slika... Controller View Središnji dio sustava, sadržava logiku koja povezuje cjeline da bi se pružio odgovor korisniku na traženi zahtjev. Upravlja zahtjevima i odgovorima na njih. uspostavlja vezu s bazom podataka i učitavanjem datoteka. Uvod u Django: Hello world U nastavku ovog poglavlja prikazano je kako kreirati Django aplikaciju za teksta na početnoj stranici. Za ovo nije potreban Model nego samo View u kojemu je definiran tekst koji želimo prikazati na stranici. Zadatak Otvorite datoteku i provjerite što je zapisano u mysite/mysite/url.py . Za definiranje putanje na koju će Django primati HTTP zahtjeve iskoristit ćemo funkciju django.urls.path() ( dokumentacija ) i usmjerit ćemo na administratorsko sučelje ( dokumentacija ). Datoteka mysite/mysite/url.py ima sadržaj from django.contrib import admin from django.urls import path urlpatterns = [ path ( 'admin/' , admin . site . urls ), ] Vidimo da imamo samo jedan URL koji se tiče stranice za administraciju koji nam trenutno ne treba. Sljedeće što je potrebno učiniti je usmjeriti view na URL. Razlog tome je što Django web stranice vidi kao kolekciju aplikacija koje 'ispisuje' pomoću danih URLova koji 'pokazuju' Djangu gdje tražiti. Datoteka urls.py unutar naše glavne aplikacije obično samo usmjerava na aplikacije. Pa krenimo sa kreiranjem aplikacije, i to na način da ju kreiramo pomoću naredbe ./manage.py startapp main . Idemo sada usmjeriti naš glavni dio Django aplikacije da provjerava, odnosno poziva našu novostvorenu aplikaciju. To radimo unutar mysite/mysite/url.py : from django.contrib import admin from django.urls import path , include #importamo include urlpatterns = [ path ( '' , include ( 'main.urls' )), #dodajemo urls path ( 'admin/' , admin . site . urls ), ] Ako pogledamo u direktorij aplikacije main vidjet ćemo da datoteka urls.py ne postoji. Kreirajmo datoteku mysite/main/urls.py i dodajmo sljedeći sadržaj. from django.urls import path from . import views app_name = 'main' # here for namespacing of urls. urlpatterns = [ path ( '' , views . homepage , name = 'homepage' ), ] Prođimo ukratko kroz logiku rada našeg programa. Prvo se posjećuje mysite/url.py , u URL-u nije prosljeđeno ništa, stoga odgovara '' iz path('', include('main.urls')) . Program ovo tumači tako da uključuje main.urls . Program zatim pronalazi i učitava main.urls koji se nalazi na lokaciji mysite/main/urls.py i čita njegov sadržaj. Upravo smo izmjenili sadržaj tako da smo dodali uzorak '' koji odgovara path('', views.homepage, name='homepage') . Ovime smo usmjerili aplikaciju da pokrene funkciju homepage() unutar main/views.py koji još nismo izmjenili stoga ćemo to sada učiniti rako da dodamo funkciju naziva homepage() . Datoteka mysite/main/views.py ima sadržaj: from django.shortcuts import render from django.http import HttpResponse ## Create your views here. def homepage ( request ): return HttpResponse ( 'Welcome to homepage! #samoOIRI ' ) # primjetiti korištenje HTML-a Osvježimo stranicu http://127.0.0.1:8000/ u browseru. Modeli: Uvod Nastavak na program iz uvoda. U ovom poglavlju detaljnije je objasnjeno stvaranje modela u Djangu. Stvoreni model se mapira na tablicu u bazi podataka. Baza poidataka je već stvorena i možete ju vidjeti na lokaciji mysite/mysite . Po defaultu tip baze podataka je SQLite 3 pa je ekstenzija datoteke .sqlite3 . Tip baze podataka možete mijenjati u settings.py pod DATABASES . Stvaranje modela i polja modela Ovime stvaramo novu tablicu u bazi podataka a zadana polja postaju stupci u toj tablici. Automatski se po defaultu kreira primarni ključ iz toga, ali po želji možemo i proizvoljno odrediti da neka od zadanih vrijednosti to bude. Zadatak Otvorite main/models.py i definirajte klasu imena Predmet. U klasi definirajte stupce naziva: predmet_naslov , predmet_sadrzaj i predmet_vrijeme_objave . Njihovi tipovi neka budu CharField() koji ima zadan parametar max_length na 100 , TextField() i DateTimeField() koji ima naziv postavljen na 'date published' . Rješenje zadataka. U datoteku main/models.py dodajemo: class Predmet ( models . Model ): predmet_naslov = models . CharField ( max_length = 100 ) predmet_sadrzaj = models . TextField () predmet_vrijeme_objave...