Navigation


Seminar iz predmeta Operacijski sustavi 2

2007-01-01 @ 00:01,

Web aplikacija stvorena pomoću Django razvojnog okruženja

Za prikaz stvorene django aplikacije odabrana je blog aplikacija. Koja preko administracijskog sučelja omogućava unošenje i administriranje blog članaka, dodavanje i izmjenu kateogrija.
U nastavku prikazan je proces izgradnje blog aplikacije te je dan potpuni programski kod zadane aplikacije.

Stvaranje blog aplikacije

Početni koraci pri stvaranju blog aplikacije su kreiranje baze podataka. U primjeru je stvorena baza podataka blog.db. Sljedeći korak je stvaranje projekta "web" i nove django aplikacije "blog" te uređivanje datoteke postavki settings.py
Izgled promijenjenih dijelova datoteke settings.py je :
DATABASE_ENGINE = 'postgresql'
DATABASE_NAME = 'blog.db'
DATABASE_USER = 'root'
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
...
TEMPLATE_DIRS = (
    '/direktorij_u_kojem_se_nalazi/melita_mihaljevic_os2/web/templates/',
)
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
    'web.blog',
    )
U datoteci opcija dodane su informacije o bazi podataka koja je stvorena, dodana je staza do direktorija u kojem će biti smješteni predlošci te su uključene mogućnosti korištenja administracijske stranice i aplikacije blog koja je dio projekta web.
Sljedeći korak je uređivanje datoteke url konfiguracija urls.py. Promjene u datoteci urls.py su :
urlpatterns = patterns('',
    (r'^blog/', include('web.blog.urls')),
    (r'^admin/', include('django.contrib.admin.urls')),
    (r'^site_media/(.*)$', 'django.views.static.serve', {'document_root': '/home/gizmo/melita_mihaljevic_os2/web/media'}),
)
Prvom linijom definirano je da svi url-ovi koji započinju sa blog se traže u web.blog.urls Na taj način su svi url-ovi koji pripadaju aplikacji blog preusmjereni u datoteku konfiguracije url-ova bloga te na taj način odvojeni od dugih aplikacija u projektu. Na taj način smanjena je mogućnost pogreške i povećana sigurnost izgrađeni aplikacija u projektu. Druga linija omogućava korištenje administratorske stranice. Posljednja linije omogućava korištenje medijskih sadržaja u aplikaciji. Medijski sadržaji smješteni su u direktoriju media projekta web, a za korištenje medijskog sadržaja u predloške je potrebno navesti url na sadržaj koristeći oblik:
/site_media/direktorij/datoteka_ili_slika
Nakon uređivanja datoteke url konfiguracija kreirani su modeli u datoteci models.py Izgled modela je:
from django.db import models

class Category(models.Model):
    name = models.CharField(max_length= 100)
    slug = models.SlugField(unique= True, prepopulate_from=('name',))
    def __str__(self):
      return self.name

    class Meta:
      verbose_name_plural="Categories"

    class Admin:
      pass

class BlogEntry(models.Model):
    title = models.CharField(max_length= 100)
    slug = models.SlugField(unique= True, prepopulate_from=('title',))
    date = models.DateTimeField()
    precis = models.TextField(blank=True)
    content = models.TextField(blank= True)
    categories = models.ManyToManyField(Category, blank=True)

    def __str__(self):
      return self.title

    class Meta:
      verbose_name_plural="Blog entries"

    class Admin:
      pass

Dvijema klasama definirana je struktura blog aplikacije. Klasom Category definirane su kategorije blog članaka, na primjer: računala, programiranje, glazba i drugi. U klasi su definirani ime kategorije name koje je tipa polje znakova maksimalne duljine 100 znakova. Osim imena definirana je poveznica na ime kategorije koje je tipa poveznice pomoću koje se pristupa imenu i pomoću koje se dohvaćaju kategorije i učitavaju kao link.Poveznica se generira iz imena kategorije na način da se riječi povezuju znakom "-" u jedan niz. Unutar klase kategorija definirana je klasa Meta koja služi za definiranje ispisa množine u administracijskoj stranici. Umjesto "categorys" u administracijsku stranicu upisuje se "categories". Također dodana je klasa Admin koja omogućuje prikaz kategorija u administratorskoj stranici.
Klasom BlogEntry definirana je struktura blog članka. Definiran je naslov, poveznica na naslov,datum stvaranja članka ili uređivanja, kratak pregled članka (eng. precis) i potpuni sadržaj članka (eng.content). Također omogućen je odabir kategorije. Dodana je i mogućnost prikaza u administratorskoj stranici te izmjena ispisa množine.
Izgled administratorske stranice koja je kreirana je:


Forma za unos blog članka pomoću administratorske stranice je:

Da bi unos bio valjan i da bi se mogao spremiti u bazu i prikazati u internet pregledniku potrebno je ispuniti sva polja osim polja sadržaj koje je opcionalno polje. Ukoliko nisu unesena sva polja ispisat će se poruka o grešci kao što je to prikazano na slici.


Potrebno je unijeti kategoriju u koju spada blog članak koji je kreiran. Ukoliko ne postoji kategorija potrebno ju je dodati u formi za kategorije:
Nakon definiranja modela kreirani su pogledi, uređena lokalna datoteka url konfiguracija blog aplikacije i kreirani su predlošci za prikaz.
Stvoreni pogledi pogledi i predlošci omogućuju prikaz blog aplikacije u internet pregledniku na adresi definiranoj u lokalnoj datoteci url konfiguracija. Stvoreni pogledi smješteni su u datoteci views.py:
import django.http as http
import models
import django.shortcuts as shortcuts
def summary(request):
    entries = models.BlogEntry.objects.order_by('-date')
    categories = models.Category.objects.order_by('name')
    return shortcuts.render_to_response("blog/summary.html",
    dict(entries=entries,categories=categories))

def detail(request, entry_slug):
    entry= shortcuts.get_object_or_404(models.BlogEntry,slug=entry_slug)
    return shortcuts.render_to_response("blog/detail.html",dict(entry=entry))

def category(request,category_slug):
    category = shortcuts.get_object_or_404(models.Category, slug=category_slug)
    return shortcuts.render_to_response("blog/category.html",
    dict(category=category))
Pogledom su definirane 3 funkcije, za svaku stranicu koju je moguće otvoriti. Prva funkcija summary definira prikaz članaka bloga sortiranih po datumima objave i kategorija sortiranih prema imenu kategorije. Funkcija definira akcije za prikaz glavne stranice bloga. Posljednjom naredbom definira se prikaz bloga pozivajući html datoteku summary.html , prosljeđjući objekte unosa članaka i kategorija html datoteci.
Funkcijom detail definirana je akcija prikaza detalja članaka bloga ukoliko je naveden detaljniji opis članka ,putem stranice detail.html.
Posljednjom funkcijom category definirana je akcija koja poziva stranicu category.html te ispisuje zadane kategorije.
U direktoriju /template/blog definirane su html datoteke pogleda koje omogućuju prikaz bloga u internet pregledniku. Definirani predlošci su:
summary.html:
<html>
    <head>
      <title> Blog </title>
      <link rel="stylesheet" type="text/css" href="/site_media/images/style.css" />
    </head>
    <body>
      <div id = "container">
      <div id = "header"> Primjer Bloga </div>
      <div id = "right-column">
      <h2>Categories</h2>
        {%for category in categories%}

      <p><a \ href='/blog/category/{{category.slug}}/'>:{{category.name}}</a></p>

      {%endfor%}
    </div>
    <div id ="content">
      {%for entry in entries %}
      <h2>{{entry.title}}</h2>
      <h3>{{entry.date|date:"Y-n-j H:i"}}</h2>
      {{entry.precis|linebreaks}}
      {%if entry.content%}
      <a href='/blog/{{entry.slug}}/'>More</a>
      {%endif%}
      <hr>
      {%endfor%}
    </div>
    </div>
</body> </html>
Prvom označenom linijom definirano je pozivanje.css datoteke kojom je definiran dizajn blog stranice. Preostale označene linije definiraju predložak kreiran pomoću Djanga. Prvim dijelom definiran je prikaz kategorija.Prikazuju se svi objekti tipa category. Drugim dijelom prikazuju se članci bloga. Za svaki članak koji postoji definiran tipom entry ispisuje se naslov, datum kreiranja, karatak sadržaj, ukoliko postoji ispisuje se link na prošireni sadržaj članka bloga. Izgled blog stranice bez uključenog dizajna je:

Datoteke predložaka za categorije i dodatne ispise o člancima bloga analogne su glavnoj stranici bloga te nisu navedene.
Izgled stvorene blog stranice s uključenim dizajnom je :

Ukoliko se stranica testira pomoću alata za ispitivanje web aplikacija firebuga. Izgled izgeneriranog html koda iz predložaka je :



Kako je moguće vidjeti varijable i funkcije zamijenjene su stvarnim vrijednostima i prikazane u internet pregledniku. Stvarne vrijednosti dohvaćene su pomoću funkcije pogleda.
Izgrađenim primjerom prikazan je način izgradnje web aplikacija pomoću Django razvojnog okruženja pridržavajući se MTV arhitekture pri stvaranju aplikacije. Programski kod potpune blog aplikacije moguće je pronaći ovdje

Autorica

Melita Mihaljevic
FER, OS2
voditelj: Marin Golub
osobna stranica autorice