+ All Categories
Home > Documents > Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Date post: 05-Jan-2017
Category:
Upload: vanliem
View: 226 times
Download: 2 times
Share this document with a friend
51
ˇ Cesk´ e vysok´ e uˇ cen´ ı technick´ e v Praze Fakulta stavebn´ ı Katedra mapov´ an´ ı a kartografie Obor: Geoinformatika Vytvoˇ ren´ ı webov´ e aplikace pro autostop pomoc´ ı frameworku Django BAKAL ´ A ˇ RSK ´ A PR ´ ACE Vypracoval: Luboˇ sTruhl´aˇ r Vedouc´ ı pr´ ace: Ing. Martin Landa Rok: 2010
Transcript
Page 1: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Ceske vysoke ucenı technicke v Praze

Fakulta stavebnı

Katedra mapovanı a kartografieObor: Geoinformatika

Vytvorenı webove aplikacepro autostop pomocıframeworku Django

BAKALARSKA PRACE

Vypracoval: Lubos Truhlar

Vedoucı prace: Ing. Martin Landa

Rok: 2010

Page 2: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Pred svazanım mısto tehle stranky vlozıte zadanı prace s podpisem

dekana (bude to jediny oboustranny list ve Vası praci) !!!!

Page 3: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Prohlasenı

Prohlasuji, ze jsem svou bakalarskou praci vypracoval samostatne apouzil jsem pouze podklady (literaturu, projekty, SW atd.) uvedene v prilozenemseznamu.

V Kralupech nad Vltavou dne 13.5.2010 ........................................Lubos Truhlar

Page 4: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Podekovanı

Dekuji Ing. Martinu Landovi za jeho vedenı pri tvorbe teto bakalarskeprace, za jeho podnety a pripomınky, ktere ji obohatily, a za jeho pomoc pritvorbe webove aplikace.

Dale, jak je dobrym zvykem, dekuji sve rodine a pratelum, kterı miposkytli nezbytnou podporu behem celeho studia.

Lubos Truhlar

Page 5: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Nazev prace:Vytvorenı webove aplikace pro autostop pomocı frameworkuDjango

Autor: Lubos Truhlar

Obor: GeoinformatikaDruh prace: Bakalarska prace

Vedoucı prace: Ing. Martin LandaKatedra mapovanı a kartografie, Fakulta stavebnı,Ceske vysoke ucenı technicke v Praze

Konzultant: —

Abstrakt: Tato bakalarska prace je zamerena na seznamenı ctenares webovym frameworkem Django, vcetne prakticke ukazky jeho pouzitı.Venuje se obecnemu popisu frameworku Django, od jeho vzniku, az po po-drobny popis struktury webove aplikace. Dale je predstavena vlastnı we-bova aplikace, ktera vznikla pomocı tohoto frameworku. Dale se tato pracesnazı ukazat vzajemne propojenı Djanga a ostatnıch nastroju pouzitych kvytvorenı webove aplikace.

Klıcova slova: Django, framework, Python, GeoDjango

Title:Web application for hitchhiking based on Django framework

Author: Lubos Truhlar

Abstract: This bachelor work is focused on introducing Django frameworkto the readers, including practical example of its usage. The work applieson general description of the framework, from the begining of the projectto the detail definition of web application structure. Additionally the workintroduces new web application which was created mainly by this framework.It also presents the interconnection between Django and other tools used inthe web application.

Key words: Django, framework, Python, GeoDjango

Page 6: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Obsah

1 Uvod 1

2 Webovy framework Django 32.1 Historie projektu . . . . . . . . . . . . . . . . . . . . . . . . . 42.2 Zakladnı vlastnosti . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2.1 Don’t repeat yourself . . . . . . . . . . . . . . . . . . . 52.2.2 Model-View-Controller . . . . . . . . . . . . . . . . . . 62.2.3 Object-Relation Mapping . . . . . . . . . . . . . . . . 62.2.4 Dalsı nastroje . . . . . . . . . . . . . . . . . . . . . . . 6

2.3 Aplikace Django . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . 72.3.2 Databaze . . . . . . . . . . . . . . . . . . . . . . . . . 82.3.3 Webovy server . . . . . . . . . . . . . . . . . . . . . . 82.3.4 GeoDjango . . . . . . . . . . . . . . . . . . . . . . . . 9

2.4 Struktura projektu v Djangu . . . . . . . . . . . . . . . . . . 102.4.1 Projekt . . . . . . . . . . . . . . . . . . . . . . . . . . 102.4.2 Sprava projektu . . . . . . . . . . . . . . . . . . . . . 112.4.3 Dostupne URL . . . . . . . . . . . . . . . . . . . . . . 112.4.4 Nastavenı projektu . . . . . . . . . . . . . . . . . . . . 112.4.5 Aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . 122.4.6 Modely . . . . . . . . . . . . . . . . . . . . . . . . . . 122.4.7 Formulare . . . . . . . . . . . . . . . . . . . . . . . . . 132.4.8 Pohledy . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3 Ostatnı nastroje 153.1 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2 PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.3 PgRouting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.4 OpenLayers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.5 OpenStreetMap . . . . . . . . . . . . . . . . . . . . . . . . . . 203.6 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

vi

Page 7: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

4 Webova aplikace Stopar 224.1 Popis projektu . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.1.1 Vzhled aplikace . . . . . . . . . . . . . . . . . . . . . . 244.1.2 Sablony . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4.2 Databaze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.3 Aplikace accounts . . . . . . . . . . . . . . . . . . . . . . . . . 28

4.3.1 Modely . . . . . . . . . . . . . . . . . . . . . . . . . . 294.3.2 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

4.4 Aplikace points . . . . . . . . . . . . . . . . . . . . . . . . . . 304.4.1 Modely . . . . . . . . . . . . . . . . . . . . . . . . . . 314.4.2 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

4.5 Aplikace rides . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.5.1 Modely . . . . . . . . . . . . . . . . . . . . . . . . . . 334.5.2 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4.6 Planovana funkcionalita . . . . . . . . . . . . . . . . . . . . . 36

5 Zaver 37

Seznam pouzitych zdroju 39

A Ukazky vzhledu webove aplikace Stopar 41Obsah

vii

Page 8: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Kapitola 1

Uvod

Internet se stal nepredstavitelne oblıbenou a v dnesnı dobe naprosto nepostra-

datelnou soucastı naseho sveta. Tato celosvetova pocıtacova sıt’ muze slouzit

k ruznym ucelum, od sdılenych dat mezi pobockami jedne firmy na ruznych

kontinentech, az k obycejnemu posılanı emailu mezi dvema znamymi v jedne

mıstnosti. Jedno je vsak pro vsechny ucely spolecne. A to je vymena infor-

macı, v pocıtacove terminologii mluvıme o vymene dat.

V dnesnı dobe naprosto prevazila komunikace na internetu pres system

World Wide Web, znamy spıse pod zkratkou ”web”. Do tohoto systemu patrı

webovy prohlızec a webovy server. Vetsine uzivatelu internetu, respektive

webu, pojem internet a web splyvajı v jedno. Je to jednak omluvitelnou

neznalostı uzivatelu, a jednak take dıky jeho masivnımu rozsırenı, nebot’

vetsina techto uzivatelu ani jine systemy nezna a nepotrebuje znat. World

Wide Web jim umoznuje vse, co v dnesnı dobe na internetu potrebujı.

Zpocatku web slouzil ciste k prezenci statickych informacı o spolecnostech

a organizacıch. Ale s postupem casu a rozvojem technologiı se z nej stal

nastroj pro uzivatele ke sdılenı informacı.

Vyvoj webu smeruje k webovym aplikacım, coz jsou klasicke desktopove

aplikace, ale dostupne a pouzitelne pres webovy prohlızec. Vsechny zpusoby

vyuzitı webu stavejı na klasickych webovych strankach a znalost tvorby

takovychto stranek dnes patrı ke vzdelanı na vetsine skolach zamerenych na

informacnı technologie. Toto vse zpusobilo vznik mnoha nastroju k usnad-

nenı tvorby webovych stranek. A jednım z techto nastroju je framework

Django.

Cılem teto prace bylo pouzıt framework Django, ve spojenı s dalsımi

1

Page 9: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

open-source programy, pro vytvorenı uzivatelsky prıvetive webove aplikace

pro stopare a turisty.

Aplikace Stopar umoznuje vyhledavanı tras v Ceske republice, jejich

ukladanı do databaze a sdılenı s ostatnımi uzivateli, stejne tak sdılenı jinych

zajımavych mıst. Pro vyuzitı teto aplikace je temer nutnostı registrace noveho

uzivatele, tım je zprıstupneno ukladanı vlastnıch dat.

Vetsina podobnych webovych aplikacı umoznuje ukladanı do databaze

pouze jedne skupiny prvku (body respektive trasy) a nenabızı vzajemnou

interakci uzivatele s mapou. Smyslem tvorby teto aplikace bylo propojenı

klasicke databaze pro stopare (viz http://www.spolujizda.cz) s mapou a

sdılenı dalsıch zajımavych mıst mezi uzivateli – turisty.

Framework Django byl zvolen z duvodu jeho schopnosti efektivne praco-

vat s geoprostorovymi daty dıky nadstavbe GeoDjango a take kvuli svobodne

licenci BSD, pod kterou je vyvıjen. Je potreba zmınit, ze i v prıpade pouzitı

tohoto frameworku nenı programator usetren nutnosti znat znackovacı jazyk

HTML1 nebo kaskadove styly. Framework mu pouze poskytuje nastroje pro

lepsı tvorbu. Pod slovem ”lepsı”je zde mıneno zejmena rychlejsı a bezpecnejsı.

1HTML je zkratka pro HyperText Markup Language, coz je znackovacı jazyk pouzıvanypro tvorbu webovych stranek

2

Page 10: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Kapitola 2

Webovy framework Django

Tato kapitola cerpa predevsım z informacı dostupnych v knize ”The Defini-

tive Guide to Django: Web Development Done Right” [3] a ze serialu o

Djangu na serveru root.cz [1].

Kazdy programator se dostal do situace, kdy psal stejny kus kodu

ponekolikate. Tato situace je neprıjemna, nebot’ cas programatora je pro

zamestnavatele drahy a psanı stejne veci je pro programatora nezabavne.

Navıc urcite existuje spousta dalsıch lidı, kterı stejny nebo podobny problem

jiz resili, a tudız je zbytecne toto resit znovu. Z techto duvodu vznikly

tzv. ”frameworky”. Jsou to vlastne nastroje daneho programovacıho jazyka,

ktere se snazı ulehcit praci programatorum. Tım, ze jsou frameworky zame-

reny pouze na urcitou cast aplikacı, ktere se s nimi dajı vytvaret (naprı-

klad webove aplikace, ajaxove aplikace 1), mohou poskytovat velmi presne

a uzitecne nastroje.

Django framework patrı do skupiny tzv. webovych frameworku. Webove

frameworky poskytujı hlavne nastroje a knihovny pro prıstup k databazi,

sablonovacı system webovych stranek a spravu uzivatelu. Z dalsıch frame-

worku z teto skupiny muzeme jmenovat naprıklad Ruby on Rails, zalozeny

na programovacım jazyku Ruby, nebo Zend postaveny na PHP.

Django je velmi mocnym nastrojem, ktery muze byt zakladem mnoha

webovych aplikacı. Mezi nejvetsı svetove weby, bezıcı na Djangu, patrı denık

washingtonpost.com nebo kulturnı web lawrence.com, mezi ceskymi weby je

to portal zena.cz nebo webexpo.cz.

1AJAX (asynchronnı Javascript a XML) je metoda, ktera dela webove stranky inter-aktivnejsı tım, ze odesıla pozadavky na server bez nutnosti znovu-nactenı webove stranky.

3

Page 11: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

V dnesnı dobe je Django trochu ve stınu klasickych redakcnıch systemu

a jeho rozsırenı branı mala podpora na strane provozovatelu webhostingu.

Vyvoj Djanga jde kupredu hlavne dıky aktivnım vyvojarum v komunite a

jednou se treba docka takove obliby jako redakcnı systemy zalozene na PHP

(Drupal, WordPress).

Mezi nejvetsı prednosti Djanga patrı automaticky generovane adminis-

tracnı rozhranı, ktere umoznuje spravu uzivatelu systemu, spravu dat v data-

bazi a upravy webovych stranek. Dale je nesmırnou vyhodou jednotny, opti-

malizovany a zabezpeceny prıstup ke vsem databazım. A na zaver je to

propracovany sablonovacı system, ktery spolehlive zamezı opakovanı psanı

stejneho kodu.

2.1 Historie projektu

Kolem roku 2000 vznikl Web development tym kansaskeho denıku Lawrence

Journal-World Newspapers, ktery se staral o vyvoj webovych aplikacı. Hlav-

nımi programatory tohoto tymu byly Adrian Holovaty a Simon Willison.

Starali se o spravu nekolika webovych portalu tohoto novinoveho denıku.

V teto dobe byli webove nastroje zamereny na tvorbu statickych stranek.

Oni vsak potrebovali nastroj, ktery by umoznoval rychlou zmenu, v zavislosti

na novych udalostech, ktere se odehravajı ve svete kazdou minutu. Z tohoto

duvodu zacali vyvıjet nove nastroje a aplikace, ktere by jim tyto moznosti

poskytly. Kazda aplikace byla nejprve urcena pouze webu, pro ktery byla

vyvinuta. Pozdeji vsak Adrian a Simon zacali aplikace spojovat a zobecnovat,

a tım vytvorili framework Django.

Nenı lehke urcit presne rok vzniku tohoto frameworku, ale predpoklada

se, ze to byl rok 2003. V tomto roce prave doslo ke spojenı vıce aplikacı

a nastroju, pracujıcıch spolecne v jednom celku. Framework se dale vyvıjel

v tomto malem tymu, do ktereho jeste pribyl Jacob Kaplan-Moss. Po dvou

letech tento clovek rozhodl, ze framework je jiz pouzitelny pro ostatnı uziva-

tele a uvolnil jej jako open-source pod licencı BSD. Pojmenovan byl po

jazzovem kytaristovi Django Reinhardtovi 2. Nynı, po nekolika letech vyvoje,

je v projektu Django zapojeno tisıce lidı od vyvojaru zakladu frameworku,

az po uzivatele (vyvojare webovych aplikacı pomocı frameworku). Puvodnı

dva zakladatele Adrian a Simon jsou stale zapojeni do projektu a snazı

2Django Reinhardt http://en.wikipedia.org/wiki/Django Reinhardt

4

Page 12: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

se organizovat vyvoj, ale prevazna cast kodu jiz pochazı ze spolecne prace

komunity.

Historii Djanga je dulezite znat, nebot’ z nı plynou dva dulezite po-

znatky. Django primarne vzniklo pro zpravodajske webove stranky, a to ho

predurcilo k tomu, ze je vhodny na rychle se menıcı a obsahove zamerene

weby naprıklad washingtonpost.com. To vsak neznamena, ze nenı vhodny

i pro dalsı typy webovych aplikacı. Druhym dulezitym faktorem bylo, ze

Django vzniklo z profesionalnıch a prakticky uzıvanych aplikacı a ne jako

nektere projekty vyvinute hlavne na akademickych pudach. Tento faktor

predurcil oblıbenost Djanga, nebot’ framework je zameren na bezne a caste

problemy, ktere se snazı efektivne resit.

2.2 Zakladnı vlastnosti

Django ma nekolik specifickych vlastnostı, ktere ho cinı velmi mocnym a

zaroven prehlednym nastrojem k tvorbe webu.

Oblıbenost Djanga spocıva v modernıch programovacım principu DRY

(Do not Repeat Yourself), ktery se snazı minimalizovat opakovanı kodu.

Prehlednost Djanga je dusledkem presne dane struktury, kterou by se mel,

a vıcemene i musı, rıdit kazdy projekt. Nenı zde prostor pro vlastnı na-

stavenı struktury projektu, nazvy a umıstenı konfiguracnıch souboru jsou

z vetsı casti pevne dany. To urychluje orientaci v neznamych projektech

i usnadnuje spolupraci pri dotazech na pomoc od vyvojaru. Dalsı nemene

dulezitou vlastnostı Djanga je implementovany navrhovy vzor MVC (Model-

View-Controller). A naposled nesmıme zapomenout na otevreny zdrojovy

kod, dıky cemuz mohou do projektu prispıvat lide z celeho sveta.

2.2.1 DRY

”Pragmaticky princip DRY (Don’t Repeat Yourself) nam rıka, ze kazda dılcı

znalost musı mıt v systemu jedinou, jednoznacnou, smerodatnou reprezentaci.

Znamena to, ze se nas Django snazı primet k takovemu rozvrzenı prace,

v nemz se zamezı rutinnımu opakovanı kodu. Bohate se vyuzıva vlastnostı

objektove orientovaneho programovanı a automatickeho generovanı kodu.”

[Dvorak Pavel, 2009][1]

5

Page 13: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

2.2.2 MVC

Model-View-Controller je asi nejvyuzıvanejsı navrhovy vzor v soucasnych

modernıch frameworcıch. Django jej implementuje pomocı MTV (Model-

Template-View), prelozeno do cestiny ”Model-Pohled-Sablona”. Principem

tohoto vzoru je oddelit vlastnı definici dat jako databazovych modelu, defi-

novanych pomocı Pythonovskych trıd, zpracovanı dat ruznymi, predem defi-

novanymi pohledy, de facto Pythonovskymi funkcemi a vyslednou prezentaci

dat pomocı modifikovatelnych Django sablon do podoby webovych stranek.

2.2.3 ORM

Object-Relation Mapping je objektovy prıstup k databazi. Django vyuzıva

Pythonovskych objektu a jeho vlastnıch funkcı k automatizovanemu ge-

nerovanı SQL 3 dotazu. Vyhodou tohoto prıstupu je fakt, ze uzivatel se ne-

musı starat o vlastnı druh databaze. Django samo o sobe podporuje vsechny

bezne dostupne a pouzıvane databaze od SQLite, az k Oracle. Jak je znamo,

tak SQL dotazy se databaze od databaze lisı. Z tohoto duvodu je tento

prıstup velice efektivnı. Zaroven automaticky generovane dotazy jsou opti-

malizovane a chranene proti utokum metodou SQL injections.

Dale je nutne zmınit, ze Django s tımto principem implementovalo tak-

zvanou ”lınou”SQL, coz znamena, ze odpovıdajıcı si SQL dotazy jsou spo-

jovany do jednoho dotazu, a navıc je tento dotaz proveden az ve chvıli, kdy

se pristupuje k vlastnım datum.

2.2.4 Dalsı nastroje

Django prinası uzivatelum, krome vyse zmınenych vlastnostı, dalsı prakticke

nastroje usnadnujıcı provoz weboveho serveru a tvorbu, administraci a opti-

malizaci jednotlivych webovych projektu. Tyto vlastnosti budou zmıneny

pouze okrajove, nebot’ jejich rozbor by prevysoval obsah teto prace, prıpadne

by spadal spıse do programatorske casti o samotnem frameworku:

• automaticky generovane administracnı rozhranı,

• optimalizace pomocı kesovanı,

3SQL je zkratka pro Structured Query Language, coz je jazyk pouzıvany pro spravudatabazovych systemu.

6

Page 14: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

• generovanı formularu na zaklade definovanych modelu,

• poloautomaticka validace formularu,

• integrovany webovy server,

• podpora ”hezkych”URL,

• snadna lokalizace projektu,

• technologie zasuvnych modelu.

2.3 Aplikace Django

Jak jiz bylo zmıneno, Django je open-source projekt. Dıky takoveto do-

stupnosti zdrojovych kodu muze Django bezet na jakekoliv architekture a

operacnım systemu, na kterem bezı Python. Vlastnı aplikace frameworku je

slozena z Pythonovskych knihoven, ktere poskytujı uzivateli ruzne nastroje

od prostych funkcı generujıcı HTML stranky, az po samotny webovy server.

2.3.1 Instalace

Instalovat Django je mozne rovnou ze zdrojovych kodu nebo pomocı binarnıch

balıcku. Pro instalaci ze zdrojovych kodu je zapotrebı mıt nainstalovan

Python ve verzi 2.3 - 2.6, platı pravidlo ze vyssı verze jsou vıce kompatibilnı.

Prechod na podporu Python 3.x je v planu, ale pro takhle velky projekt je

to velice narocne, a proto to bude vyvojarum jeste nejakou dobu trvat.

Instalace je velice jednoducha, nebot’ spocıva pouze v nakopırovanı po-

trebnych knihoven na spravne mısto, kde s nimi dokaze Python praco-

vat a pridanım spoustecıch cest do systemovych promennych. Dıky takto

nenarocne instalaci je tento zpusob doporucovany vsem uzivatelum.

Dalsı zpusob je instalace pomocı balıckovacıch systemu. V kazde vetsı

Linuxove distribuci by mel byt binarnı balıcek Djanga dostupny. Vyhodou

teto instalace je automaticke vyresenı zavislostı, tedy instalace Pythonu a

automaticke aktualizace vetsinou zavaznejsıch bezpecnostnıch chyb. Bohuzel

v balıckovacıch systemech starsıch, ale i novych Linuxovych distribucıch se

vetsinou vyskytujı zastarale verze Djanga, a proto instalace tımto zpusobem

nenı prılis doporucovana.

7

Page 15: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Ke stazenı se dajı najıt i instalacnı balıcky pro operacnı system MSWin-

dows. Pri instalaci tımto zpusobem je vetsinou nutne mıt predem nainstalo-

vany Python v pozadovanych verzıch, ale dajı se najıt i kompletnı balıcky

Django s Pythonem webovym serverem a databazı.

Zaroven je nutne zmınit, ze je umozneno stahovat prımo vyvojovou verzi

Djanga, tedy neotestovanou a s chybami. Chyby v techto verzıch nebyvajı

prılis zavazne a naproti tomu ma uzivatel prıstup k nejnovejsım funkcım

a snadnou aktualizaci kodu pomocı systemu SVN4. Navıc vyvojovy cyklus

stabilnı verze je dlouhy, a dıky tomu vsemu je instalace teto verze velice

casta a oblıbena i u beznych uzivatelu.

2.3.2 Databaze

Ke kazde vetsı webove aplikaci patrı databaze k uchovavanı dat vseho druhu.

Django v tomto prıpade umoznuje vyvojarum nejen pouzitı jakekoliv dnes

bezne zname databaze, ba dokonce, jak uz bylo uvedeno, sjednocuje praci

se vsemi databazemi do jednoho rozhranı, a tak vlastne odstranuje nut-

nost znalosti jakehokoliv SQL. Toto rozhranı je prıstupne pres dobre zdoku-

mentovane aplikacnı programovacı rozhranı (API) a prace s nım je rychla

a jednoducha. Nesmıme vsak zapomenout, ze toto je pouze neco navıc.

V Djangu samozrejme existuje moznost psanı ”cistych”SQL dotazu.

Mezi podporovane databaze patrı SQLite, MySQL, PostgreSQL a Ora-

cle. Ve vyvoji je podpora pro dalsı databaze, jako MSSQL a dalsı mene

zname projekty. Pro Django nenı ani problem provozovat projekt bez data-

baze. V tomto prıpade vsak budete ochuzeni o nektere funkce, jako je prıstup

k webovemu administratorskemu rozhranı.

2.3.3 Webovy server

Django zde prichazı s vlastnım resenım v podobe velice odlehceneho webove-

ho serveru, ktery se hodı pro testovanı aplikacı behem vyvoje. Krome zaklad-

nıch vecı, jako je nastavenı portu a napojenı na IP adresu, nenabızı zadnou

konfiguraci. Na druhou stranu webserver je instalovan spolu s Djangem a

jeho spustenı je otazkou jedineho prıkazu, tudız je opravdu vhodny pro

zacınajıcı projekty.

4SVN je zkratka systemu pro spravu verzı tzv. Subversion

8

Page 16: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Narocnejsı webove aplikace je vsak vhodne nechat bezet na vykonnejsım

a lepe konfigurovatelnejsım webovem serveru. Proto je mozne Django provo-

zovat na jakemkoliv webovem serveru, splnujıcım pythonovsky standard

WSGI. Na dnes nejpouzıvanejsım webovem serveru Apache lze provozo-

vat Django s mod python, mod wsgi, nebo pomocı FastCGI. Konfigurace

Apache je v tomto prıpade slozitejsı, ale v oficialnı dokumentaci je to dobre

popsano.

2.3.4 GeoDjango

GeoDjango je nadstavbou nad samotnym Djangem, ktera nam pridava pod-

poru pro praci s geografickymi daty. Instalace GeoDjanga je jednoducha,

spocıva pouze v zaregistrovanı GeoDjango aplikace v konfiguracnım souboru

projektu. Zaroven je nutne zmınit, ze GeoDjango je zavisle na pouzitı databazı

s nadstavbou pro ulozenı prostorovych dat. Pro GeoDjango je tedy nutne

mıt SQLite se SpatialLite, PostgreSQL s PostGISem, MySQL se Spatial

Extension nebo Oracle Spatial. Dale je nutne mıt v systemu nekolik dalsıch

knihoven:

• GEOS – implementace OGC Simple Features,

• PROJ.4 – pro transformaci mezi jednotlivymi souradnicovymi systemy,

• GDAL/OGR – knihovna pro ctenı prostorovych dat z vetsiny formatu.

GeoDjango rozsiruje vsechny tri vrstvy frameworku Django. Modelum

pridava moznost definovanı vsech geografickych polı specifikovanych ve stan-

dardech Open Geospatial Consortium. Dale rozsiruje API pro prıstup k

databazi o prostorove dotazy jako contains (obsahuje) nebo distance (vzdale-

nost). Zde je potreba zduraznit, ze ne vsechny prostorove dotazy lze apliko-

vat na vsech databazıch. Rozdıly mezi databazemi uz jsou v tomto prıpade

moc velke, respektive ne vsechny databaze podporujı vsechny dotazy. Vıce

informacı lze nalezt v oficialnı dokumentaci Djanga. V sablonach lze lehce

pristupovat k prostorovym atributum jednotlivych objektu a dıky dodrzovanı

standardu OGC je lze velice jednoduse provazat naprıklad s OpenLayers.

9

Page 17: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

2.4 Struktura projektu v Djangu

Jak jiz bylo zmıneno, Django neumoznuje vyvojarum definovanı vlastnı

struktury projektu a pojmenovanı konfiguracnıch souboru, proto je dulezite

zde popsat strukturu, kterou Django vytvarı. K lepsı predstave poslouzı

obrazek 2.1 (obrazek je prevzat ze serveru excess.org).

Obrazek 2.1: Struktura projektu v Djangu

2.4.1 Projekt

Projekt je zakladnı entita. Projekt by mel predstavovat cely web, nehlede

na mnozstvı aplikacı, ktere by v nem mely bezet. Mely by to vsak byt apli-

kace, ktere sdılejı veskere nastavenı, jako naprıklad prıstup k databazi nebo

ulozenı statickych souboru. Projekt se da vytvorit prıkazem django-admin.py

startprojetct [nazev projektu].

Od zalozenı projektu probıha jiz veskere nastavenı, tvorenı a spoustenı

v adresari [nazev projektu], ktery byl vytvoren. V tomto adresari se take

10

Page 18: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

automaticky vytvorily soubory manage.py, settings.py, urls.py.

2.4.2 Soubor manage.py

Soubor manage.py slouzı k veskere administraci projektu. Jednotlive akce

predavame jako parametry tomuto skriptu, tedy python manage.py [akce].

Pomocı skriptu naprıklad spoustıme webovy server (runserver), Pythonovsky

shell (shell), synchronizaci projektu s databazı (syncdb) a dalsı. Pro uplny

prehled a jednotlive prıkazy poslouzı napoveda (help).

2.4.3 Soubor urls.py

V puvodnım nastavenı je soubor urls.py seznamem vsech dostupnych URL

adres naseho projektu. Pro kazdou adresu, ktera ma byt dostupna, se musı

vytvorit odpovıdajıcı zaznam, ktery zaroven prirazuje adrese pohled (funkci),

ktery bude zavolan a budou mu predany parametry GET nebo POST dotazu.

Pro zjednodusenı je moznost definovat dostupne URL adresy pomocı regularnıch

vyrazu a take predavat parametry URL jako parametry funkcı. Jako jedno

z mala je mozne prenastavit cestu k tomuto souboru pomocı promenne

ROOT URLCONF v konfiguracnım souboru projektu.

2.4.4 Soubor settings.py

Dalsı soubor settings.py je nemene dulezity, nebot’ obsahuje veskere zakladnı

nastavenı projektu. V tomto souboru je nastavenı prıstupu k databazi (uzivatelske

jmeno, heslo, jmeno databaze, server a port), vcetne typu databaze (Post-

greSQL, PostGIS, MySQL, SQLite, Oracle), dale pouzita jazykova sada,

casova zona a promenne:

• MEDIA ROOT – absolutnı cesta ke statickym souborum,

• TEMPLATE DIRS – absolutnı cesta k adresari se sablonami,

• MEDIA URL – URL adresa statickych souboru,

• ROOT URLCONF – cesta k urls.py,

• INSTALLED APPS – instalovane aplikace v projektu.

Dalsımi nevyznamnymi promennymi se nebudu zabyvat. Vsechny dalsı

hodnoty lze nechat v puvodnım nastavenı a projekt bude fungovat. Vse je

navıc dobre okomentovano v samotnem souboru.

11

Page 19: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

2.4.5 Aplikace

V kazdem projektu musı byt alespon jedna aplikace. Aplikacı se zde rozumı

nejaka cast programu, ktera se stara o jeden specificky ukol. Aplikacı muze

byt naprıklad program na obsluhu uzivatelu webovych stranek, jejich prihla-

sovanı, odhlasovanı, sprava osobnıch udaju. Jedna aplikace by mela vyuzıvat

jeden soubor dat (modelu) a vnitrnı funkce v pohledech. Samozrejme je ale

mozne sdılet tyto prvky i v ramci celeho projektu.

Pevne dane pravidlo na delenı programu do aplikacı nenı definovano.

Obecne platı, ze projekt obsahuje nekolik aplikacı a jedna aplikace muze

byt vyuzıvana v nekolika projektech. Nenı doporuceno mıt na kazdou funkci

zvlastnı aplikaci, respektive take nenı dobre mıt v projektu jen jednu obrı

aplikaci, do ktere zaobalıme vse. Oba zpusoby jdou provozovat, ale neprinası

uzivateli takove vyhody v prıpade nutne vzajemne spoluprace jednotlivych

aplikacı, respektive v prıpade budoucıch zasahu do jiz rozjete aplikace.

Aplikace se v projektu zalozı prıkazem python manage.py startapp

[nazev aplikace]. Tento prıkaz automaticky vytvorı novou slozku

[nazev aplikace] se soubory init .py, models.py, views.py, tests.py.

Pote se musı pridat aplikace do promenne INSTALLED APPS v souboru

settings.py, aby Django o aplikaci vedelo.

2.4.6 Soubor models.py

V souboru models.py se definuje schema databaze. Jednotlive tabulky v data-

bazi jsou predstavovany Pythonovskymi trıdami a sloupce jsou atributy dane

trıdy. Prehled vsech moznych atributu trıdy a jejich parametru je popsan v

oficialnı dokumentaci. Model je definovan jako potomek trıdy Model z mo-

dulu django.db.models nebo je mozne vyuzıt vzajemne dedicnosti mezi

modely.

Pro overenı spravne definovanych modelu je dobre pred samotnou syn-

chronizacı s databazı spustit validaci (python manage.py validate), prıpadne

si nechat vygenerovat SQL dotaz, ktery bude poslan databazi (python manage.py

sql [nazev aplikace]). Na zaver je potreba zmınit, ze Django si v zakladnım

nastavenı automaticky prida sloupec s primarnım klıcem do kazde tabulky,

kde nenı definovan.

12

Page 20: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

2.4.7 Soubor forms.py

Soubor forms.py nenı automaticky vytvoren pri zalozenı aplikace, ale jeho

prıtomnost v aplikacıch je velice casta. Jmeno souboru je volitelne, nicmene

z duvodu konvence zustava nezmeneno. V souboru jsou definovany for-

mulare, ktere jsou pouzity na webovych strankach.

Formulare jsou definovany stejne jako modely v souboru models.py,

tedy pomocı Pythonovskych trıd a jednotlive formularove prvky jsou atributy

dane trıdy.

Formulare mohou byt dokonce rovnou odvozeny z modelu tak, aby

jim odpovıdaly svoji strukturou, prıpadne doplneny, respektive ochuzeny

o nektere prvky.

2.4.8 Soubor views.py

Poslednı dulezity soubor views.py obstarava vzajemnou spolupraci mezi

jednotlivymi vrstvami Djanga. V souboru jsou definovany vlastnı pohledy

jako Pythonovske funkce, ktere jsou volany na zaklade nastavenı v souboru

urls.py. Pohledy pristupujı k databazi, odkud cerpajı data, ktera nasledne

zpracovavajı. Presny postup zpracovanı dotazu je na obrazku 2.2 (obrazek

je prevzat ze serveru djangobook.com).

Vsechny pohledy musı mıt minimalne jeden parametr. Tento parametr

byva standardne pojmenovan request, je instancı trıdy HttpRequest a

obsahuje uzitecne informace, tykajıcı se HTTP dotazu, jako GET a POST

parametry, promenne serveru apod.

Nejcastejsımi navratovymi hodnotami pohledu jsou instance techto trıd:

• HttpResponseRedirect – 302,

• HttpResponseNotFound – 404,

• HttpResponseServerError – 500,

• HttpResponse – 200,

• RenderToResponse – 200.

V prıpade pouzitı trıdy HttpResponse vracıme retezec znaku, predstavujıcı

jiz kompletnı webovou stranku. Tato metoda nenı prılis prakticka, vetsinou

se vracı instance trıdy RenderToResponse, spolu s dalsımi objekty a jmenem

13

Page 21: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Obrazek 2.2: Postup zpracovanı HTTP dotazu

sablony. V sablone muzeme k atributum techto objektu pristupovat, a data

tak modifikovat nebo jen graficky formatovat.

14

Page 22: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Kapitola 3

Ostatnı nastroje

Tato kapitola cerpa predevsım z informacı dostupnych na oficialnıch strankach

jednotlivych projektu:

• http://www.postgresql.org/

• http://postgis.refractions.net/

• http://pgrouting.postlbs.org/

• http://openlayers.org/

• http://www.openstreetmap.org/

• http://www.python.org/

Cılem teto kapitoly je seznamit ctenare s jednotlivymi nastroji pouzitymi

ve webove aplikaci Stopar.

3.1 PostgreSQL

PostgreSQL je vykonny databazovy system, ktery patrı mezi nejpouzıvanejsı

databazove systemy soucasnosti. Muzeme ho porovnavat se znamymi systemy

jako SQLite, MySQL, MSSQL nebo Oracle.

PostgreSQL je vyvıjen jako open-source pod licencı PostgreSQL License.

Licence je velice liberalnı a je podobna licenci BSD. Tato licence umoznuje

pouzıvat, menit a distribuovat PostgreSQL v jakekoliv forme se zdrojovymi

kody i bez nich.

15

Page 23: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Dıky temto moznostem je PostgreSQL velice oblıbeny pro uzivatele

Linuxu. Nachazı se take ve vetsine balıckovacıch systemu linuxovych dis-

tribucıch. PostgreSQL muzeme ale provozovat i na platforme MS Windows

a UNIX.

Vyvoj databazoveho systemu probıha uz 15 let a za tu dobu si Post-

greSQL zıskal velice dobrou povest dıky sve spolehlivosti, vykonnosti a

vysoke presnosti. Databaze plne splnuje ACID, coz je soubor vlastnostı,

ktere garantujı, ze databazove transakce budou spolehlive zpracovany. Mezi

tyto vlastnosti se pocıta atomita, konsistence, izolace a stalost dat v databazi.

Implementace SQL v PostgreSQL prısne splnuje standart ANSI-SQL:2008.

PostgreSQL podporuje velke mnozstvı datovych typu od jednoduchych

cıselnych typu az po slozite binarnı typy. Dale podporuje vetsinu svetovych

znakovych sad vcetne UTF-8 a kodovanı Unicode. Databazi je mozne prizpu-

sobit jak z hlediska poctu konkurencnıch spojenı, tak z hlediska mnozstvı

spravovanych dat. V tabulce 3.1 jsou uvedeny nektere limity databaze.

Limit HodnotaMaximalnı velikost databaze neomezenoMaximalnı velikost tabulky 32 TBMaximalnı velikost zaznamu 1.6 TBMaximalnı velikost bunky 1 GBMaximalnı pocet zaznamu v tabulce neomezenoMaximalnı pocet sloupcu v tabulce 250 - 1600Maximalnı pocet indexu neomezeno

Tabulka 3.1: Limity databaze PostgreSQL (tabulka byla prevzata ze serveruhttp://www.postgresql.org/)

PostgreSQL ma nativnı programovacı rozhranı pro vetsinu dnes pouzıva-

nych jazyku jako C/C++, Java, .Net, Perl, Python a dalsı. Zaroven umoznuje

programovat ve vlastnım jazyku PL/pgSQL, podobnem jazyku PL/SQL

znameho z databaze Oracle. PostgeSQL jiz od instalace obsahuje stovky

16

Page 24: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

predem definovanych a uzitecnych funkcı, od zakladnıch matematickych

funkcı, az po slozite kryptograficke funkce.

Vsechny tyto vlastnosti delajı databazi PostgreSQL vykonnou a mo-

dernı aplikacı, kterou je mozne pouzıvat pro projekty jakehokoliv rozsahu a

zamerenı.

3.2 PostGIS

PostGIS je nadstavbou nad databazı PostgreSQL. Do databaze pridava pod-

poru pro ukladanı a praci s geoprostorovymi daty. Tento projekt, ve spojenı

s databazı PostgreSQL, muzeme srovnavat s komercnımi resenımi v podobe

ESRI ArcSDE nebo s nadstavbou Oracle Spatial. Vykonove srovnanı s temito

projekty by PostGIS nejspıs prohral, v jeho prospech vsak hraje porizovacı

cena, ktera je nulova.

PostGIS je open-source projekt vyvıjeny pod znamou licencı GNU

General Public License. Ve zkratce, tato licence umoznuje bezplatne sta-

hovanı zdrojovych kodu, jejich upravu a nasledne sırenı s tım, ze budou

opet sıreny pod stejnou licencı, tudız zdarma.

Hlavnı zasluhu na vyvoji rozsırenı PostGIS ma firma Refractions Re-

search, ktera stojı za mnoha dalsımi projekty z oblasti GIS. Nynı vsak do

projektu mohou prispıvat a take prispıvajı lide z celeho sveta.

PostGIS se snazı striktne dodrzovat standardy specifikovane organizacı

Open Geospatial Consortium a je kompatibilnı s OpenGIS ”Simple Features

Specification for SQL”1.

Stejne jako PostgreSQL je PostGIS dostupny pro operacnı systemy

MS Windows, UNIX a GNU/Linux. Vıce informacı lze nalezt na oficialnıch

strankach projektu http://postgis.refractions.net/.

1Simple Features Specification for SQL http://www.opengeospatial.org/standards/sfs

17

Page 25: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

3.3 PgRouting

PgRouting je projekt, ktery je zameren na vyvoj knihovny pro PostGIS.

Tato knihovna poskytuje jednoduche algoritmy pro sıt’ove analyzy. Celkovy

vyvoj a sprava projektu je organizovana spolecnostı Orkney. Jiz od pocatku

projektu je hlavnım vyvojarem Anton Patrushev. Na projektu spolupracuje

zejmena s Danielem Kastlem, ktery ma na starosti podporu, dokumentaci

a dodatecne aplikace. Spolu s nimi do projektu prispıva spousta dalsıch

vyvojaru, hlavne z organizace Georepublic.

Knihovna je vyvıjena pod jiz zmınenou licencı GNU General Public

License.

PgRouting je mozne instalovat na vsechny operacnı systemy, kde bezı

PostgreSQL s PostGISem, bohuzel vsak neexistujı binarnı balıcky pro zadny

system, tudız je nutne kompilovat zdrojove kody, a to i na operacnım systemu

MS Windows.

Knihovna pgRouting vznikla nad knihovnou pgDjiksrta, ktera vsak nynı

ve srovnanı s pgRouting nabızı mnohem mene funkcı. Hlavnı funkce kni-

hovny je umoznit vyhledanı cesty s nejmensı cenou v sıt’ovem grafu. Nej-

mensı cenou muze byt naprıklad delka (v prıpade hledanı nejkratsı trasy),

delka delena maximalnı rychlostı v useku (v prıpade hledanı nejrychlejsı

trasy) nebo jakakoliv jina dynamicka nebo staticka velicina. Knihovna im-

plementuje nasledujıcı algoritmy:

• Shortest Path Dijkstra,

• Shortest Path A*,

• Shortest Path Shooting Star.

Krom teto hlavnı funkcionality nabızı knihovna i algoritmy pro resenı zname

ulohy obchodnıho cestujıcıho. Vıce o pouzitı algoritmu a dalsı informace lze

nalezt na oficialnıch strankach projektu http://pgrouting.postlbs.org/.

18

Page 26: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

V ramci projektu pgRouting jsou vyvıjeny i dalsı aplikace, naprıklad

osm2pgrouting, coz je ve skutecnosti filtr, ktery konvertuje data ve formatu

OSM (XML) do databaze PostGIS a zaroven vytvarı topologii a pomocne

tabulky. Dalsı aplikacı vyvıjenou v ramci projektu je WebRouting Service

(WRS), coz je webova sluzba, ktera umoznuje vytvaret pgRouting dotazy

pres HTTP protokol.

3.4 OpenLayers

OpenLayers je sada nastroju, ktera umoznuje zobrazovanı mapy ve we-

bovych prohlızecıch. Z uzivatelskeho pohledu jsou to ovladacı prvky mapy

(tlacıtka pro pohyb mapy, priblizovanı, oddalovanı, zmena vrstev). Z pohledu

vyvojare je to Javascriptova knihovna s prehlednym API rozhranım. Dulezite

je, ze OpenLayers nenı vlastnı mapa, kterou uzivatel vidı.

Mapa, neboli data, ktera na webove strance zobrazujeme, muzeme cerpat

z techto typu zdroju:

• Web Map Service,

• Web Feature Service,

• mapove servery (MapServer, GeoServer, ArcGIS Server),

• mapove sluzby (OpenStreetMaps, Google Maps, Yahoo! Maps),

• formaty (GeoRSS, KML, GML, GeoJSON),

a dalsı.

S projektem OpenLayers zacala firma MetaCarta v roce 2005 a o rok

pozdeji byl projekt uvolnen jako open-source, pod mırne upravenou BSD

licencı. Dnes je ve spojenı s OpenStreetMaps otevrenou alternativou ke

komercnım projektum, jako je Google Maps nebo Bing Maps.

OpenLayers jsou volne ke stazenı na strankach projektu openlayers.com.

Zaroven se tam nachazı javascriptova knihovna, na kterou je mozne prımo

19

Page 27: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

odkazovat. Poslednı moznostı je pouzitı SVN repozitare, kde se nachazı

vyvojova verze.

3.5 OpenStreetMap

OpenStreetMap je komunitnı projekt, ktery poskytuje geograficka data pod

svobodnou licencı bez omezenı. OpenStreetMap je podobny projektu Wiki-

pedia. Zakladem je, ze vsichni uzivatele mohou svobodne pridavat, upravo-

vat a cerpat informace. V prıpade OpenStreetMap jsou temito informacemi

geograficka data.

Projekt OpenStreetMap byl zalozen v roce 2004 Stevem Coastem. O dva

roky pozdeji vznikla stejnojmenna nevydelecna organizace, ktera projekt

zastit’uje. Postupem casu do projektu prispıvala financne a materialne rada

lidı a firem, jako Yahoo nebo Google a z OpenStreetMap se stala ruzne

kvalitnı mapa pokryvajıcı cely svet.

Kvalita dat v OpenStreetMap je ruznoroda, nebot’ zdrojem dat jsou

uzivatele a firmy, kterı poskytnou zdarma zaznamy svych merenı. Pri pohledu

do mapy jsou evidentnı rozdıly nejen mezi zememi, ale i mezi oblastmi

jednotlivych zemı. Vzdy zalezı na aktivite uzivatelu a oblıbenosti projektu

v dane lokalite.

Nynı je v komunite registrovano kolem 200 000 uzivatelu, odhaduje se

vsak, ze pouze 10 % z nich jsou aktivnımi prispevateli.

Data OpenStreetMap jsou ulozena i s topologiı a muzeme je rozdelit do

techto typu:

• Nodes – body s geografickou polohou,

• Ways – seznamy bodu, patrıcı do jednoho polygony/polylinie,

• Relations – skupiny prvku, kterym muze byt prirazen stejny parametr,

• Tags – doplnujıcı textove udaje.

20

Page 28: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

OpeenStreetMap je velice nadejny projekt a pokud bude jeho oblıbenost

rust, muze se stat plnohodnotnym zdrojem geografickych dat po cele Zemi.

3.6 Python

Python je vykonny programovacı jazyk, ktery se snazı o maximalnı citelnost

kodu. Jazyk Python je objektove orientovany a hodı se jak pro psanı kratkych

skriptu, tak pro vyvoj rozsahlejsıch aplikacı. Interpret jazyka je spustitelny

na operacnıch systemech MS Windows, UNIX i MacOS X.

Zdrojove kody Pythonu jsou volne dostupne na oficialnıch strankach

projektu python.org a jsou uvolneny pod licencı Python Software Founda-

tion License, ktera je podobna licenci BSD. Na strankach se nalezajı binarnı

balıcky pro operacnı systemy MS Windows a odkazy na dalsı moduly.

Vyvoj Pythonu zacal Guido van Rossum v prosinci 1989 s hlavnım

zamerem vyvinout nastupce programovacıho jazyka ABC. Rossum ma nynı

stale hlavnı slovo pri urcovanı smeru vyvoje jazyka, ale na vlastnım vyvoji

se jiz znacne podılı komunita.

Python vyuzıva bılych znaku, neboli odsazovanı k seskupovanı vyrazu,

dale se snazı o sirsı pouzitı srozumitelnych klıcovych slov, cımz vytvarı kod

dobre citelny. V programu nenı nutne deklarovat promenne ani argumenty

funkcı, jazyk dokonce nerozlisuje ani jejich datovy typ. Interpret jazyka je

mozne pouzıvat interaktivne, coz je vyhodne pri testovanı programu.

Python je soucastı mnoha projektu a zakladem mnoha aplikacı. Z tech

nejznamejsıch jsou to naprıklad editory rastrove (GIMP) a vektorove grafiky

(Inkspace), system GRASS GIS a samozrejme framework Django.

21

Page 29: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Kapitola 4

Webova aplikace Stopar

Tato kapitola se venuje webove aplikaci Stopar, ktera byla vytvorena pomocı

frameworku Django a dalsıch nastroju, ktere jsou blıze popsany v kapitole 3.

Automobilova doprava se za poslednıch roky velice rozsırila. V dnesnı

dobe nenı vyjimecne, kdyz rodina vlastnı vıce nez jeden automobil. Dusledek

toho je videt na nasich silnicıch, kde vetsina automobilu ma pouze jednoho

pasazera – a to ridice. To samozrejme zpusobuje velke dopravnı problemy,

nebot’ silnicnı sıt’ v Ceske republice na to nenı dimenzovana. Resenım muze

byt zkvalitnenı hromadne dopravy nebo take rozsırenı stopovanı.

V ruznych zemıch Evropy jako Italie a Polsko, a take v USA, je stopovanı

povazovano za bezny druh dopravy a je mnohem vıce rozsıren nez v Ceske

republice. Ve Spojenych statech je zvlast’ oblıbeny, nebot’ tam existujı na

dalnicıch a ve mestech specialnı pruhy pro vozidla s vıce nez dvema oso-

bami. Tım jsou ridici nuceni vyhledavat spolujezdce. V CR je stopovanı

spıse vysadou male skupiny nadsencu a nema takovou podporu u zbytku

verejnosti. Priblızit stopovanı vsem lidem byl primarnı duvod vzniku teto

prace.

Pri prohledanı ceskeho internetu narazı ctenar na projekty naprosto

stejneho zamerenı. Je to naprıklad:

• http://www.spolujizda.cz/

• http://www.spolujizda.net/

• http://www.spolujizda.com/

• http://www.autospolujizda.cz/

22

Page 30: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

a urcite mnohe dalsı. Vsechny tyto projekty vypadajı podobne. Uzivatelske

rozhranı je sice jednoduche, ale nicım nezajımave. Uzivatel si muze vyhledat

spolujızdy a nebo je vlozit, a to je vetsinou jedina funkcionalita. Bezneho

uzivatele webu, ktery se nezajıma o spolujızdu, tyto projekty nicım neoslovı.

Coz je hlavnım duvodem neprılis velke navstevnosti a oblıbenosti techto

webu.

Webovy portal Stopar se snazı priblızit stopovanı ostatnım lidem tım, ze

poskytuje i dalsı funkcionalitu. Nynı je touto funkcionalitou pouze pridavanı

zajmovych bodu (tzv. Points of Interest) do mapy. Do budoucna je vsak

v planu rozsırit aplikaci o moznost vkladanı tras, naprıklad cyklotras nebo

tras pro koleckove brusle, dale moznost vkladat cele zajezdy, ke kterym si

bude uzivatel moci pridavat cestovnı zapisky, fotky a dalsı veci.

Vse bude fungovat na vzajemnem sdılenı mezi uzivateli, kterı si tımto

zpusobem budou doporucovat zajımave typy na vylet. Vsechny prvky bude

moci uzivatel komentovat, stejne tak bude moci pridavat nazory na ostatnı

uzivatele, poskytujıcı spolujızdu, respektive spolujezdce. Je nutno pripome-

nout, ze nynı je funkcnı pouze cast obsluhujıcı pridanı zajmovych bodu a

spravu spolujızd, kazdopadne tyto casti jiz plne slouzı jako prıklad uplne

aplikace.

Dalsı vecı, ktera cinı Stopare vyjimecnym oproti ostatnım projektum,

je pridanı mapy. Mapa je hlavnım nastrojem na webove strance, zobrazuje

vzdy vybrane prvky a zaroven umoznuje vkladanı prvku pouhym kliknutım.

Mapa by mela zprehlednit a zaroven ozivit aplikaci.

Toto vsechno je nutne prehledne usporadat, graficky vyladit a zajistit

uzivatelskou prıvetivost aplikace. Pouze za techto predpokladu muze byt

webova aplikace uspesna.

4.1 Popis projektu

Cely projekt momentalne bezı na serveru josef, coz je server katedry mapovanı

a kartografie. Projekt je dostupny na URL

http://josef.fsv.cvut.cz/stopar

a je prıstupny pro vsechny uzivatele. Jako webovy server je pouzit Apache.

K pouzıvanı aplikace Stopar nenı potreba vlastnit uzivatelsky profil, ale

v takovem prıpade bude pouzıvanı znacne omezeno a navstevnık bude moci

23

Page 31: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

pouze prohlızet jednotlive prvky. V prıpade zaregistrovanı bude jiz moci

uzivatel vkladat nove zajmove body, spolujızdy a pridavat komentare.

Jak jiz bylo zmıneno, tak projekt Stopar zatım umı obstaravat uzivatelske

ucty, spravovat zajmove body a jednotlive trasy, neboli zajımava mısta a

spolujızdy. Z toho jiz muze byt patrne, ze projekt je tvoren tremi aplikacemi

– aplikacı accounts, points a rides. Z nazvu aplikacı je jasne, co ktera ma na

starosti.

Projekt je napojen na databazi pgis stopar, ktera je soucastı databazo-

veho systemu PostgreSQL, bezıcım rovnez na serveru josef. PostgreSQL je

rozsıren o PostGIS, nadstavbu pro ukladanı prostorovych dat a knihovnu

pgRouting, umoznujıcı hledanı tras.

4.1.1 Vzhled aplikace

Vzhled webovych stranek je pomerne jednoduchy. Aplikace vyuzıva cele

plochy prohlızece a je optimalizovana pro rozlisenı vetsı nebo rovno 1280×800

pixelu. Na strance je dominantnım prvkem mapa, ktera zabıra levou polo-

vinu plochy a zobrazuje vzdy vybrany prvek (bod, trasu). Na prave polovine

plochy jsou textove informace k vybranym prvkum a uzivatelsky panel.

Struktura webovych stranek je naznacena na obrazku 4.1

Obrazek 4.1: Struktura webovych stranek

24

Page 32: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Pro lepsı predstavu poslouzı ukazkove obrazky v prıloze A tohoto doku-

mentu.

4.1.2 Sablony

Aplikace vyuzıva sablonovacıho systemu Djanga. Je vytvorena jedna hlavnı

sablona base.html, ktera obsahuje hlavnı panely – hlavicku a paticku a telo

webove stranky. Telo muze byt rozsıreno o stranku obsahujıcı mapu a dalsı

obsah stranky.

Ukazkovy prıklad sablony base.html (velice podobna sablona je pouzita

i v projektu Stopar, obsahuje vsak mnozstvı dalsıch hlavicek, ktere jsou vsak

pro obsah teto prace bezvyznamne):

<html>

<head>

<title>Stopar</title>

</head>

<body>

<div id="header"></div>

<div id="content">

{% if map %}

{% include map.html %}

{% endif %}

{% block contetnt %}

Hello world!

{% end block %}

</div>

<div id="footer"></div>

</body>

</html>

Sablona je velice jednoducha, oproti beznemu HTML obsahuje tri zajımave

znacky.

25

Page 33: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Znacka {% if map %}{% endif %} uvozuje blok, ktery bude zobrazen,

v tomto prıpade spıse vykonan, pokud sablone bude predan parametr map a

nebude mıt hodnotu False.

Druha znacka {% include "map.html"%} naimportuje dalsı HTML doku-

ment, ktery se vlozı presne na mısto teto znacky.

Poslednı zajımava znacka {% block contetnt %}{% end block %} je

podobna znacce {% include %}. Tato znacka je nejspıs tou nejdulezitejsı,

nebot’ ona je tım, co dela sablonovacı system Djanga tolik efektivnı.

Jak je psano v sekci 2.4.8 na strane 13 pohledy mohou vracet sablony a

data, ktera budou v sablone zpracovany. V nasem prıpade tedy nevracıme

sablonu base.html, ale sablonu jinou, ktera base.html rozsırı.

Ukazkovy prıklad takoveto rozsirujıcı sablony:

{% extends "base.html" %}

{% block contetnt %}

Toto bude obsah stranky.

{% end block %}

Dalsı odlisnostı od znacky {% include %} je, v prıpade ze nenı uvedeny

{% block contetnt %}{% end block %} v rozsirujıcı sablone, je pouzit text

uvnitr znacky. V ukazkovem prıklade, pokud by nebyl uveden {% block

contetnt %}{% end block %} bylo by zobrazeno ”Hello world!”, my vsak

tento blok mame uveden, tudız bude zobrazeno ”Toto bude obsah stranky.”.

V prıkladu si jeste povsimneme znacky {% extends "base.html"%},

ktera je tou rozsirujıcı znackou a v nasem prıpade rozsiruje aktualnı sablonu

o sablonu base.html.

Na zaver, jen pro uplnost, je nutno zmınit znacku {% for item in

list %}{% endfor %}, ktera vytvarı cyklus for (opakuje kod, ktery je uve-

den v bloku) pres vsechny polozky v promenne, v nasem prıpade v promenne

list.

V Djangu je mozne pouzıt mnozstvı dalsıch znacek, jejich popis by vsak

presahoval rozsah teto prace. Navıc ve webove aplikaci Stopar nebyly tak

casto pouzıvany. Pokud by ctenare zajımaly, je mozne jejich prehled nalezt

na oficialnıch strankach projektu Django1.

1 http://docs.djangoproject.com/en/dev/ref/templates/builtins/

26

Page 34: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

4.2 Databaze

Jak jiz bylo zmıneno, tak aplikace Stopar je napojena na databazi Post-

greSQL, rozsırenou o nadstavbu PostGIS a knihovnu pgRouting. V databazi

pgis stopar je prozatım 24 tabulek, z nichz 13 bylo vytvoreno a je spravovano

automaticky Djangem, respektive systemem. Zbyle byly vytvoreny manualne

na zaklade modelu v jednotlivych aplikacıch a utilitou osm2pgrouting.

Pozn.: O vztahu mezi tabulkami a modely pojednava sekce 2.4.6.

Pro prehlednost zde uvedeme seznam dulezitych tabulek a jejich popis:

• metadatove tabulky:

geometry columns automaticky vytvorena databazovym systemem,

pri vytvarenı databaze s rozsırenım PostGIS. V tabulce jsou ulo-

zeny zaznamy o jednotlivych polıch, ktere obsahujı prostorove

objekty spolu s geometriı techto objektu a souradnicovy system,

ve kterem jsou definovany souradnice.

spatial ref sys stejne jako tabulka geometry columns je i tato ta-

bulka vytvorena systemem, obsahuje vsak data o souradnicovych

systemech, ktere mohou byt pouzity v databazi.

• automaticky vytvorene tabulky:

auth user obsahuje informace tykajıcı se jednotlivych uzivatelu (jme-

no, heslo, email, poslednı prihlasenı).

auth permission prirazuje jednotlivym objektum prava pridavat, me-

nit a mazat ostatnı objekty.

django admin log zaznamenava veskerou aktivitu uzivatelu pres we-

bove administracnı rozhranı.

django comments uklada vsechny komentare s dalsımi informacemi

jako kdo, kdy a z jake IP adresy komentar vytvoril a k jakemu

objektu patrı.

django comment flags obsahuje flagy prirazene k jednotlivym ko-

mentarum.

django content type obsahuje metadata (jmeno, aplikace, model) o

vsech objektech ulozenych v databazi.

27

Page 35: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

django session uklada data, klıce a expiraci vsech relacı.

• manualne vytvorene tabulky:

accounts profile rozsiruje objekt User o dalsı atributy – popis a fo-

tografie.

points kraje je tabulka vsech kraju v CR. Jsou v nı ulozeny zakladnı

informace jako pocet obyvatel, nazev a hlavne geometrie (poly-

gony predstavujıcı jednotlive kraje).

points points skladuje body (mısta), ktera vkladajı do aplikace uziva-

tele. Do tabulky je ukladana geometrie, nazev, typ mısta a doplnu-

jıcı informace.

points pointsimages rozsiruje points points o moznost vkladanı fo-

tografiı k bodum.

points worldborders je tabulka statu sveta. A stejne jako tabulka

points kraje obsahuje zakladnı informace o statech a geometrii.

rides cities je stejnym typem jako points kraje, ale obsahuje data

o vsech mestech v CR.

rides rides uklada spolujızdy pridane uzivateli. Do tabulky je ukla-

dana geometrie, datum jızdy, typ, pocet osob a dalsı informace.

• tabulky pro pgRouting:

rides roads data v teto tabulce jsou polylinie, ktere ve vysledku

predstavujı celou silnicnı sıt’ v CR. V tabulce je definovano, krome

geometrie, i ohodnocenı liniı, jejich typ a dalsı pomocne infor-

mace, usnadnujıcı rychlejsı hledanı tras.

rides vertices uklada geometrii vrcholovych bodu liniı silnicnı sıte.

4.3 Aplikace accounts

Aplikace accounts je tou hlavnı aplikacı. Umoznuje navstevnıkum regi-

straci a vytvorenı vlastnıho profilu. Spolu s tımto je samozrejme umozneno

uzivatelum profily menit a nahlızet na profily ostatnıch. Zaroven jsou na

uzivatelske profily navazany ostatnı aplikace. Pridavat a editovat zajmove

body a spolujızdy je mozne jen registrovanym uzivatelum.

28

Page 36: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

4.3.1 Modely

Aplikace accounts definuje pouze jeden model – Profile, ale vyuzıva i

model druhy – User, ktery je definovany v django.contrib.auth.models.

Oba modely jsou propojeny vztahem 1:1.

class Profile(models.Model):

user = models.OneToOneField(User, verbose_name=’Uzivatel’)

info = models.TextField(’Informace’, blank=True)

picture = ThumbnailField(’avatar’,upload_to=’users/’,

blank=True,

size=(1980,1020))

4.3.2 Funkce

Zde bude uveden pouze seznam definovanych funkcı a jejich strucny popis,

prıpadne zajımave ukazky kodu.

index(request, sent): obstarava pozadavky smerujıcı na korenovy adresar

projektu Stopar. V prıpade metody GET rozlisuje, zda je uzivatel

prihlasen a pak mu zobrazı jeho uvodnı stranku, nebo pokud nenı

prihlasen, tak vracı hlavnı stranku aplikace s prihlasovacım a regi-

stracnım formularem. V prıpade POST metody, rozlisuje POST for-

mulare s prihlasenım a vykonava prihlasovacı proces nebo POST regi-

stracnıho formulare a vykonava registracnı proces.

profile(request): stara se o uzivatelske profily. Pokud je pozadavkemmeto-

da GET, tak vracı profilovy formular uzivatele s predvyplnenymi hod-

notami, pokud je pozadavkem metoda POST, tak ulozı hodnoty pro

uzivatelsky profil.

handle uploaded image(file,username,image name): uklada profilove

obrazky jednotlivych uzivatelu.

user(request,user id): stara se o zobrazovanı profilu ostatnıch uzivatelu.

Dale jsou v aplikaci accounts rozsıreny funkce password change a

password change done z django.contrib.auth.views tak, aby posılaly

nektere dodatecne promenne do sablon.

29

Page 37: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Ukazkova cast funkce index:

def index(request):

if request.method == ’POST’: # POST

if request.POST[’send’]==’1’: # POST is login

form = SimpleForm(request.POST)

if form.is_valid():

username = form.cleaned_data[’username’]

password = form.cleaned_data[’password’]

user = authenticate(username=username, password=password)

if user is not None: # Login succesfull

if user.is_active:

login(request, user)

return render_to_response(’login_done.html’)

Ukazka zahrnuje cast kodu, ktera se stara o prihlasenı uzivatele. Nutno

podotknout, ze funkce authenticate a login jsou definovane v jednom z

modulu Djanga, tudız vlastnı prace na slozitem procesu, jako prihlasovanı

uzivatelu do aplikace, je v prıpade pouzitı tohoto frameworku minimalnı.

4.4 Aplikace points

Aplikace points umoznuje vsem registrovanym uzivatelum ukladanı zajımavych

bodu/mıst po celem svete (na cele mape). Aplikace se stara o jejich ulozenı,

editaci, prıpadne smazanı a zaroven umoznuje jejich prohledavanı.

Zalozit zajmovy bod muze jen registrovany uzivatel. Pri zalozenı bodu

je nutne vyplnit orientacnı nazev bodu, vybrat kategorii bodu z nekolika

moznostı (ubytovanı, obcerstvenı, prırodnı pamatky, historicke pamatky,

stopovanı a ostatnı) a vyplnit souradnice nebo kliknout do mapy pro auto-

maticke vyplnenı souradnic. Dale je mozne pridat podrobnejsı popis bodu

a pridavat k nemu fotografie. Pri pridanı bodu do databaze se automaticky

urcı stat, v prıpade Ceske republiky i kraj, ve kterem bod lezı.

Registrovanym i neregistrovanym uzivatelum je umozneno vyhledavat

30

Page 38: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

v seznamu bodu. Vyhledavanı je umozneno na zaklade polohy, prıpadne

kategorie, ktera byla bodu prirazena.

Uzivatele mohou editovat a mazat jen vlastnı zajmove body.

4.4.1 Modely

V souboru models.py jsou definovany 4 modely. Modely Kraje a WorldBorders

byly automaticky vytvoreny z dat, respektive naplneny vektorovymi daty

ve formatu ESRI Shapefile. Zbyle dva modely Points a PointsImages byly

nove zadefinovany a jsou plneny samotnymi uzivateli.

Ukazka definice modelu Points a PointsImages:

ALL_CHOICES = (

(1,’ubytovanı’),(2,’obcerstvenı’),(3,’prırodnı pamatky’),

(4,’historicke pamatky’),(5,’stopovanı’),(6,’ostatnı’),)

class Points(models.Model):

label = models.CharField(’nazev’, max_length=100)

category = models.PositiveSmallIntegerField(’kategorie’,

choices=ALL_CHOICES)

description = models.TextField(’popis’, blank=True)

lon = models.FloatField(’zemepisna delka (lon)’)

lat = models.FloatField(’zemepisna sırka (lat)’)

kraj = models.ForeignKey(’Kraje’, verbose_name=’Kraj’,

blank=True)

state = models.ForeignKey(’WorldBorders’,

verbose_name=’Zeme’,

blank=True)

geom = models.PointField(srid=4326)

user = models.ForeignKey(User)

objects = models.GeoManager()

class PointsImages(models.Model):

point = models.ForeignKey(’Points’, verbose_name=’Bod’)

image = ThumbnailField(’Obrazek’, upload_to=’points/’,

size=(1980,1020))

Pozn.: Vıce informacı o datech ulozenych v tabulkach je v sekci 4.2.

31

Page 39: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

4.4.2 Funkce

V aplikaci points jsou pouzıvany tyto funkce:

show point(request, point id): je prosta funkce, ktera zobrazı podro-

bnosti jednoho bodu.

add point(request): stara se o pridavanı bodu. V prıpade metody GET je

zobrazen pouze formular pro pridanı bodu a v prıpade metody POST

(formular je odeslan) je bod pridan do databaze.

edit point(request, point id): je velice podobna funkci add point s jedi-

nym rozdılem, ze upravuje jiz pridane body.

delete(request, point id): maze body z databaze.

all(request): obstarava vyhledavanı bodu na zaklade parametru odeslanych

ve vyhledavacım formulari.

handle uploaded image(point id,image name,file): uklada obrazky k

jednotlivym bodum.

4.5 Aplikace rides

Poslednı aplikacı v projektu Stopar je aplikace rides, ktera se stara o spravu

spolujızd. Aplikace je svymi funkcemi podobna aplikaci points. Umoznuje

pridavanı spolujızd, jejich editaci, vyhledavanı a mazanı. Vsechny cinnosti,

krome vyhledavanı, jsou podmıneny prihlasenım k uzivatelskemu uctu.

Aplikace vyuzıva dat z OpenStreetMap [3.5], konkretne jen liniovych

dat z uzemı Ceske republiky, z toho samozrejme plyne omezenı vyhledanı

trasy jen pro CR. Toto omezenı bylo zavedeno z duvodu nızke kapacity disku

na serveru josef. Do budoucna je v planu rozsırit aplikaci minimalne o data

z cele Evropy.

Uzivatel si muze vyhledat trasu na zaklade dvou typu hodnot. Prvnım

typem jsou GPS souradnice, ktere napıse do polı, nebo se automaticky vlozı

po kliknutı do mapy. Druhym typem je nazev mesta v CR. V prvnım prıpade

se za pocatek, respektive konec trasy, urcı nejblizsı silnice. V druhem prıpade

si aplikace sama urcı centroid polygonu mesta a pote nejblizsı silnici.

32

Page 40: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Trasu je mozne volit z mısta do mısta, prıpadne volit bod/mesto, pres

ktere ma vest. Dale je potreba volit mezi trasou nejrychlejsı a nejkratsı.

V obou prıpadech je pro vypocet trasy pouzit algoritmus Shooting star.

Nejrychlejsı trasa je urcena klasicky jako podıl drahy ku maximalnı

povolene (mozne) rychlosti na silnici. Kvuli teto funkcionalite musela byt

silnicnı sıt’ rychlostne ohodnocena v zavislosti na typu silnice. Zde je potreba

pripomenout, ze OSM je komunitnı projekt, tudız je presnost dat zavisla na

uzivatelıch a nekdy jsou vysledky viditelne nepresne.

Pri ulozenı spolujızdy do databaze je potreba jeste zvolit datum cesty,

pocet osob a typ cesty, neboli jestli hledame spolujezdce, ridice. Zaroven je

zde moznost pridat dalsı informace k jızde.

4.5.1 Modely

Aplikace rides zavadı do projektu Stopar 4 modely:

Cities: byl vytvoren a naplnen vektorovymi daty ve formatu ESRI Shape-

file.

Roads: vznikl na zaklade tabulky vytvorene utilitou osm2pgrouting.

Vertices: vznikl stejne jako model Roads.

Rides: nove definovany model pro ukladanı spolujızd.

Ukazka definice modelu Rides:

class Rides(models.Model):

city_from = models.CharField(’odkud’, max_length=35,)

city_cross = models.CharField(’prez’,max_length=35,blank=True)

city_to = models.CharField(’kam’,max_length=35, )

gps_from = models.PointField(srid=4326)

gps_cross = models.PointField(srid=4326,blank=True)

gps_to = models.PointField(srid=4326)

fp = models.BooleanField()

cp = models.BooleanField(blank=True)

tp = models.BooleanField()

trace = models.TextField()

mode = models.CharField(max_length=10, choices=WAY_CHOICES)

date = models.DateField(’datum’)

33

Page 41: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

count = models.PositiveSmallIntegerField("pocet mıst",

choices=COUNT_CHOICES)

description = models.TextField("dalsı info",blank=True)

role = models.PositiveSmallIntegerField("role",

choices=ROLE_CHOICES,

max_length=15)

geom = models.GeometryCollectionField(srid=4326)

user = models.ForeignKey(User)

objects = models.GeoManager()

class Meta:

verbose_name = ’trasa’

verbose_name_plural = ’trasy’

Pozn.: Vıce informacı o datech ulozenych v tabulkach je v sekci 4.2.

4.5.2 Funkce

V aplikaci rides jsou definovany 4 hlavnı funkce (show ride, add, edit,

delete, all), ktere majı naprosto stejnou funkcionalitu jako jim odpovıdajıcı

funkce v aplikaci points uvedene v 4.4.2.

Dale je v souboru views.py definovano nekolik pomocnych funkcı na

vyhledavanı mest z GPS souradnic, nejblizsıch silnic atd.

Cast programu, ktera obstarava vyhledanı nejkratsı trasy:

def add(request):

select1 = ... # shortest path SELECT

select2 = ... # fastest path SELECT

if request.method == ’POST’:

form = RidesForm(request.POST)

if form.is_valid():

mode = form.cleaned_data[’fastest’]

if mode == ’fastest’:

select = select2

else:

select = select1

34

Page 42: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

point1 = getPoint(form.cleaned_data[’city_from’])

start_node = getRoad(point1)

point2 = getPoint(form.cleaned_data[’city_to’])

target_node = getRoad(point2)

cursor = connection.cursor()

cursor.execute(select % (start_node.id, target_node.id))

ways = cursor.fetchall()

ways.pop()

list = (getList(ways))

ride = Roads.objects.filter(id__in=list)

return render_to_response(’rides_add.html’, {"ride":ride})

Konec funkce, ktera spravuje vyhledavanı spolujızd:

# role filter

role = form.cleaned_data[’role’]

rides = rides.filter(role=role)

# count filter

count = form.cleaned_data[’count’]

if count>0:

if role==1:

rides.filter(count__lte=count)

else:

rides = rides.filter(count__gte=count)

# date filter

day = form.cleaned_data[’day’]

if day != ’0’:

rides = rides.filter(date__day=day)

month = form.cleaned_data[’month’]

if month != ’0’:

rides = rides.filter(date__month=month)

35

Page 43: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

year = form.cleaned_data[’year’]

if year != ’0’:

rides = rides.filter(date__year=year)

return render_to_response(’rides_all.html’,

{’rides’:rides})

4.6 Planovana funkcionalita

Bohuzel v ramci bakalarske prace nebylo moc casu. Stavajıcı aplikace je sice

funkcnı ve vsech smerech, ktere byly na zacatku vytyceny, ale bohuzel zatım

neprinası neco zcela noveho, co by presvedcilo vetsı mnozstvı lidı k jejımu

uzıvanı. Aplikace zaroven nenı dostatecne uzivatelsky prıvetiva, aby obstala

v dnesnıch pozadavcıch uzivatelu.

Co se tyce uzivatelske prıvetivosti, tak je zde neustale co zlepsovat.

Cılem je usnadnovat uzivatelum ovladanı aplikace tak, aby byla rychlejsı, in-

tuitivnejsı a prehlednejsı. V budoucnu by tedy bylo dobre rozsırit funkciona-

litu aplikace o interaktivnejsı vyhledavanı tras, spıse tedy editaci, kdy uziva-

tel bude moci prımo editovat trasu na mape pomocı mysi. Rovnez by bylo

vhodne predelat celkove vzhled aplikace. Nynı je sice aplikace prehledna,

ale nenı prılis lıbiva. Bohuzel tento ukol je spıse pro profesionalnı grafiky,

respektive web-designery.

Jak bylo zmıneno na zacatku teto kapitoly, z pohledu funkcionality je

v planu pridat podporu pro vkladanı tras, naprıklad cyklotras nebo tras

pro koleckove brusle, dale moznost vkladat cele zajezdy, ke kterym si bude

uzivatel moci pridavat cestovnı zapisky, fotky a dalsı veci. Vse by melo byt

sdıleno mezi uzivateli, kterı si budou moci jednotlive prvky komentovat a

hodnotit.

Dale by bylo vhodne rozsırit aplikaci o funkce, ktere by exportovaly data

vlozena uzivateli a ta by se nasledne vkladala do databaze OSM. Tımto by

projekt Stopar pomohl v rozsirovanı komunitnıho projektu OSM, kteremu

vdecı za zakladnı data.

Na zaver jen zmınım veci, ktere by bylo dobre implementovat. Je to

naprıklad lokalizace do vıce jazyku, pridanı vıce mapovych vrstev (naprıklad

Google Maps) nebo napojenı na dalsı projekty (Facebook, Picasa, Foursquare).

36

Page 44: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Kapitola 5

Zaver

Cılem teto prace bylo navrhnout a implementovat webovou aplikaci pro

stopare s pouzitım frameworku Django. Cıl byl vıcemene splnen uspesne,

aplikace byla naprogramovana, je funkcnı a bezı na serveru josef.fsv.cvut.cz.

Jejı pouzitelnost pro sirsı verejnost je jiz otazkou diskuze.

Aplikace Stopar v soucasne podobe umoznuje navstevnıkum moznost

registrace a vytvorenı vlastnıho uzivatelskeho profilu, na ktery je navazano

nasledne ukladanı zajımavych bodu a take vyhledavanı a ukladanı tras,

respektive spolujızd at’ z pohledu ridice, tak z pohledu spolujezdce. Nere-

gistrovanı uzivatele mohou pouze prohlızet profily uzivatelu, jednotlive body

a spolujızdy.

Framework Django, ktery byl pouzit pri tvorbe aplikace, je postaveny na

programovacım jazyku Python a dokaze pracovat s nekolika databazovymi

systemy. Dale byla pouzita nadstavba GeoDjango, ktera rozsiruje framework

o moznost prace s geoprostorovymi daty. Framework tak integruje vsechny

nastroje potrebne k ukladanı, zpracovanı a zobrazovanı geoprostorovych dat

a dıky dodrzovanı standardu je jeho propojenı s nastroji jako OpenLayers

velice snadne.

Django vsak nenı dokonale. Jako nevyhody Djanga bych zmınil hlavne

tezkopadnou praci s grafickym prizpusobenım formularovych polı a take s

javascriptem. Mezi nejvetsı prednosti Djanga patrı jednotny a optimalizo-

vany prıstup k databazi, komplexnı sprava uzivatelskych uctu a efektivnı

sablonovacı system.

Pouzitım frameworku Django byla prace znacne ulehcena. Programator

se naucı pracovat s frameworkem pomerne rychle, hlavne dıky mnozstvı

37

Page 45: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

prıkladu, ktere jsou k dispozici na webu a dıky podrobne a prehledne doku-

mentaci, ktera je k nahlednutı na oficialnıch strankach projektu. Vyhodou

je take siroka komunita ochotnych uzivatelu, kterı radi poradı s jakymkoliv

problemem.

38

Page 46: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Seznam pouzitych zdroju

[1] DVORAK, Pavel. Hrajeme si s Djangem [online]. 2009 [cit. 2010-04-20].

Dostupne z WWW:

http://zdrojak.root.cz/serialy/hrajeme-si-s-djangem/.

[2] Georepublic [online]. 2010 [cit. 2010-05-01]. Georepublic - pgRouting.

Dostupne z WWW:

http://georepublic.de/en/projects/pgrouting/.

[3] HOLOVATY, Adrian; KAPLAN-MOSS, Jacob. The Definitive Guide

to Django : Web Development Done Right. 2nd edition. 2009. 499 s.

[4] SVEC Jan, Ucebnice jazyka Python. 2002. 90 s.

[5] Hunt, Andrew; THOMAS, David. The Pragmatic Programmer. 1999.

320 s.

[6] Oficialnı dokumentace projektu Django [online]. 2010 [cit. 2010-04-15].

Dostupne z WWW:

http://docs.djangoproject.com/en/dev/.

Webove odkazy:

[7] Webovy portal Excess

http://excess.org/

[8] Javascriptova knihovna OpenLayers

http://openlayers.org/

[9] Komunitnı projekt OpenStreetMap

http://www.openstreetmap.org/

39

Page 47: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

[10] Projekt pgRouting

http://pgrouting.postlbs.org/

[11] Projekt PostGIS

http://postgis.refractions.net/

[12] Databazovy system PostgreSQL

http://www.postgresql.org/

[13] Programovacı jazyk Python

http://www.python.org/

40

Page 48: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Prıloha A

Ukazky vzhledu webove

aplikace Stopar

41

Page 49: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Obrazek A.1: Ukazka uvodnı stranky.

42

Page 50: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Obrazek A.2: Ukazka stranky s podrobnostmi o bodu.

43

Page 51: Vytvoren´ı webové aplikace pro autostop pomoc´ı frameworku Django

Obrazek A.3: Ukazka stranky s podrobnostmi o spolujızde.

44


Recommended