ˇ 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 ´ RSK ˇ A ´ PRACE ´ BAKALA
Vypracoval: Vedouc´ı pr´ace: Rok:
Luboˇs Truhl´aˇr Ing. Martin Landa 2010
Pˇred sv´az´an´ım m´ısto t´ehle str´anky vloˇz´ıte zad´an´ı pr´ace s podpisem dˇekana (bude to jedin´ y oboustrann´ y list ve Vaˇs´ı pr´aci) !!!!
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem svou bakal´aˇrskou pr´aci vypracoval samostatnˇe a pouˇzil jsem pouze podklady (literaturu, projekty, SW atd.) uveden´e v pˇriloˇzen´em seznamu.
V Kralupech nad Vltavou dne 13.5.2010
........................................ Luboˇs Truhl´ aˇr
Podˇ ekov´ an´ı Dˇekuji Ing. Martinu Landovi za jeho veden´ı pˇri tvorbˇe t´eto bakal´aˇrsk´e pr´ace, za jeho podnˇety a pˇripom´ınky, kter´e ji obohatily, a za jeho pomoc pˇri tvorbˇe webov´e aplikace. D´ ale, jak je dobr´ ym zvykem, dˇekuji sv´e rodinˇe a pˇr´atel˚ um, kteˇr´ı mi poskytli nezbytnou podporu bˇehem cel´eho studia. Luboˇs Truhl´ aˇr
N´ azev pr´ ace: Vytvoˇ ren´ı webov´ e aplikace pro autostop pomoc´ı frameworku Django Autor: Luboˇs Truhl´ aˇr Obor: Druh pr´ ace:
Geoinformatika Bakal´aˇrsk´a pr´ace
Vedouc´ı pr´ ace:
Ing. Martin Landa Katedra mapov´an´ı a kartografie, Fakulta stavebn´ı, ˇ e vysok´e uˇcen´ı technick´e v Praze Cesk´ —
Konzultant:
Abstrakt: Tato bakal´aˇrsk´a pr´ace je zamˇeˇrena na sezn´ amen´ı ˇcten´aˇre s webov´ ym frameworkem Django, vˇcetnˇe praktick´e uk´azky jeho pouˇzit´ı. Vˇenuje se obecn´emu popisu frameworku Django, od jeho vzniku, aˇz po podrobn´ y popis struktury webov´e aplikace. D´ ale je pˇredstavena vlastn´ı webov´a aplikace, kter´ a vznikla pomoc´ı tohoto frameworku. D´ale se tato pr´ace snaˇz´ı uk´azat vz´ ajemn´e propojen´ı Djanga a ostatn´ıch n´astroj˚ u pouˇzit´ ych k vytvoˇren´ı webov´e aplikace. Kl´ıˇcov´ a slova:
Django, framework, Python, GeoDjango
Title: Web application for hitchhiking based on Django framework Author:
Luboˇs Truhl´ aˇr
Abstract: This bachelor work is focused on introducing Django framework to the readers, including practical example of its usage. The work applies on general description of the framework, from the begining of the project to the detail definition of web application structure. Additionally the work introduces new web application which was created mainly by this framework. It also presents the interconnection between Django and other tools used in the web application. Key words:
Django, framework, Python, GeoDjango
Obsah ´ 1 Uvod
1
2 Webov´ y framework Django 2.1 Historie projektu . . . . . . . . . 2.2 Z´akladn´ı vlastnosti . . . . . . . . 2.2.1 Don’t repeat yourself . . . 2.2.2 Model-View-Controller . . 2.2.3 Object-Relation Mapping 2.2.4 Dalˇs´ı n´astroje . . . . . . . 2.3 Aplikace Django . . . . . . . . . 2.3.1 Instalace . . . . . . . . . . 2.3.2 Datab´ aze . . . . . . . . . 2.3.3 Webov´ y server . . . . . . 2.3.4 GeoDjango . . . . . . . . 2.4 Struktura projektu v Djangu . . 2.4.1 Projekt . . . . . . . . . . 2.4.2 Spr´ava projektu . . . . . 2.4.3 Dostupn´e URL . . . . . . 2.4.4 Nastaven´ı projektu . . . . 2.4.5 Aplikace . . . . . . . . . . 2.4.6 Modely . . . . . . . . . . 2.4.7 Formul´ aˇre . . . . . . . . . 2.4.8 Pohledy . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
3 4 5 5 6 6 6 7 7 8 8 9 10 10 11 11 11 12 12 13 13
3 Ostatn´ı n´ astroje 3.1 PostgreSQL . . 3.2 PostGIS . . . . 3.3 PgRouting . . . 3.4 OpenLayers . . 3.5 OpenStreetMap 3.6 Python . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
15 15 17 18 19 20 21
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
vi
. . . . . .
. . . . . .
4 Webov´ a aplikace Stopaˇ r 4.1 Popis projektu . . . . . 4.1.1 Vzhled aplikace . ˇ 4.1.2 Sablony . . . . . 4.2 Datab´ aze . . . . . . . . 4.3 Aplikace accounts . . . . 4.3.1 Modely . . . . . 4.3.2 Funkce . . . . . . 4.4 Aplikace points . . . . . 4.4.1 Modely . . . . . 4.4.2 Funkce . . . . . . 4.5 Aplikace rides . . . . . . 4.5.1 Modely . . . . . 4.5.2 Funkce . . . . . . 4.6 Pl´ anovan´ a funkcionalita
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
22 23 24 25 27 28 29 29 30 31 32 32 33 34 36
5 Z´ avˇ er
37
Seznam pouˇ zit´ ych zdroj˚ u
39
A Uk´ azky vzhledu webov´ e aplikace Stopaˇ r Obsah
41
vii
Kapitola 1
´ Uvod Internet se stal nepˇredstavitelnˇe obl´ıbenou a v dneˇsn´ı dobˇe naprosto nepostradatelnou souˇc´ast´ı naˇseho svˇeta. Tato celosvˇetov´a poˇc´ıtaˇcov´a s´ıt’ m˚ uˇze slouˇzit k r˚ uzn´ ym u ´ˇcel˚ um, od sd´ılen´ ych dat mezi poboˇckami jedn´e firmy na r˚ uzn´ ych kontinentech, aˇz k obyˇcejn´emu pos´ıl´an´ı email˚ u mezi dvˇema zn´ am´ ymi v jedn´e m´ıstnosti. Jedno je vˇsak pro vˇsechny u ´ˇcely spoleˇcn´e. A to je v´ ymˇena informac´ı, v poˇc´ıtaˇcov´e terminologii mluv´ıme o v´ ymˇenˇe dat. V dneˇsn´ı dobˇe naprosto pˇrev´ aˇzila komunikace na internetu pˇres syst´em World Wide Web, zn´ am´ y sp´ıˇse pod zkratkou ”web”. Do tohoto syst´emu patˇr´ı webov´ y prohl´ıˇzeˇc a webov´ y server. Vˇetˇsinˇe uˇzivatel˚ u internetu, respektive webu, pojem internet a web spl´ yvaj´ı v jedno. Je to jednak omluvitelnou neznalost´ı uˇzivatel˚ u, a jednak tak´e d´ıky jeho masivn´ımu rozˇs´ıˇren´ı, nebot’ vˇetˇsina tˇechto uˇzivatel˚ u ani jin´e syst´emy nezn´a a nepotˇrebuje zn´ at. World Wide Web jim umoˇzn ˇuje vˇse, co v dneˇsn´ı dobˇe na internetu potˇrebuj´ı. Zpoˇc´atku web slouˇzil ˇcistˇe k prezenci statick´ ych informac´ı o spoleˇcnostech a organizac´ıch. Ale s postupem ˇcasu a rozvojem technologi´ı se z nˇej stal n´astroj pro uˇzivatele ke sd´ılen´ı informac´ı. V´ yvoj webu smˇeˇruje k webov´ ym aplikac´ım, coˇz jsou klasick´e desktopov´e aplikace, ale dostupn´e a pouˇziteln´e pˇres webov´ y prohl´ıˇzeˇc. Vˇsechny zp˚ usoby vyuˇzit´ı webu stavˇej´ı na klasick´ ych webov´ ych str´ank´ach a znalost tvorby takov´ ychto str´anek dnes patˇr´ı ke vzdˇel´ an´ı na vˇetˇsinˇe ˇskol´ach zamˇeˇren´ ych na informaˇcn´ı technologie. Toto vˇse zp˚ usobilo vznik mnoha n´astroj˚ u k usnadnˇen´ı tvorby webov´ ych str´anek. A jedn´ım z tˇechto n´astroj˚ u je framework Django. C´ılem t´eto pr´ace bylo pouˇz´ıt framework Django, ve spojen´ı s dalˇs´ımi
1
open-source programy, pro vytvoˇren´ı uˇzivatelsky pˇr´ıvˇetiv´e webov´e aplikace pro stopaˇre a turisty. ˇ e republice, jejich Aplikace Stopaˇr umoˇzn ˇuje vyhled´ av´an´ı tras v Cesk´ ukl´ ad´ an´ı do datab´ aze a sd´ılen´ı s ostatn´ımi uˇzivateli, stejnˇe tak sd´ılen´ı jin´ ych zaj´ımav´ ych m´ıst. Pro vyuˇzit´ı t´eto aplikace je t´emˇeˇr nutnost´ı registrace nov´eho uˇzivatele, t´ım je zpˇr´ıstupnˇeno ukl´ad´ an´ı vlastn´ıch dat. Vˇetˇsina podobn´ ych webov´ ych aplikac´ı umoˇzn ˇuje ukl´ ad´ an´ı do datab´ aze pouze jedn´e skupiny prvk˚ u (body respektive trasy) a nenab´ız´ı vz´ ajemnou interakci uˇzivatele s mapou. Smyslem tvorby t´eto aplikace bylo propojen´ı klasick´e datab´ aze pro stopaˇre (viz http://www.spolujizda.cz) s mapou a sd´ılen´ı dalˇs´ıch zaj´ımav´ ych m´ıst mezi uˇzivateli – turisty. Framework Django byl zvolen z d˚ uvodu jeho schopnosti efektivnˇe pracovat s geoprostorov´ ymi daty d´ıky nadstavbˇe GeoDjango a tak´e kv˚ uli svobodn´e licenci BSD, pod kterou je vyv´ıjen. Je potˇreba zm´ınit, ˇze i v pˇr´ıpadˇe pouˇzit´ı tohoto frameworku nen´ı program´ ator uˇsetˇren nutnosti zn´ at znaˇckovac´ı jazyk HTML1 nebo kask´adov´e styly. Framework mu pouze poskytuje n´astroje pro lepˇs´ı tvorbu. Pod slovem ”lepˇs´ı”je zde m´ınˇeno zejm´ena rychlejˇs´ı a bezpeˇcnˇejˇs´ı.
1
HTML je zkratka pro HyperText Markup Language, coˇz je znaˇckovac´ı jazyk pouˇz´ıvan´ y pro tvorbu webov´ ych str´ anek
2
Kapitola 2
Webov´ y framework Django Tato kapitola ˇcerp´ a pˇredevˇs´ım z informac´ı dostupn´ ych v knize ”The Definitive Guide to Django: Web Development Done Right” [3] a ze seri´ alu o Djangu na serveru root.cz [1]. Kaˇzd´ y program´ ator se dostal do situace, kdy psal stejn´ y kus k´odu ponˇekolik´at´e. Tato situace je nepˇr´ıjemn´ a, nebot’ ˇcas program´atora je pro zamˇestnavatele drah´ y a psan´ı stejn´e vˇeci je pro program´ atora nez´abavn´e. Nav´ıc urˇcitˇe existuje spousta dalˇs´ıch lid´ı, kteˇr´ı stejn´ y nebo podobn´ y probl´em jiˇz ˇreˇsili, a tud´ıˇz je zbyteˇcn´e toto ˇreˇsit znovu. Z tˇechto d˚ uvod˚ u vznikly tzv. ”frameworky”. Jsou to vlastnˇe n´astroje dan´eho programovac´ıho jazyka, kter´e se snaˇz´ı ulehˇcit pr´aci program´ ator˚ um. T´ım, ˇze jsou frameworky zamˇeˇreny pouze na urˇcitou ˇc´ast aplikac´ı, kter´e se s nimi daj´ı vytv´aˇret (napˇr´ıklad webov´e aplikace, ajaxov´e aplikace 1 ), mohou poskytovat velmi pˇresn´e a uˇziteˇcn´e n´astroje. Django framework patˇr´ı do skupiny tzv. webov´ ych framework˚ u. Webov´e frameworky poskytuj´ı hlavnˇe n´astroje a knihovny pro pˇr´ıstup k datab´ azi, ˇsablonovac´ı syst´em webov´ ych str´anek a spr´ avu uˇzivatel˚ u. Z dalˇs´ıch framework˚ u z t´eto skupiny m˚ uˇzeme jmenovat napˇr´ıklad Ruby on Rails, zaloˇzen´ y na programovac´ım jazyku Ruby, nebo Zend postaven´ y na PHP. Django je velmi mocn´ ym n´astrojem, kter´ y m˚ uˇze b´ yt z´akladem mnoha webov´ ych aplikac´ı. Mezi nejvˇetˇs´ı svˇetov´e weby, bˇeˇz´ıc´ı na Djangu, patˇr´ı den´ık washingtonpost.com nebo kulturn´ı web lawrence.com, mezi ˇcesk´ ymi weby je to port´ al zena.cz nebo webexpo.cz. 1
AJAX (asynchronn´ı Javascript a XML) je metoda, kter´ a dˇel´ a webov´e str´ anky interaktivnˇejˇs´ı t´ım, ˇze odes´ıl´ a poˇzadavky na server bez nutnosti znovu-naˇcten´ı webov´e str´ anky.
3
V dneˇsn´ı dobˇe je Django trochu ve st´ınu klasick´ ych redakˇcn´ıch syst´em˚ u a jeho rozˇs´ıˇren´ı br´an´ı mal´ a podpora na stranˇe provozovatel˚ u webhostingu. V´ yvoj Djanga jde kupˇredu hlavnˇe d´ıky aktivn´ım v´ yvoj´aˇr˚ um v komunitˇe a jednou se tˇreba doˇck´ a takov´e obliby jako redakˇcn´ı syst´emy zaloˇzen´e na PHP (Drupal, WordPress). Mezi nejvˇetˇs´ı pˇrednosti Djanga patˇr´ı automaticky generovan´e administraˇcn´ı rozhran´ı, kter´e umoˇzn ˇuje spr´ avu uˇzivatel˚ u syst´emu, spr´avu dat v datab´azi a u ´pravy webov´ ych str´anek. D´ ale je nesm´ırnou v´ yhodou jednotn´ y, optimalizovan´ y a zabezpeˇcen´ y pˇr´ıstup ke vˇsem datab´ az´ım. A na z´avˇer je to propracovan´ y ˇsablonovac´ı syst´em, kter´ y spolehlivˇe zamez´ı opakov´an´ı psan´ı stejn´eho k´odu.
2.1
Historie projektu
Kolem roku 2000 vznikl Web development t´ ym kansask´eho den´ıku Lawrence Journal-World Newspapers, kter´ y se staral o v´ yvoj webov´ ych aplikac´ı. Hlavn´ımi program´ atory tohoto t´ ymu byly Adrian Holovaty a Simon Willison. Starali se o spr´ avu nˇekolika webov´ ych port´ al˚ u tohoto novinov´eho den´ıku. V t´eto dobˇe byli webov´e n´astroje zamˇeˇreny na tvorbu statick´ ych str´anek. Oni vˇsak potˇrebovali n´astroj, kter´ y by umoˇzn ˇoval rychlou zmˇenu, v z´avislosti na nov´ ych ud´alostech, kter´e se odehr´ avaj´ı ve svˇetˇe kaˇzdou minutu. Z tohoto d˚ uvodu zaˇcali vyv´ıjet nov´e n´astroje a aplikace, kter´e by jim tyto moˇznosti poskytly. Kaˇzd´ a aplikace byla nejprve urˇcena pouze webu, pro kter´ y byla vyvinuta. Pozdˇeji vˇsak Adrian a Simon zaˇcali aplikace spojovat a zobecˇ novat, a t´ım vytvoˇrili framework Django. Nen´ı lehk´e urˇcit pˇresnˇe rok vzniku tohoto frameworku, ale pˇredpokl´ ad´ a se, ˇze to byl rok 2003. V tomto roce pr´avˇe doˇslo ke spojen´ı v´ıce aplikac´ı a n´astroj˚ u, pracuj´ıc´ıch spoleˇcnˇe v jednom celku. Framework se d´ale vyv´ıjel v tomto mal´em t´ ymu, do kter´eho jeˇstˇe pˇribyl Jacob Kaplan-Moss. Po dvou letech tento ˇclovˇek rozhodl, ˇze framework je jiˇz pouˇziteln´ y pro ostatn´ı uˇzivatele a uvolnil jej jako open-source pod licenc´ı BSD. Pojmenov´an byl po jazzov´em kytaristovi Django Reinhardtovi 2 . Nyn´ı, po nˇekolika letech v´ yvoje, je v projektu Django zapojeno tis´ıce lid´ı od v´ yvoj´aˇr˚ u z´aklad˚ u frameworku, aˇz po uˇzivatele (v´ yvoj´aˇre webov´ ych aplikac´ı pomoc´ı frameworku). P˚ uvodn´ı dva zakladatel´e Adrian a Simon jsou st´ale zapojeni do projektu a snaˇz´ı 2
Django Reinhardt http://en.wikipedia.org/wiki/Django Reinhardt
4
se organizovat v´ yvoj, ale pˇrev´ aˇzn´ a ˇc´ast k´odu jiˇz poch´az´ı ze spoleˇcn´e pr´ace komunity. Historii Djanga je d˚ uleˇzit´e zn´ at, nebot’ z n´ı plynou dva d˚ uleˇzit´e poznatky. Django prim´arnˇe vzniklo pro zpravodajsk´e webov´e str´anky, a to ho pˇredurˇcilo k tomu, ˇze je vhodn´ y na rychle se mˇen´ıc´ı a obsahovˇe zamˇeˇren´e weby napˇr´ıklad washingtonpost.com. To vˇsak neznamen´ a, ˇze nen´ı vhodn´ y i pro dalˇs´ı typy webov´ ych aplikac´ı. Druh´ ym d˚ uleˇzit´ ym faktorem bylo, ˇze Django vzniklo z profesion´ aln´ıch a prakticky uˇz´ıvan´ ych aplikac´ı a ne jako nˇekter´e projekty vyvinut´e hlavnˇe na akademick´ ych p˚ ud´ach. Tento faktor pˇredurˇcil obl´ıbenost Djanga, nebot’ framework je zamˇeˇren na bˇeˇzn´e a ˇcast´e probl´emy, kter´e se snaˇz´ı efektivnˇe ˇreˇsit.
2.2
Z´ akladn´ı vlastnosti
Django m´ a nˇekolik specifick´ ych vlastnost´ı, kter´e ho ˇcin´ı velmi mocn´ ym a z´aroveˇ n pˇrehledn´ ym n´astrojem k tvorbˇe web˚ u. Obl´ıbenost Djanga spoˇc´ıv´ a v modern´ıch programovac´ım principu DRY (Do not Repeat Yourself), kter´ y se snaˇz´ı minimalizovat opakov´an´ı k´odu. Pˇrehlednost Djanga je d˚ usledkem pˇresnˇe dan´e struktury, kterou by se mˇel, a v´ıcem´enˇe i mus´ı, ˇr´ıdit kaˇzd´ y projekt. Nen´ı zde prostor pro vlastn´ı nastaven´ı struktury projektu, n´azvy a um´ıstˇen´ı konfiguraˇcn´ıch soubor˚ u jsou z vˇetˇs´ı ˇc´asti pevnˇe d´any. To urychluje orientaci v nezn´am´ ych projektech i usnadˇ nuje spolupr´aci pˇri dotazech na pomoc od v´ yvoj´aˇr˚ u. Dalˇs´ı nem´enˇe d˚ uleˇzitou vlastnost´ı Djanga je implementovan´ y n´avrhov´ y vzor MVC (ModelView-Controller). A naposled nesm´ıme zapomenout na otevˇren´ y zdrojov´ y k´od, d´ıky ˇcemuˇz mohou do projektu pˇrisp´ıvat lid´e z cel´eho svˇeta.
2.2.1
DRY
”Pragmatick´y princip DRY (Don’t Repeat Yourself ) n´ am ˇr´ık´ a, ˇze kaˇzd´ a d´ılˇc´ı znalost mus´ı m´ıt v syst´emu jedinou, jednoznaˇcnou, smˇerodatnou reprezentaci. Znamen´ a to, ˇze se n´ as Django snaˇz´ı pˇrimˇet k takov´emu rozvrˇzen´ı pr´ ace, v nˇemˇz se zamez´ı rutinn´ımu opakov´ an´ı k´ odu. Bohatˇe se vyuˇz´ıv´ a vlastnost´ı objektovˇe orientovan´eho programov´ an´ı a automatick´eho generov´ an´ı k´ odu.” [Dvoˇr´ ak Pavel, 2009][1]
5
2.2.2
MVC
Model-View-Controller je asi nejvyuˇz´ıvanˇejˇs´ı n´avrhov´ y vzor v souˇcasn´ ych modern´ıch frameworc´ıch. Django jej implementuje pomoc´ı MTV (Modelˇ Template-View), pˇreloˇzeno do ˇceˇstiny ”Model-Pohled-Sablona”. Principem tohoto vzoru je oddˇelit vlastn´ı definici dat jako datab´ azov´ ych model˚ u, definovan´ ych pomoc´ı Pythonovsk´ ych tˇr´ıd, zpracov´an´ı dat r˚ uzn´ ymi, pˇredem definovan´ ymi pohledy, de facto Pythonovsk´ ymi funkcemi a v´ yslednou prezentaci dat pomoc´ı modifikovateln´ ych Django ˇsablon do podoby webov´ ych str´anek.
2.2.3
ORM
Object-Relation Mapping je objektov´ y pˇr´ıstup k datab´ azi. Django vyuˇz´ıv´ a Pythonovsk´ ych objekt˚ u a jeho vlastn´ıch funkc´ı k automatizovan´emu generov´an´ı SQL
3
dotaz˚ u. V´ yhodou tohoto pˇr´ıstupu je fakt, ˇze uˇzivatel se ne-
mus´ı starat o vlastn´ı druh datab´ aze. Django samo o sobˇe podporuje vˇsechny bˇeˇznˇe dostupn´e a pouˇz´ıvan´e datab´ aze od SQLite, aˇz k Oracle. Jak je zn´ amo, tak SQL dotazy se datab´ aze od datab´ aze liˇs´ı. Z tohoto d˚ uvodu je tento pˇr´ıstup velice efektivn´ı. Z´aroveˇ n automaticky generovan´e dotazy jsou optimalizovan´e a chr´anˇen´e proti u ´tok˚ um metodou SQL injections. D´ ale je nutn´e zm´ınit, ˇze Django s t´ımto principem implementovalo takzvanou ”l´ınou”SQL, coˇz znamen´a, ˇze odpov´ıdaj´ıc´ı si SQL dotazy jsou spojov´any do jednoho dotazu, a nav´ıc je tento dotaz proveden aˇz ve chv´ıli, kdy se pˇristupuje k vlastn´ım dat˚ um.
2.2.4
Dalˇ s´ı n´ astroje
Django pˇrin´ aˇs´ı uˇzivatel˚ um, kromˇe v´ yˇse zm´ınˇen´ ych vlastnost´ı, dalˇs´ı praktick´e n´astroje usnadˇ nuj´ıc´ı provoz webov´eho serveru a tvorbu, administraci a optimalizaci jednotliv´ ych webov´ ych projekt˚ u. Tyto vlastnosti budou zm´ınˇeny pouze okrajovˇe, nebot’ jejich rozbor by pˇrevyˇsoval obsah t´eto pr´ace, pˇr´ıpadnˇe by spadal sp´ıˇse do program´ atorsk´e ˇc´asti o samotn´em frameworku: • automaticky generovan´e administraˇcn´ı rozhran´ı, • optimalizace pomoc´ı keˇsov´an´ı, 3
SQL je zkratka pro Structured Query Language, coˇz je jazyk pouˇz´ıvan´ y pro spr´ avu datab´ azov´ ych syst´em˚ u.
6
• generov´an´ı formul´ aˇr˚ u na z´akladˇe definovan´ ych model˚ u, • poloautomatick´a validace formul´ aˇr˚ u, • integrovan´ y webov´ y server, • podpora ”hezk´ ych”URL, • snadn´ a lokalizace projektu, • technologie z´asuvn´ ych model˚ u.
2.3
Aplikace Django
Jak jiˇz bylo zm´ınˇeno, Django je open-source projekt. D´ıky takov´eto dostupnosti zdrojov´ ych k´od˚ u m˚ uˇze Django bˇeˇzet na jak´ekoliv architektuˇre a operaˇcn´ım syst´emu, na kter´em bˇeˇz´ı Python. Vlastn´ı aplikace frameworku je sloˇzena z Pythonovsk´ ych knihoven, kter´e poskytuj´ı uˇzivateli r˚ uzn´e n´astroje od prost´ ych funkc´ı generuj´ıc´ı HTML str´anky, aˇz po samotn´ y webov´ y server.
2.3.1
Instalace
Instalovat Django je moˇzn´e rovnou ze zdrojov´ ych k´od˚ u nebo pomoc´ı bin´ arn´ıch bal´ıˇck˚ u. Pro instalaci ze zdrojov´ ych k´od˚ u je zapotˇreb´ı m´ıt nainstalov´an Python ve verzi 2.3 - 2.6, plat´ı pravidlo ˇze vyˇsˇs´ı verze jsou v´ıce kompatibiln´ı. Pˇrechod na podporu Python 3.x je v pl´ anu, ale pro takhle velk´ y projekt je to velice n´aroˇcn´e, a proto to bude v´ yvoj´aˇr˚ um jeˇstˇe nˇejakou dobu trvat. Instalace je velice jednoduch´a, nebot’ spoˇc´ıv´ a pouze v nakop´ırov´an´ı potˇrebn´ ych knihoven na spr´ avn´e m´ısto, kde s nimi dok´aˇze Python pracovat a pˇrid´ an´ım spouˇstˇec´ıch cest do syst´emov´ ych promˇenn´ ych. D´ıky takto nen´ aroˇcn´e instalaci je tento zp˚ usob doporuˇcovan´ y vˇsem uˇzivatel˚ um. Dalˇs´ı zp˚ usob je instalace pomoc´ı bal´ıˇckovac´ıch syst´em˚ u. V kaˇzd´e vˇetˇs´ı Linuxov´e distribuci by mˇel b´ yt bin´ arn´ı bal´ıˇcek Djanga dostupn´ y. V´ yhodou t´eto instalace je automatick´e vyˇreˇsen´ı z´avislost´ı, tedy instalace Pythonu a automatick´e aktualizace vˇetˇsinou z´avaˇznˇejˇs´ıch bezpeˇcnostn´ıch chyb. Bohuˇzel v bal´ıˇckovac´ıch syst´emech starˇs´ıch, ale i nov´ ych Linuxov´ ych distribuc´ıch se vˇetˇsinou vyskytuj´ı zastaral´e verze Djanga, a proto instalace t´ımto zp˚ usobem nen´ı pˇr´ıliˇs doporuˇcov´ana.
7
Ke staˇzen´ı se daj´ı naj´ıt i instalaˇcn´ı bal´ıˇcky pro operaˇcn´ı syst´em MS Windows. Pˇri instalaci t´ımto zp˚ usobem je vˇetˇsinou nutn´e m´ıt pˇredem nainstalovan´ y Python v poˇzadovan´ ych verz´ıch, ale daj´ı se naj´ıt i kompletn´ı bal´ıˇcky Django s Pythonem webov´ ym serverem a datab´ az´ı. Z´aroveˇ n je nutn´e zm´ınit, ˇze je umoˇznˇeno stahovat pˇr´ımo v´ yvojovou verzi Djanga, tedy neotestovanou a s chybami. Chyby v tˇechto verz´ıch neb´ yvaj´ı pˇr´ıliˇs z´avaˇzn´e a naproti tomu m´ a uˇzivatel pˇr´ıstup k nejnovˇejˇs´ım funkc´ım a snadnou aktualizaci k´odu pomoc´ı syst´emu SVN4 . Nav´ıc v´ yvojov´ y cyklus stabiln´ı verze je dlouh´ y, a d´ıky tomu vˇsemu je instalace t´eto verze velice ˇcast´a a obl´ıben´ a i u bˇeˇzn´ ych uˇzivatel˚ u.
2.3.2
Datab´ aze
Ke kaˇzd´e vˇetˇs´ı webov´e aplikaci patˇr´ı datab´ aze k uchov´av´an´ı dat vˇseho druhu. Django v tomto pˇr´ıpadˇe umoˇzn ˇuje v´ yvoj´aˇr˚ um nejen pouˇzit´ı jak´ekoliv dnes bˇeˇznˇe zn´ am´e datab´ aze, ba dokonce, jak uˇz bylo uvedeno, sjednocuje pr´aci se vˇsemi datab´ azemi do jednoho rozhran´ı, a tak vlastnˇe odstraˇ nuje nutnost znalosti jak´ehokoliv SQL. Toto rozhran´ı je pˇr´ıstupn´e pˇres dobˇre zdokumentovan´e aplikaˇcn´ı programovac´ı rozhran´ı (API) a pr´ace s n´ım je rychl´ a a jednoduch´a. Nesm´ıme vˇsak zapomenout, ˇze toto je pouze nˇeco nav´ıc. V Djangu samozˇrejmˇe existuje moˇznost psan´ı ”ˇcist´ ych”SQL dotaz˚ u. Mezi podporovan´e datab´ aze patˇr´ı SQLite, MySQL, PostgreSQL a Oracle. Ve v´ yvoji je podpora pro dalˇs´ı datab´ aze, jako MSSQL a dalˇs´ı m´enˇe zn´ am´e projekty. Pro Django nen´ı ani probl´em provozovat projekt bez datab´aze. V tomto pˇr´ıpadˇe vˇsak budete ochuzeni o nˇekter´e funkce, jako je pˇr´ıstup k webov´emu administr´ atorsk´emu rozhran´ı.
2.3.3
Webov´ y server
Django zde pˇrich´az´ı s vlastn´ım ˇreˇsen´ım v podobˇe velice odlehˇcen´eho webov´eho serveru, kter´ y se hod´ı pro testov´an´ı aplikac´ı bˇehem v´ yvoje. Kromˇe z´akladn´ıch vˇec´ı, jako je nastaven´ı portu a napojen´ı na IP adresu, nenab´ız´ı ˇz´adnou konfiguraci. Na druhou stranu webserver je instalov´an spolu s Djangem a jeho spuˇstˇen´ı je ot´ azkou jedin´eho pˇr´ıkazu, tud´ıˇz je opravdu vhodn´ y pro zaˇc´ınaj´ıc´ı projekty. 4
SVN je zkratka syst´emu pro spr´ avu verz´ı tzv. Subversion
8
N´ aroˇcnˇejˇs´ı webov´e aplikace je vˇsak vhodn´e nechat bˇeˇzet na v´ ykonnˇejˇs´ım a l´epe konfigurovatelnˇejˇs´ım webov´em serveru. Proto je moˇzn´e Django provozovat na jak´emkoliv webov´em serveru, splˇ nuj´ıc´ım pythonovsk´ y standard WSGI. Na dnes nejpouˇz´ıvanˇejˇs´ım webov´em serveru Apache lze provozovat Django s mod python, mod wsgi, nebo pomoc´ı FastCGI. Konfigurace Apache je v tomto pˇr´ıpadˇe sloˇzitˇejˇs´ı, ale v ofici´ aln´ı dokumentaci je to dobˇre pops´ ano.
2.3.4
GeoDjango
GeoDjango je nadstavbou nad samotn´ ym Djangem, kter´a n´am pˇrid´ av´a podporu pro pr´aci s geografick´ ymi daty. Instalace GeoDjanga je jednoduch´a, spoˇc´ıv´ a pouze v zaregistrov´an´ı GeoDjango aplikace v konfiguraˇcn´ım souboru projektu. Z´aroveˇ n je nutn´e zm´ınit, ˇze GeoDjango je z´avisl´e na pouˇzit´ı datab´ az´ı s nadstavbou pro uloˇzen´ı prostorov´ ych dat. Pro GeoDjango je tedy nutn´e m´ıt SQLite se SpatialLite, PostgreSQL s PostGISem, MySQL se Spatial Extension nebo Oracle Spatial. D´ ale je nutn´e m´ıt v syst´emu nˇekolik dalˇs´ıch knihoven: • GEOS – implementace OGC Simple Features, • PROJ.4 – pro transformaci mezi jednotliv´ ymi souˇradnicov´ ymi syst´emy, • GDAL/OGR – knihovna pro ˇcten´ı prostorov´ ych dat z vˇetˇsiny form´ at˚ u. GeoDjango rozˇsiˇruje vˇsechny tˇri vrstvy frameworku Django. Model˚ um pˇrid´ av´a moˇznost definov´an´ı vˇsech geografick´ ych pol´ı specifikovan´ ych ve standardech Open Geospatial Consortium. D´ ale rozˇsiˇruje API pro pˇr´ıstup k datab´ azi o prostorov´e dotazy jako contains (obsahuje) nebo distance (vzd´alenost). Zde je potˇreba zd˚ uraznit, ˇze ne vˇsechny prostorov´e dotazy lze aplikovat na vˇsech datab´ az´ıch. Rozd´ıly mezi datab´ azemi uˇz jsou v tomto pˇr´ıpadˇe moc velk´e, respektive ne vˇsechny datab´ aze podporuj´ı vˇsechny dotazy. V´ıce informac´ı lze nal´ezt v ofici´ aln´ı dokumentaci Djanga. V ˇsablon´ach lze lehce pˇristupovat k prostorov´ ym atribut˚ um jednotliv´ ych objekt˚ u a d´ıky dodrˇzov´an´ı standard˚ u OGC je lze velice jednoduˇse prov´azat napˇr´ıklad s OpenLayers.
9
2.4
Struktura projektu v Djangu
Jak jiˇz bylo zm´ınˇeno, Django neumoˇzn ˇuje v´ yvoj´aˇr˚ um definov´an´ı vlastn´ı struktury projektu a pojmenov´an´ı konfiguraˇcn´ıch soubor˚ u, proto je d˚ uleˇzit´e zde popsat strukturu, kterou Django vytv´aˇr´ı. K lepˇs´ı pˇredstavˇe poslouˇz´ı obr´ azek 2.1 (obr´ azek je pˇrevzat ze serveru excess.org).
Obr´azek 2.1: Struktura projektu v Djangu
2.4.1
Projekt
Projekt je z´akladn´ı entita. Projekt by mˇel pˇredstavovat cel´ y web, nehledˇe na mnoˇzstv´ı aplikac´ı, kter´e by v nˇem mˇely bˇeˇzet. Mˇely by to vˇsak b´ yt aplikace, kter´e sd´ılej´ı veˇsker´e nastaven´ı, jako napˇr´ıklad pˇr´ıstup k datab´ azi nebo uloˇzen´ı statick´ ych soubor˚ u. Projekt se d´a vytvoˇrit pˇr´ıkazem django-admin.py startprojetct [n´ azev projektu]. Od zaloˇzen´ı projektu prob´ıh´ a jiˇz veˇsker´e nastaven´ı, tvoˇren´ı a spouˇstˇen´ı y byl vytvoˇren. V tomto adres´aˇri se tak´e v adres´aˇri [n´ azev projektu], kter´ 10
automaticky vytvoˇrily soubory manage.py, settings.py, urls.py.
2.4.2
Soubor manage.py
Soubor manage.py slouˇz´ı k veˇsker´e administraci projektu. Jednotliv´e akce pˇred´ av´ame jako parametry tomuto skriptu, tedy python manage.py [akce]. Pomoc´ı skriptu napˇr´ıklad spouˇst´ıme webov´ y server (runserver), Pythonovsk´ y shell (shell), synchronizaci projektu s datab´ az´ı (syncdb) a dalˇs´ı. Pro u ´pln´ y pˇrehled a jednotliv´e pˇr´ıkazy poslouˇz´ı n´apovˇeda (help).
2.4.3
Soubor urls.py
V p˚ uvodn´ım nastaven´ı je soubor urls.py seznamem vˇsech dostupn´ ych URL adres naˇseho projektu. Pro kaˇzdou adresu, kter´a m´ a b´ yt dostupn´a, se mus´ı vytvoˇrit odpov´ıdaj´ıc´ı z´aznam, kter´ y z´aroveˇ n pˇriˇrazuje adrese pohled (funkci), kter´ y bude zavol´an a budou mu pˇred´ any parametry GET nebo POST dotazu. Pro zjednoduˇsen´ı je moˇznost definovat dostupn´e URL adresy pomoc´ı regul´ arn´ıch v´ yraz˚ u a tak´e pˇred´ avat parametry URL jako parametry funkc´ı. Jako jedno z m´ ala je moˇzn´e pˇrenastavit cestu k tomuto souboru pomoc´ı promˇenn´e ROOT URLCONF v konfiguraˇcn´ım souboru projektu.
2.4.4
Soubor settings.py
Dalˇs´ı soubor settings.py je nem´enˇe d˚ uleˇzit´ y, nebot’ obsahuje veˇsker´e z´akladn´ı nastaven´ı projektu. V tomto souboru je nastaven´ı pˇr´ıstupu k datab´ azi (uˇzivatelsk´e jm´eno, heslo, jm´eno datab´ aze, server a port), vˇcetnˇe typu datab´ aze (PostgreSQL, PostGIS, MySQL, SQLite, Oracle), d´ale pouˇzit´a jazykov´a sada, ˇcasov´a z´ona a promˇenn´e: ym soubor˚ um, • MEDIA ROOT – absolutn´ı cesta ke statick´ • TEMPLATE DIRS – absolutn´ı cesta k adres´aˇri se ˇsablonami, • MEDIA URL – URL adresa statick´ ych soubor˚ u, • ROOT URLCONF – cesta k urls.py, • INSTALLED APPS – instalovan´e aplikace v projektu. Dalˇs´ımi nev´ yznamn´ ymi promˇenn´ ymi se nebudu zab´ yvat. Vˇsechny dalˇs´ı hodnoty lze nechat v p˚ uvodn´ım nastaven´ı a projekt bude fungovat. Vˇse je nav´ıc dobˇre okomentov´ano v samotn´em souboru. 11
2.4.5
Aplikace
V kaˇzd´em projektu mus´ı b´ yt alespoˇ n jedna aplikace. Aplikac´ı se zde rozum´ı nˇejak´ a ˇc´ast programu, kter´ a se star´ a o jeden specifick´ yu ´kol. Aplikac´ı m˚ uˇze b´ yt napˇr´ıklad program na obsluhu uˇzivatel˚ u webov´ ych str´anek, jejich pˇrihlaˇsovan´ı, odhlaˇsov´an´ı, spr´ ava osobn´ıch u ´daj˚ u. Jedna aplikace by mˇela vyuˇz´ıvat jeden soubor dat (model˚ u) a vnitˇrn´ı funkce v pohledech. Samozˇrejmˇe je ale moˇzn´e sd´ılet tyto prvky i v r´ amci cel´eho projektu. Pevnˇe dan´e pravidlo na dˇelen´ı programu do aplikac´ı nen´ı definov´ano. Obecnˇe plat´ı, ˇze projekt obsahuje nˇekolik aplikac´ı a jedna aplikace m˚ uˇze b´ yt vyuˇz´ıv´ ana v nˇekolika projektech. Nen´ı doporuˇceno m´ıt na kaˇzdou funkci zvl´aˇstn´ı aplikaci, respektive tak´e nen´ı dobr´e m´ıt v projektu jen jednu obˇr´ı aplikaci, do kter´e zaobal´ıme vˇse. Oba zp˚ usoby jdou provozovat, ale nepˇrin´ aˇs´ı uˇzivateli takov´e v´ yhody v pˇr´ıpadˇe nutn´e vz´ ajemn´e spolupr´ace jednotliv´ ych aplikac´ı, respektive v pˇr´ıpadˇe budouc´ıch z´asah˚ u do jiˇz rozjet´e aplikace. Aplikace se v projektu zaloˇz´ı pˇr´ıkazem python manage.py startapp [n´ azev aplikace]. Tento pˇr´ıkaz automaticky vytvoˇr´ı novou sloˇzku [n´ azev aplikace] se soubory init .py, models.py, views.py, tests.py. Pot´e se mus´ı pˇridat aplikace do promˇenn´e INSTALLED APPS v souboru settings.py, aby Django o aplikaci vˇedˇelo.
2.4.6
Soubor models.py
V souboru models.py se definuje sch´ema datab´ aze. Jednotliv´e tabulky v datab´azi jsou pˇredstavov´any Pythonovsk´ ymi tˇr´ıdami a sloupce jsou atributy dan´e tˇr´ıdy. Pˇrehled vˇsech moˇzn´ ych atribut˚ u tˇr´ıdy a jejich parametr˚ u je pops´ an v ofici´ aln´ı dokumentaci. Model je definov´an jako potomek tˇr´ıdy Model z modulu django.db.models nebo je moˇzn´e vyuˇz´ıt vz´ ajemn´e dˇediˇcnosti mezi modely. Pro ovˇeˇren´ı spr´ avnˇe definovan´ ych model˚ u je dobr´e pˇred samotnou synchronizac´ı s datab´ az´ı spustit validaci (python manage.py validate), pˇr´ıpadnˇe si nechat vygenerovat SQL dotaz, kter´ y bude posl´an datab´ azi (python manage.py sql [n´ azev aplikace]). Na z´avˇer je potˇreba zm´ınit, ˇze Django si v z´akladn´ım nastaven´ı automaticky pˇrid´ a sloupec s prim´arn´ım kl´ıˇcem do kaˇzd´e tabulky, kde nen´ı definov´an.
12
2.4.7
Soubor forms.py
Soubor forms.py nen´ı automaticky vytvoˇren pˇri zaloˇzen´ı aplikace, ale jeho pˇr´ıtomnost v aplikac´ıch je velice ˇcast´a. Jm´eno souboru je voliteln´e, nicm´enˇe z d˚ uvodu konvence z˚ ust´av´a nezmˇenˇeno. V souboru jsou definov´any formul´ aˇre, kter´e jsou pouˇzity na webov´ ych str´ank´ach. Formul´ aˇre jsou definov´any stejnˇe jako modely v souboru models.py, tedy pomoc´ı Pythonovsk´ ych tˇr´ıd a jednotliv´e formul´ aˇrov´e prvky jsou atributy dan´e tˇr´ıdy. Formul´ aˇre mohou b´ yt dokonce rovnou odvozeny z model˚ u tak, aby jim odpov´ıdaly svoji strukturou, pˇr´ıpadnˇe doplnˇeny, respektive ochuzeny o nˇekter´e prvky.
2.4.8
Soubor views.py
Posledn´ı d˚ uleˇzit´ y soubor views.py obstar´ av´a vz´ ajemnou spolupr´aci mezi jednotliv´ ymi vrstvami Djanga. V souboru jsou definov´any vlastn´ı pohledy jako Pythonovsk´e funkce, kter´e jsou vol´any na z´akladˇe nastaven´ı v souboru urls.py. Pohledy pˇristupuj´ı k datab´ azi, odkud ˇcerpaj´ı data, kter´a n´aslednˇe zpracov´avaj´ı. Pˇresn´ y postup zpracov´an´ı dotazu je na obr´ azku 2.2 (obr´azek je pˇrevzat ze serveru djangobook.com). Vˇsechny pohledy mus´ı m´ıt minim´alnˇe jeden parametr. Tento parametr b´ yv´ a standardnˇe pojmenov´an request, je instanc´ı tˇr´ıdy HttpRequest a obsahuje uˇziteˇcn´e informace, t´ ykaj´ıc´ı se HTTP dotazu, jako GET a POST parametry, promˇenn´e serveru apod. Nejˇcastˇejˇs´ımi n´avratov´ ymi hodnotami pohled˚ u jsou instance tˇechto tˇr´ıd: • HttpResponseRedirect – 302, • HttpResponseNotFound – 404, • HttpResponseServerError – 500, • HttpResponse – 200, • RenderToResponse – 200. V pˇr´ıpadˇe pouˇzit´ı tˇr´ıdy HttpResponse vrac´ıme ˇretˇezec znak˚ u, pˇredstavuj´ıc´ı jiˇz kompletn´ı webovou str´anku. Tato metoda nen´ı pˇr´ıliˇs praktick´a, vˇetˇsinou se vrac´ı instance tˇr´ıdy RenderToResponse, spolu s dalˇs´ımi objekty a jm´enem 13
Obr´azek 2.2: Postup zpracov´an´ı HTTP dotazu ˇsablony. V ˇsablonˇe m˚ uˇzeme k atribut˚ um tˇechto objekt˚ u pˇristupovat, a data tak modifikovat nebo jen graficky form´ atovat.
14
Kapitola 3
Ostatn´ı n´ astroje Tato kapitola ˇcerp´ a pˇredevˇs´ım z informac´ı dostupn´ ych na ofici´ aln´ıch str´ank´ach jednotliv´ ych projekt˚ u: • 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 t´eto kapitoly je sezn´ amit ˇcten´aˇre s jednotliv´ ymi n´astroji pouˇzit´ ymi ve webov´e aplikaci Stopaˇr.
3.1
PostgreSQL
PostgreSQL je v´ ykonn´ y datab´ azov´ y syst´em, kter´ y patˇr´ı mezi nejpouˇz´ıvanˇejˇs´ı datab´ azov´e syst´emy souˇcasnosti. M˚ uˇzeme ho porovn´avat se zn´ am´ ymi syst´emy jako SQLite, MySQL, MSSQL nebo Oracle. PostgreSQL je vyv´ıjen jako open-source pod licenc´ı PostgreSQL License. Licence je velice liber´aln´ı a je podobn´a licenci BSD. Tato licence umoˇzn ˇuje pouˇz´ıvat, mˇenit a distribuovat PostgreSQL v jak´ekoliv formˇe se zdrojov´ ymi k´ody i bez nich.
15
D´ıky tˇemto moˇznostem je PostgreSQL velice obl´ıben´ y pro uˇzivatele Linuxu. Nach´az´ı se tak´e ve vˇetˇsinˇe bal´ıˇckovac´ıch syst´em˚ u linuxov´ ych distribuc´ıch. PostgreSQL m˚ uˇzeme ale provozovat i na platformˇe MS Windows a UNIX. V´ yvoj datab´ azov´eho syst´emu prob´ıh´ a uˇz 15 let a za tu dobu si PostgreSQL z´ıskal velice dobrou povˇest d´ıky sv´e spolehlivosti, v´ ykonnosti a vysok´e pˇresnosti. Datab´ aze plnˇe splˇ nuje ACID, coˇz je soubor vlastnost´ı, kter´e garantuj´ı, ˇze datab´ azov´e transakce budou spolehlivˇe zpracov´any. Mezi tyto vlastnosti se poˇc´ıt´ a atomita, konsistence, izolace a st´alost dat v datab´ azi. Implementace SQL v PostgreSQL pˇr´ısnˇe splˇ nuje standart ANSI-SQL:2008. PostgreSQL podporuje velk´e mnoˇzstv´ı datov´ ych typ˚ u od jednoduch´ ych ˇc´ıseln´ ych typ˚ u aˇz po sloˇzit´e bin´ arn´ı typy. D´ ale podporuje vˇetˇsinu svˇetov´ ych znakov´ ych sad vˇcetnˇe UTF-8 a k´odov´an´ı Unicode. Datab´ azi je moˇzn´e pˇrizp˚ usobit jak z hlediska poˇctu konkurenˇcn´ıch spojen´ı, tak z hlediska mnoˇzstv´ı spravovan´ ych dat. V tabulce 3.1 jsou uvedeny nˇekter´e limity datab´ aze. Limit Maxim´ aln´ı velikost datab´ aze Maxim´ aln´ı velikost tabulky Maxim´ aln´ı velikost z´aznamu Maxim´ aln´ı velikost buˇ nky Maxim´ aln´ı poˇcet z´aznam˚ u v tabulce Maxim´ aln´ı poˇcet sloupc˚ u v tabulce Maxim´ aln´ı poˇcet index˚ u
Hodnota neomezeno 32 TB 1.6 TB 1 GB neomezeno 250 - 1600 neomezeno
Tabulka 3.1: Limity datab´ aze PostgreSQL (tabulka byla pˇrevzata ze serveru http://www.postgresql.org/) PostgreSQL m´ a nativn´ı programovac´ı rozhran´ı pro vˇetˇsinu dnes pouˇz´ıvan´ ych jazyk˚ u jako C/C++, Java, .Net, Perl, Python a dalˇs´ı. Z´aroveˇ n umoˇzn ˇuje programovat ve vlastn´ım jazyku PL/pgSQL, podobn´em jazyku PL/SQL zn´ am´eho z datab´ aze Oracle. PostgeSQL jiˇz od instalace obsahuje stovky
16
pˇredem definovan´ ych a uˇziteˇcn´ ych funkc´ı, od z´akladn´ıch matematick´ ych funkc´ı, aˇz po sloˇzit´e kryptografick´e funkce. Vˇsechny tyto vlastnosti dˇelaj´ı datab´ azi PostgreSQL v´ ykonnou a modern´ı aplikac´ı, kterou je moˇzn´e pouˇz´ıvat pro projekty jak´ehokoliv rozsahu a zamˇeˇren´ı.
3.2
PostGIS
PostGIS je nadstavbou nad datab´ az´ı PostgreSQL. Do datab´ aze pˇrid´ av´a podporu pro ukl´ ad´ an´ı a pr´aci s geoprostorov´ ymi daty. Tento projekt, ve spojen´ı s datab´ az´ı PostgreSQL, m˚ uˇzeme srovn´avat s komerˇcn´ımi ˇreˇsen´ımi v podobˇe ESRI ArcSDE nebo s nadstavbou Oracle Spatial. V´ ykonov´e srovn´an´ı s tˇemito projekty by PostGIS nejsp´ıˇs prohr´ al, v jeho prospˇech vˇsak hraje poˇrizovac´ı cena, kter´ a je nulov´a.
PostGIS je open-source projekt vyv´ıjen´ y pod zn´ amou licenc´ı GNU General Public License. Ve zkratce, tato licence umoˇzn ˇuje bezplatn´e stahov´an´ı zdrojov´ ych k´od˚ u, jejich u ´pravu a n´asledn´e ˇs´ıˇren´ı s t´ım, ˇze budou opˇet ˇs´ıˇreny pod stejnou licenc´ı, tud´ıˇz zdarma. Hlavn´ı z´asluhu na v´ yvoji rozˇs´ıˇren´ı PostGIS m´ a firma Refractions Research, kter´ a stoj´ı za mnoha dalˇs´ımi projekty z oblasti GIS. Nyn´ı vˇsak do projektu mohou pˇrisp´ıvat a tak´e pˇrisp´ıvaj´ı lid´e z cel´eho svˇeta. PostGIS se snaˇz´ı striktnˇe dodrˇzovat standardy specifikovan´e organizac´ı Open Geospatial Consortium a je kompatibiln´ı s OpenGIS ”Simple Features Specification for SQL”1 . Stejnˇe jako PostgreSQL je PostGIS dostupn´ y pro operaˇcn´ı syst´emy MS Windows, UNIX a GNU/Linux. V´ıce informac´ı lze nal´ezt na ofici´ aln´ıch str´ank´ach projektu http://postgis.refractions.net/. 1
Simple Features Specification for SQL http://www.opengeospatial.org/standards/sfs
17
3.3
PgRouting
PgRouting je projekt, kter´ y je zamˇeˇren na v´ yvoj knihovny pro PostGIS. Tato knihovna poskytuje jednoduch´e algoritmy pro s´ıt’ov´e anal´ yzy. Celkov´ y v´ yvoj a spr´ ava projektu je organizov´ana spoleˇcnost´ı Orkney. Jiˇz od poˇc´atku projektu je hlavn´ım v´ yvoj´aˇrem Anton Patrushev. Na projektu spolupracuje zejm´ena s Danielem Kastlem, kter´ y m´ a na starosti podporu, dokumentaci a dodateˇcn´e aplikace. Spolu s nimi do projektu pˇrisp´ıv´ a spousta dalˇs´ıch v´ yvoj´aˇr˚ u, hlavnˇe z organizace Georepublic.
Knihovna je vyv´ıjena pod jiˇz zm´ınˇenou licenc´ı GNU General Public License. PgRouting je moˇzn´e instalovat na vˇsechny operaˇcn´ı syst´emy, kde bˇeˇz´ı PostgreSQL s PostGISem, bohuˇzel vˇsak neexistuj´ı bin´ arn´ı bal´ıˇcky pro ˇz´adn´ y syst´em, tud´ıˇz je nutn´e kompilovat zdrojov´e k´ody, a to i na operaˇcn´ım syst´emu MS Windows. Knihovna pgRouting vznikla nad knihovnou pgDjiksrta, kter´a vˇsak nyn´ı ve srovn´an´ı s pgRouting nab´ız´ı mnohem m´enˇe funkc´ı. Hlavn´ı funkce knihovny je umoˇznit vyhled´ an´ı cesty s nejmenˇs´ı cenou v s´ıt’ov´em grafu. Nejmenˇs´ı cenou m˚ uˇze b´ yt napˇr´ıklad d´elka (v pˇr´ıpadˇe hled´an´ı nejkratˇs´ı trasy), d´elka dˇelen´a maxim´ aln´ı rychlost´ı v u ´seku (v pˇr´ıpadˇe hled´an´ı nejrychlejˇs´ı trasy) nebo jak´akoliv jin´ a dynamick´a nebo statick´a veliˇcina. Knihovna implementuje n´asleduj´ıc´ı algoritmy: • Shortest Path Dijkstra, • Shortest Path A*, • Shortest Path Shooting Star. Krom t´eto hlavn´ı funkcionality nab´ız´ı knihovna i algoritmy pro ˇreˇsen´ı zn´ am´e u ´lohy obchodn´ıho cestuj´ıc´ıho. V´ıce o pouˇzit´ı algoritm˚ u a dalˇs´ı informace lze nal´ezt na ofici´ aln´ıch str´ank´ach projektu http://pgrouting.postlbs.org/. 18
V r´ amci projektu pgRouting jsou vyv´ıjeny i dalˇs´ı aplikace, napˇr´ıklad osm2pgrouting, coˇz je ve skuteˇcnosti filtr, kter´ y konvertuje data ve form´ atu OSM (XML) do datab´ aze PostGIS a z´aroveˇ n vytv´aˇr´ı topologii a pomocn´e tabulky. Dalˇs´ı aplikac´ı vyv´ıjenou v r´amci projektu je WebRouting Service (WRS), coˇz je webov´a sluˇzba, kter´a umoˇzn ˇuje vytv´aˇret pgRouting dotazy pˇres HTTP protokol.
3.4
OpenLayers
OpenLayers je sada n´astroj˚ u, kter´a umoˇzn ˇuje zobrazov´an´ı mapy ve webov´ ych prohl´ıˇzeˇc´ıch. Z uˇzivatelsk´eho pohledu jsou to ovl´ adac´ı prvky mapy (tlaˇc´ıtka pro pohyb mapy, pˇribliˇzov´an´ı, oddalov´an´ı, zmˇena vrstev). Z pohledu v´ yvoj´aˇre je to Javascriptov´a knihovna s pˇrehledn´ ym API rozhran´ım. D˚ uleˇzit´e je, ˇze OpenLayers nen´ı vlastn´ı mapa, kterou uˇzivatel vid´ı. Mapa, neboli data, kter´ a na webov´e str´ance zobrazujeme, m˚ uˇzeme ˇcerpat z tˇechto typ˚ u zdroj˚ u: • Web Map Service, • Web Feature Service, • mapov´e servery (MapServer, GeoServer, ArcGIS Server), • mapov´e sluˇzby (OpenStreetMaps, Google Maps, Yahoo! Maps), • form´ aty (GeoRSS, KML, GML, GeoJSON), a dalˇs´ı. S projektem OpenLayers zaˇcala firma MetaCarta v roce 2005 a o rok pozdˇeji byl projekt uvolnˇen jako open-source, pod m´ırnˇe upravenou BSD licenc´ı. Dnes je ve spojen´ı s OpenStreetMaps otevˇrenou alternativou ke komerˇcn´ım projekt˚ um, jako je Google Maps nebo Bing Maps.
OpenLayers jsou volnˇe ke staˇzen´ı na str´ank´ach projektu openlayers.com. Z´aroveˇ n se tam nach´az´ı javascriptov´a knihovna, na kterou je moˇzn´e pˇr´ımo 19
odkazovat. Posledn´ı moˇznost´ı je pouˇzit´ı SVN repozit´ aˇre, kde se nach´az´ı v´ yvojov´a verze.
3.5
OpenStreetMap
OpenStreetMap je komunitn´ı projekt, kter´ y poskytuje geografick´a data pod svobodnou licenc´ı bez omezen´ı. OpenStreetMap je podobn´ y projektu Wikipedia. Z´akladem je, ˇze vˇsichni uˇzivatel´e mohou svobodnˇe pˇrid´ avat, upravovat a ˇcerpat informace. V pˇr´ıpadˇe OpenStreetMap jsou tˇemito informacemi geografick´a data. Projekt OpenStreetMap byl zaloˇzen v roce 2004 Stevem Coastem. O dva roky pozdˇeji vznikla stejnojmenn´a nev´ ydˇeleˇcn´ a organizace, kter´a projekt zaˇstit’uje. Postupem ˇcasu do projektu pˇrisp´ıvala finanˇcnˇe a materi´alnˇe ˇrada lid´ı a firem, jako Yahoo nebo Google a z OpenStreetMap se stala r˚ uznˇe kvalitn´ı mapa pokr´ yvaj´ıc´ı cel´ y svˇet. Kvalita dat v OpenStreetMap je r˚ uznorod´a, nebot’ zdrojem dat jsou uˇzivatel´e a firmy, kteˇr´ı poskytnou zdarma z´aznamy sv´ ych mˇeˇren´ı. Pˇri pohledu do mapy jsou evidentn´ı rozd´ıly nejen mezi zemˇemi, ale i mezi oblastmi jednotliv´ ych zem´ı. Vˇzdy z´aleˇz´ı na aktivitˇe uˇzivatel˚ u a obl´ıbenosti projektu v dan´e lokalitˇe.
Nyn´ı je v komunitˇe registrov´ano kolem 200 000 uˇzivatel˚ u, odhaduje se vˇsak, ˇze pouze 10 % z nich jsou aktivn´ımi pˇrispˇevateli. Data OpenStreetMap jsou uloˇzena i s topologi´ı a m˚ uˇzeme je rozdˇelit do tˇechto typ˚ u: • Nodes – body s geografickou polohou, • Ways – seznamy bod˚ u, patˇr´ıc´ı do jednoho polygony/polylinie, • Relations – skupiny prvk˚ u, kter´ ym m˚ uˇze b´ yt pˇriˇrazen stejn´ y parametr, • Tags – doplˇ nuj´ıc´ı textov´e u ´daje. 20
OpeenStreetMap je velice nadˇejn´ y projekt a pokud bude jeho obl´ıbenost r˚ ust, m˚ uˇze se st´at plnohodnotn´ ym zdrojem geografick´ ych dat po cel´e Zemi.
3.6
Python
Python je v´ ykonn´ y programovac´ı jazyk, kter´ y se snaˇz´ı o maxim´ aln´ı ˇcitelnost k´odu. Jazyk Python je objektovˇe orientovan´ y a hod´ı se jak pro psan´ı kr´atk´ ych skript˚ u, tak pro v´ yvoj rozs´ahlejˇs´ıch aplikac´ı. Interpret jazyka je spustiteln´ y na operaˇcn´ıch syst´emech MS Windows, UNIX i MacOS X. Zdrojov´e k´ody Pythonu jsou volnˇe dostupn´e na ofici´ aln´ıch str´ank´ach projektu python.org a jsou uvolnˇeny pod licenc´ı Python Software Foundation License, kter´ a je podobn´ a licenci BSD. Na str´ank´ach se nal´ezaj´ı bin´ arn´ı bal´ıˇcky pro operaˇcn´ı syst´emy MS Windows a odkazy na dalˇs´ı moduly.
V´ yvoj Pythonu zaˇcal Guido van Rossum v prosinci 1989 s hlavn´ım z´amˇerem vyvinout n´astupce programovac´ıho jazyka ABC. Rossum m´ a nyn´ı st´ale hlavn´ı slovo pˇri urˇcov´an´ı smˇeru v´ yvoje jazyka, ale na vlastn´ım v´ yvoji se jiˇz znaˇcnˇe pod´ıl´ı komunita. Python vyuˇz´ıv´ a b´ıl´ ych znak˚ u, neboli odsazov´an´ı k seskupov´an´ı v´ yraz˚ u, d´ale se snaˇz´ı o ˇsirˇs´ı pouˇzit´ı srozumiteln´ ych kl´ıˇcov´ ych slov, ˇc´ımˇz vytv´aˇr´ı k´od dobˇre ˇciteln´ y. V programu nen´ı nutn´e deklarovat promˇenn´e ani argumenty funkc´ı, jazyk dokonce nerozliˇsuje ani jejich datov´ y typ. Interpret jazyka je moˇzn´e pouˇz´ıvat interaktivnˇe, coˇz je v´ yhodn´e pˇri testov´an´ı programu. Python je souˇc´ast´ı mnoha projekt˚ u a z´akladem mnoha aplikac´ı. Z tˇech nejzn´amˇejˇs´ıch jsou to napˇr´ıklad editory rastrov´e (GIMP) a vektorov´e grafiky (Inkspace), syst´em GRASS GIS a samozˇrejmˇe framework Django.
21
Kapitola 4
Webov´ a aplikace Stopaˇ r Tato kapitola se vˇenuje webov´e aplikaci Stopaˇr, kter´a byla vytvoˇrena pomoc´ı frameworku Django a dalˇs´ıch n´astroj˚ u, kter´e jsou bl´ıˇze pops´ any v kapitole 3. Automobilov´a doprava se za posledn´ıch roky velice rozˇs´ıˇrila. V dneˇsn´ı dobˇe nen´ı v´ yjimeˇcn´e, kdyˇz rodina vlastn´ı v´ıce neˇz jeden automobil. D˚ usledek toho je vidˇet na naˇsich silnic´ıch, kde vˇetˇsina automobil˚ u m´ a pouze jednoho pasaˇz´era – a to ˇridiˇce. To samozˇrejmˇe zp˚ usobuje velk´e dopravn´ı probl´emy, ˇ ˇ sen´ım m˚ ’ ’ nebot silniˇcn´ı s´ıt v Cesk´e republice na to nen´ı dimenzov´ana. Reˇ uˇze b´ yt zkvalitnˇen´ı hromadn´e dopravy nebo tak´e rozˇs´ıˇren´ı stopov´an´ı. V r˚ uzn´ ych zem´ıch Evropy jako It´ alie a Polsko, a tak´e v USA, je stopov´an´ı ˇ e povaˇzov´ano za bˇeˇzn´ y druh dopravy a je mnohem v´ıce rozˇs´ıˇren neˇz v Cesk´ republice. Ve Spojen´ ych st´atech je zvl´aˇst’ obl´ıben´ y, nebot’ tam existuj´ı na d´alnic´ıch a ve mˇestech speci´aln´ı pruhy pro vozidla s v´ıce neˇz dvˇema osoˇ je stopov´an´ı bami. T´ım jsou ˇridiˇci nuceni vyhled´ avat spolujezdce. V CR sp´ıˇse v´ ysadou mal´e skupiny nadˇsenc˚ u a nem´a takovou podporu u zbytku veˇrejnosti. Pˇribl´ıˇzit stopov´an´ı vˇsem lidem byl prim´arn´ı d˚ uvod vzniku t´eto pr´ace. Pˇri prohled´ an´ı ˇcesk´eho internetu naraz´ı ˇcten´aˇr na projekty naprosto stejn´eho zamˇeˇren´ı. Je to napˇr´ıklad: • http://www.spolujizda.cz/ • http://www.spolujizda.net/ • http://www.spolujizda.com/ • http://www.autospolujizda.cz/
22
a urˇcitˇe mnoh´e dalˇs´ı. Vˇsechny tyto projekty vypadaj´ı podobnˇe. Uˇzivatelsk´e rozhran´ı je sice jednoduch´e, ale niˇc´ım nezaj´ımav´e. Uˇzivatel si m˚ uˇze vyhledat spoluj´ızdy a nebo je vloˇzit, a to je vˇetˇsinou jedin´a funkcionalita. Bˇeˇzn´eho uˇzivatele webu, kter´ y se nezaj´ım´a o spoluj´ızdu, tyto projekty niˇc´ım neoslov´ı. Coˇz je hlavn´ım d˚ uvodem nepˇr´ıliˇs velk´e n´avˇstˇevnosti a obl´ıbenosti tˇechto web˚ u. Webov´ y port´ al Stopaˇr se snaˇz´ı pˇribl´ıˇzit stopov´an´ı ostatn´ım lidem t´ım, ˇze poskytuje i dalˇs´ı funkcionalitu. Nyn´ı je touto funkcionalitou pouze pˇrid´ av´an´ı z´ajmov´ ych bod˚ u (tzv. Points of Interest) do mapy. Do budoucna je vˇsak v pl´ anu rozˇs´ıˇrit aplikaci o moˇznost vkl´ad´ an´ı tras, napˇr´ıklad cyklotras nebo tras pro koleˇckov´e brusle, d´ale moˇznost vkl´adat cel´e z´ajezdy, ke kter´ ym si bude uˇzivatel moci pˇrid´ avat cestovn´ı z´apisky, fotky a dalˇs´ı vˇeci. Vˇse bude fungovat na vz´ ajemn´em sd´ılen´ı mezi uˇzivateli, kteˇr´ı si t´ımto zp˚ usobem budou doporuˇcovat zaj´ımav´e typy na v´ ylet. Vˇsechny prvky bude moci uˇzivatel komentovat, stejnˇe tak bude moci pˇrid´ avat n´azory na ostatn´ı uˇzivatele, poskytuj´ıc´ı spoluj´ızdu, respektive spolujezdce. Je nutno pˇripomenout, ˇze nyn´ı je funkˇcn´ı pouze ˇc´ast obsluhuj´ıc´ı pˇrid´ an´ı z´ajmov´ ych bod˚ u a spr´ avu spoluj´ızd, kaˇzdop´adnˇe tyto ˇc´asti jiˇz plnˇe slouˇz´ı jako pˇr´ıklad u ´pln´e aplikace. Dalˇs´ı vˇec´ı, kter´ a ˇcin´ı Stopaˇre v´ yjimeˇcn´ ym oproti ostatn´ım projekt˚ um, je pˇrid´ an´ı mapy. Mapa je hlavn´ım n´astrojem na webov´e str´ance, zobrazuje vˇzdy vybran´e prvky a z´aroveˇ n umoˇzn ˇuje vkl´ad´ an´ı prvk˚ u pouh´ ym kliknut´ım. Mapa by mˇela zpˇrehlednit a z´aroveˇ n oˇzivit aplikaci. Toto vˇsechno je nutn´e pˇrehlednˇe uspoˇr´adat, graficky vyladit a zajistit uˇzivatelskou pˇr´ıvˇetivost aplikace. Pouze za tˇechto pˇredpoklad˚ u m˚ uˇze b´ yt webov´a aplikace u ´spˇeˇsn´ a.
4.1
Popis projektu
Cel´ y projekt moment´alnˇe bˇeˇz´ı na serveru josef, coˇz je server katedry mapov´an´ı a kartografie. Projekt je dostupn´ y na URL http://josef.fsv.cvut.cz/stopar a je pˇr´ıstupn´ y pro vˇsechny uˇzivatele. Jako webov´ y server je pouˇzit Apache. K pouˇz´ıv´ an´ı aplikace Stopaˇr nen´ı potˇreba vlastnit uˇzivatelsk´ y profil, ale v takov´em pˇr´ıpadˇe bude pouˇz´ıv´ an´ı znaˇcnˇe omezeno a n´avˇstˇevn´ık bude moci 23
pouze prohl´ıˇzet jednotliv´e prvky. V pˇr´ıpadˇe zaregistrov´an´ı bude jiˇz moci uˇzivatel vkl´adat nov´e z´ajmov´e body, spoluj´ızdy a pˇrid´ avat koment´aˇre. Jak jiˇz bylo zm´ınˇeno, tak projekt Stopaˇr zat´ım um´ı obstar´ avat uˇzivatelsk´e u ´ˇcty, spravovat z´ajmov´e body a jednotliv´e trasy, neboli zaj´ımav´a m´ısta a spoluj´ızdy. Z toho jiˇz m˚ uˇze b´ yt patrn´e, ˇze projekt je tvoˇren tˇremi aplikacemi – aplikac´ı accounts, points a rides. Z n´azvu aplikac´ı je jasn´e, co kter´a m´ a na starosti. azoProjekt je napojen na datab´ azi pgis stopar, kter´a je souˇc´ast´ı datab´ v´eho syst´emu PostgreSQL, bˇeˇz´ıc´ım rovnˇeˇz na serveru josef. PostgreSQL je rozˇs´ıˇren o PostGIS, nadstavbu pro ukl´ad´ an´ı prostorov´ ych dat a knihovnu pgRouting, umoˇznuj´ıc´ı hled´an´ı tras.
4.1.1
Vzhled aplikace
Vzhled webov´ ych str´anek je pomˇernˇe jednoduch´ y. Aplikace vyuˇz´ıv´ a cel´e plochy prohl´ıˇzeˇce a je optimalizovan´ a pro rozliˇsen´ı vˇetˇs´ı nebo rovno 1280×800 pixel˚ u. Na str´ance je dominantn´ım prvkem mapa, kter´a zab´ır´ a levou polovinu plochy a zobrazuje vˇzdy vybran´ y prvek (bod, trasu). Na prav´e polovinˇe plochy jsou textov´e informace k vybran´ ym prvk˚ um a uˇzivatelsk´ y panel. Struktura webov´ ych str´anek je naznaˇcena na obr´ azku 4.1
Obr´azek 4.1: Struktura webov´ ych str´anek 24
Pro lepˇs´ı pˇredstavu poslouˇz´ı uk´azkov´e obr´ azky v pˇr´ıloze A tohoto dokumentu.
ˇ Sablony
4.1.2
Aplikace vyuˇz´ıv´ a ˇsablonovac´ıho syst´emu Djanga. Je vytvoˇrena jedna hlavn´ı ˇsablona base.html, kter´ a obsahuje hlavn´ı panely – hlaviˇcku a patiˇcku a tˇelo webov´e str´anky. Tˇelo m˚ uˇze b´ yt rozˇs´ıˇreno o str´anku obsahuj´ıc´ı mapu a dalˇs´ı obsah str´anky. Uk´azkov´ y pˇr´ıklad ˇsablony base.html (velice podobn´a ˇsablona je pouˇzita i v projektu Stopaˇr, obsahuje vˇsak mnoˇzstv´ı dalˇs´ıch hlaviˇcek, kter´e jsou vˇsak pro obsah t´eto pr´ace bezv´ yznamn´e):
Stopaˇ r {% if map %} {% include map.html %} {% endif %} {% block contetnt %} Hello world! {% end block %}
ˇ Sablona je velice jednoduch´a, oproti bˇeˇzn´emu HTML obsahuje tˇri zaj´ımav´e znaˇcky.
25
Znaˇcka {% if map %}{% endif %} uvozuje blok, kter´ y bude zobrazen, v tomto pˇr´ıpadˇe sp´ıˇse vykon´ an, pokud ˇsablonˇe bude pˇred´ an parametr map a nebude m´ıt hodnotu False. Druh´a znaˇcka {% include "map.html"%} naimportuje dalˇs´ı HTML dokument, kter´ y se vloˇz´ı pˇresnˇe na m´ısto t´eto znaˇcky. Posledn´ı zaj´ımav´a znaˇcka {% block contetnt %}{% end block %} je podobn´ a znaˇcce {% include %}. Tato znaˇcka je nejsp´ıˇs tou nejd˚ uleˇzitˇejˇs´ı, ’ nebot ona je t´ım, co dˇel´ a ˇsablonovac´ı syst´em Djanga tolik efektivn´ı. Jak je ps´ ano v sekci 2.4.8 na stranˇe 13 pohledy mohou vracet ˇsablony a data, kter´ a budou v ˇsablonˇe zpracov´any. V naˇsem pˇr´ıpadˇe tedy nevrac´ıme ˇsablonu base.html, ale ˇsablonu jinou, kter´a base.html rozˇs´ıˇr´ı. Uk´azkov´ y pˇr´ıklad takov´eto rozˇsiˇruj´ıc´ı ˇsablony: {% extends "base.html" %} {% block contetnt %} Toto bude obsah str´ anky. {% end block %} Dalˇs´ı odliˇsnost´ı od znaˇcky {% include %} je, v pˇr´ıpadˇe ˇze nen´ı uveden´ y {% block contetnt %}{% end block %} v rozˇsiˇruj´ıc´ı ˇsablonˇe, je pouˇzit text uvnitˇr znaˇcky. V uk´azkov´em pˇr´ıkladˇe, pokud by nebyl uveden {% block contetnt %}{% end block %} bylo by zobrazeno ”Hello world!”, my vˇsak tento blok m´ ame uveden, tud´ıˇz bude zobrazeno ”Toto bude obsah str´anky.”. V pˇr´ıkladu si jeˇstˇe povˇsimneme znaˇcky {% extends "base.html"%}, kter´ a je tou rozˇsiˇruj´ıc´ı znaˇckou a v naˇsem pˇr´ıpadˇe rozˇsiˇruje aktu´aln´ı ˇsablonu o ˇsablonu base.html. Na z´avˇer, jen pro u ´plnost, je nutno zm´ınit znaˇcku {% for item in list %}{% endfor %}, kter´ a vytv´aˇr´ı cyklus for (opakuje k´od, kter´ y je uveden v bloku) pˇres vˇsechny poloˇzky v promˇenn´e, v naˇsem pˇr´ıpadˇe v promˇenn´e list. V Djangu je moˇzn´e pouˇz´ıt mnoˇzstv´ı dalˇs´ıch znaˇcek, jejich popis by vˇsak pˇresahoval rozsah t´eto pr´ace. Nav´ıc ve webov´e aplikaci Stopaˇr nebyly tak ˇcasto pouˇz´ıv´ any. Pokud by ˇcten´aˇre zaj´ımaly, je moˇzn´e jejich pˇrehled nal´ezt na ofici´ aln´ıch str´ank´ach projektu Django1 . 1
http://docs.djangoproject.com/en/dev/ref/templates/builtins/
26
4.2
Datab´ aze
Jak jiˇz bylo zm´ınˇeno, tak aplikace Stopaˇr je napojena na datab´ azi PostgreSQL, rozˇs´ıˇrenou o nadstavbu PostGIS a knihovnu pgRouting. V datab´ azi pgis stopar je prozat´ım 24 tabulek, z nichˇz 13 bylo vytvoˇreno a je spravov´ano automaticky Djangem, respektive syst´emem. Zbyl´e byly vytvoˇreny manu´alnˇe na z´akladˇe model˚ u v jednotliv´ ych aplikac´ıch a utilitou osm2pgrouting. Pozn.: O vztahu mezi tabulkami a modely pojedn´ av´ a sekce 2.4.6. Pro pˇrehlednost zde uvedeme seznam d˚ uleˇzit´ ych tabulek a jejich popis: • metadatov´ e tabulky: a datab´ azov´ ym syst´emem, geometry columns automaticky vytvoˇren´ pˇri vytv´aˇren´ı datab´ aze s rozˇs´ıˇren´ım PostGIS. V tabulce jsou uloˇzeny z´aznamy o jednotliv´ ych pol´ıch, kter´e obsahuj´ı prostorov´e objekty spolu s geometri´ı tˇechto objekt˚ u a souˇradnicov´ y syst´em, ve kter´em jsou definov´any souˇradnice. spatial ref sys stejnˇe jako tabulka geometry columns je i tato tabulka vytvoˇrena syst´emem, obsahuje vˇsak data o souˇradnicov´ ych syst´emech, kter´e mohou b´ yt pouˇzity v datab´ azi. • automaticky vytvoˇ ren´ e tabulky: auth user obsahuje informace t´ ykaj´ıc´ı se jednotliv´ ych uˇzivatel˚ u (jm´eno, heslo, email, posledn´ı pˇrihl´aˇsen´ı). ym objekt˚ um pr´ava pˇrid´ avat, mˇeauth permission pˇriˇrazuje jednotliv´ nit a mazat ostatn´ı objekty. django admin log zaznamen´ av´a veˇskerou aktivitu uˇzivatel˚ u pˇres webov´e administraˇcn´ı rozhran´ı. django comments ukl´ad´ a vˇsechny koment´aˇre s dalˇs´ımi informacemi jako kdo, kdy a z jak´e IP adresy koment´aˇr vytvoˇril a k jak´emu objektu patˇr´ı. django comment flags obsahuje flagy pˇriˇrazen´e k jednotliv´ ym koment´aˇr˚ um. django content type obsahuje metadata (jm´eno, aplikace, model) o vˇsech objektech uloˇzen´ ych v datab´ azi. 27
django session ukl´ ad´ a data, kl´ıˇce a expiraci vˇsech relac´ı. • manu´ alnˇ e vytvoˇ ren´ e tabulky: accounts profile rozˇsiˇruje objekt User o dalˇs´ı atributy – popis a fotografie. ˇ Jsou v n´ı uloˇzeny z´akladn´ı u v CR. points kraje je tabulka vˇsech kraj˚ informace jako poˇcet obyvatel, n´azev a hlavnˇe geometrie (polygony pˇredstavuj´ıc´ı jednotliv´e kraje). points points skladuje body (m´ısta), kter´a vkl´adaj´ı do aplikace uˇzivatel´e. Do tabulky je ukl´ad´ ana geometrie, n´azev, typ m´ısta a doplˇ nuj´ıc´ı informace. points pointsimages rozˇsiˇruje points points o moˇznost vkl´ad´ an´ı fotografi´ı k bod˚ um. u svˇeta. A stejnˇe jako tabulka points worldborders je tabulka st´at˚ points kraje obsahuje z´akladn´ı informace o st´atech a geometrii. ym typem jako points kraje, ale obsahuje data rides cities je stejn´ ˇ o vˇsech mˇestech v CR. ad´ a spoluj´ızdy pˇridan´e uˇzivateli. Do tabulky je ukl´arides rides ukl´ d´ana geometrie, datum j´ızdy, typ, poˇcet osob a dalˇs´ı informace. • tabulky pro pgRouting: rides roads data v t´eto tabulce jsou polylinie, kter´e ve v´ ysledku ˇ pˇredstavuj´ı celou silniˇcn´ı s´ıt’ v CR. V tabulce je definov´ano, kromˇe geometrie, i ohodnocen´ı lini´ı, jejich typ a dalˇs´ı pomocn´e informace, usnadˇ nuj´ıc´ı rychlejˇs´ı hled´an´ı tras. ad´ a geometrii vrcholov´ ych bod˚ u lini´ı silniˇcn´ı s´ıtˇe. rides vertices ukl´
4.3
Aplikace accounts
Aplikace accounts je tou hlavn´ı aplikac´ı. Umoˇzn ˇuje n´avˇstˇevn´ık˚ um registraci a vytvoˇren´ı vlastn´ıho profilu. Spolu s t´ımto je samozˇrejmˇe umoˇznˇeno uˇzivatel˚ um profily mˇenit a nahl´ıˇzet na profily ostatn´ıch. Z´aroveˇ n jsou na uˇzivatelsk´e profily nav´az´any ostatn´ı aplikace. Pˇrid´ avat a editovat z´ajmov´e body a spoluj´ızdy je moˇzn´e jen registrovan´ ym uˇzivatel˚ um.
28
4.3.1
Modely
Aplikace accounts definuje pouze jeden model – Profile, ale vyuˇz´ıv´ a i model druh´ y – User, kter´ y je definovan´ y v django.contrib.auth.models. Oba modely jsou propojeny vztahem 1:1. class Profile(models.Model): user = models.OneToOneField(User, verbose_name=’Uˇ zivatel’) 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 definovan´ ych funkc´ı a jejich struˇcn´ y popis, pˇr´ıpadnˇe zaj´ımav´e uk´azky k´odu. index(request, sent): obstar´ av´a poˇzadavky smˇeˇruj´ıc´ı na koˇrenov´ y adres´aˇr projektu Stopaˇr. V pˇr´ıpadˇe metody GET rozliˇsuje, zda je uˇzivatel pˇrihl´aˇsen a pak mu zobraz´ı jeho u ´vodn´ı str´anku, nebo pokud nen´ı pˇrihl´aˇsen, tak vrac´ı hlavn´ı str´anku aplikace s pˇrihlaˇsovac´ım a registraˇcn´ım formul´ aˇrem. V pˇr´ıpadˇe POST metody, rozliˇsuje POST formul´ aˇre s pˇrihl´aˇsen´ım a vykon´ av´a pˇrihlaˇsovac´ı proces nebo POST registraˇcn´ıho formul´ aˇre a vykon´ av´a registraˇcn´ı proces. profile(request): star´ a se o uˇzivatelsk´e profily. Pokud je poˇzadavkem metoda GET, tak vrac´ı profilov´ y formul´ aˇr uˇzivatele s pˇredvyplnˇen´ ymi hodnotami, pokud je poˇzadavkem metoda POST, tak uloˇz´ı hodnoty pro uˇzivatelsk´ y profil. a profilov´e handle uploaded image(file,username,image name): ukl´ad´ obr´ azky jednotliv´ ych uˇzivatel˚ u. user(request,user id): star´ a se o zobrazov´an´ı profil˚ u ostatn´ıch uˇzivatel˚ u. D´ ale jsou v aplikaci accounts rozˇs´ıˇreny funkce password change a password change done z django.contrib.auth.views tak, aby pos´ılaly nˇekter´e dodateˇcn´e promˇenn´e do ˇsablon.
29
Uk´azkov´a ˇc´ast 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’) Uk´azka zahrnuje ˇc´ast k´odu, kter´a se star´ a o pˇrihl´aˇsen´ı uˇzivatele. Nutno podotknout, ˇze funkce authenticate a login jsou definovan´e v jednom z modul˚ u Djanga, tud´ıˇz vlastn´ı pr´ace na sloˇzit´em procesu, jako pˇrihlaˇsov´an´ı uˇzivatel˚ u do aplikace, je v pˇr´ıpadˇe pouˇzit´ı tohoto frameworku minim´aln´ı.
4.4
Aplikace points
Aplikace points umoˇzn ˇuje vˇsem registrovan´ ym uˇzivatel˚ um ukl´ad´ an´ı zaj´ımav´ ych bod˚ u/m´ıst po cel´em svˇetˇe (na cel´e mapˇe). Aplikace se star´ a o jejich uloˇzen´ı, editaci, pˇr´ıpadn´e smaz´ an´ı a z´aroveˇ n umoˇzn ˇuje jejich prohled´av´an´ı. Zaloˇzit z´ajmov´ y bod m˚ uˇze jen registrovan´ y uˇzivatel. Pˇri zaloˇzen´ı bodu je nutn´e vyplnit orientaˇcn´ı n´azev bodu, vybrat kategorii bodu z nˇekolika moˇznost´ı (ubytov´an´ı, obˇcerstven´ı, pˇr´ırodn´ı pam´atky, historick´e pam´atky, stopov´an´ı a ostatn´ı) a vyplnit souˇradnice nebo kliknout do mapy pro automatick´e vyplnˇen´ı souˇradnic. D´ ale je moˇzn´e pˇridat podrobnˇejˇs´ı popis bodu a pˇrid´ avat k nˇemu fotografie. Pˇri pˇrid´ an´ı bodu do datab´ aze se automaticky ˇ urˇc´ı st´at, v pˇr´ıpadˇe Cesk´e republiky i kraj, ve kter´em bod leˇz´ı. Registrovan´ ym i neregistrovan´ ym uˇzivatel˚ um je umoˇznˇeno vyhled´ avat 30
v seznamu bod˚ u. Vyhled´av´an´ı je umoˇznˇeno na z´akladˇe polohy, pˇr´ıpadnˇe kategorie, kter´ a byla bodu pˇriˇrazena. Uˇzivatel´e mohou editovat a mazat jen vlastn´ı z´ajmov´e body.
4.4.1
Modely
V souboru models.py jsou definov´any 4 modely. Modely Kraje a WorldBorders byly automaticky vytvoˇreny z dat, respektive naplnˇeny vektorov´ ymi daty ve form´ atu ESRI Shapefile. Zbyl´e dva modely Points a PointsImages byly novˇe zadefinov´any a jsou plnˇeny samotn´ ymi uˇzivateli. Uk´azka definice model˚ u Points a PointsImages: ALL_CHOICES = ( (1,’ubytov´ an´ ı’),(2,’obˇ cerstven´ ı’),(3,’pˇ rı ´rodn´ ı pam´ atky’), (4,’historick´ e pam´ atky’),(5,’stopov´ an´ ı’),(6,’ostatn´ ı’),) class Points(models.Model): label = models.CharField(’n´ azev’, max_length=100) category = models.PositiveSmallIntegerField(’kategorie’, choices=ALL_CHOICES) description = models.TextField(’popis’, blank=True) lon = models.FloatField(’zemˇ episn´ a d´ elka (lon)’) lat = models.FloatField(’zemˇ episn´ a ˇ sı ´r ˇka (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(’Obr´ azek’, upload_to=’points/’, size=(1980,1020)) Pozn.: V´ıce informac´ı o datech uloˇzen´ych v tabulk´ ach je v sekci 4.2. 31
4.4.2
Funkce
V aplikaci points jsou pouˇz´ıv´ any tyto funkce: show point(request, point id): je prost´ a funkce, kter´a zobraz´ı podrobnosti jednoho bodu. add point(request): star´ a se o pˇrid´ av´an´ı bod˚ u. V pˇr´ıpadˇe metody GET je zobrazen pouze formul´ aˇr pro pˇrid´ an´ı bodu a v pˇr´ıpadˇe metody POST (formul´ aˇr je odesl´ an) je bod pˇrid´ an do datab´ aze. edit point(request, point id): je velice podobn´a funkci add point s jedin´ ym rozd´ılem, ˇze upravuje jiˇz pˇridan´e body. delete(request, point id): maˇze body z datab´ aze. all(request): obstar´ av´a vyhled´ av´an´ı bod˚ u na z´akladˇe parametr˚ u odeslan´ ych ve vyhled´ avac´ım formul´ aˇri. a obr´ azky k handle uploaded image(point id,image name,file): ukl´ad´ jednotliv´ ym bod˚ um.
4.5
Aplikace rides
Posledn´ı aplikac´ı v projektu Stopaˇr je aplikace rides, kter´a se star´ a o spr´avu spoluj´ızd. Aplikace je sv´ ymi funkcemi podobn´a aplikaci points. Umoˇzn ˇuje pˇrid´ av´an´ı spoluj´ızd, jejich editaci, vyhled´ av´an´ı a maz´ an´ı. Vˇsechny ˇcinnosti, kromˇe vyhled´ av´an´ı, jsou podm´ınˇeny pˇrihl´aˇsen´ım k uˇzivatelsk´emu u ´ˇctu. Aplikace vyuˇz´ıv´ a dat z OpenStreetMap [3.5], konkr´etnˇe jen liniov´ ych ˇ e republiky, z toho samozˇrejmˇe plyne omezen´ı vyhled´ dat z u ´zem´ı Cesk´ an´ı ˇ Toto omezen´ı bylo zavedeno z d˚ trasy jen pro CR. uvodu n´ızk´e kapacity disk˚ u na serveru josef. Do budoucna je v pl´ anu rozˇs´ıˇrit aplikaci minim´alnˇe o data z cel´e Evropy. Uˇzivatel si m˚ uˇze vyhledat trasu na z´akladˇe dvou typ˚ u hodnot. Prvn´ım typem jsou GPS souˇradnice, kter´e nap´ıˇse do pol´ı, nebo se automaticky vloˇz´ı ˇ V prvn´ım pˇr´ıpadˇe po kliknut´ı do mapy. Druh´ ym typem je n´azev mˇesta v CR. se za poˇc´atek, respektive konec trasy, urˇc´ı nejbliˇzˇs´ı silnice. V druh´em pˇr´ıpadˇe si aplikace sama urˇc´ı centroid polygonu mˇesta a pot´e nejbliˇzˇs´ı silnici.
32
Trasu je moˇzn´e volit z m´ısta do m´ısta, pˇr´ıpadnˇe volit bod/mˇesto, pˇres kter´e m´ a v´est. D´ ale je potˇreba volit mezi trasou nejrychlejˇs´ı a nejkratˇs´ı. V obou pˇr´ıpadech je pro v´ ypoˇcet trasy pouˇzit algoritmus Shooting star. Nejrychlejˇs´ı trasa je urˇcena klasicky jako pod´ıl dr´ahy ku maxim´ aln´ı povolen´e (moˇzn´e) rychlosti na silnici. Kv˚ uli t´eto funkcionalitˇe musela b´ yt silniˇcn´ı s´ıt’ rychlostnˇe ohodnocena v z´avislosti na typu silnice. Zde je potˇreba pˇripomenout, ˇze OSM je komunitn´ı projekt, tud´ıˇz je pˇresnost dat z´avisl´a na uˇzivatel´ıch a nˇekdy jsou v´ ysledky viditelnˇe nepˇresn´e. Pˇri uloˇzen´ı spoluj´ızdy do datab´ aze je potˇreba jeˇstˇe zvolit datum cesty, poˇcet osob a typ cesty, neboli jestli hled´ame spolujezdce, ˇridiˇce. Z´aroveˇ n je zde moˇznost pˇridat dalˇs´ı informace k j´ızdˇe.
4.5.1
Modely
Aplikace rides zav´ad´ı do projektu Stopaˇr 4 modely: Cities: byl vytvoˇren a naplnˇen vektorov´ ymi daty ve form´ atu ESRI Shapefile. Roads: vznikl na z´akladˇe tabulky vytvoˇren´e utilitou osm2pgrouting. Vertices: vznikl stejnˇe jako model Roads. Rides: novˇe definovan´ y model pro ukl´ad´ an´ı spoluj´ızd. Uk´azka definice modelu Rides: class Rides(models.Model): city_from = models.CharField(’odkud’, max_length=35,) city_cross = models.CharField(’pˇ rez’,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
count = models.PositiveSmallIntegerField("poˇ cet m´ ıst", choices=COUNT_CHOICES) description = models.TextField("dalˇ sı ´ 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 uloˇzen´ych v tabulk´ ach je v sekci 4.2.
4.5.2
Funkce
V aplikaci rides jsou definov´any 4 hlavn´ı funkce (show ride, add, edit, delete, all), kter´e maj´ı naprosto stejnou funkcionalitu jako jim odpov´ıdaj´ıc´ı funkce v aplikaci points uveden´e v 4.4.2. D´ ale je v souboru views.py definov´ano nˇekolik pomocn´ ych funkc´ı na vyhled´ av´an´ı mˇest z GPS souˇradnic, nejbliˇzˇs´ıch silnic atd. ˇ ast programu, kter´ C´ a obstar´ av´a vyhled´ an´ı nejkratˇs´ı 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
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, kter´ a spravuje vyhled´ av´an´ı 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
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
Pl´ anovan´ a funkcionalita
Bohuˇzel v r´ amci bakal´aˇrsk´e pr´ace nebylo moc ˇcasu. St´avaj´ıc´ı aplikace je sice funkˇcn´ı ve vˇsech smˇerech, kter´e byly na zaˇc´atku vytyˇceny, ale bohuˇzel zat´ım nepˇrin´ aˇs´ı nˇeco zcela nov´eho, co by pˇresvˇedˇcilo vˇetˇs´ı mnoˇzstv´ı lid´ı k jej´ımu uˇz´ıv´ an´ı. Aplikace z´aroveˇ n nen´ı dostateˇcnˇe uˇzivatelsky pˇr´ıvˇetiv´ a, aby obst´ ala v dneˇsn´ıch poˇzadavc´ıch uˇzivatel˚ u. Co se t´ yˇce uˇzivatelsk´e pˇr´ıvˇetivosti, tak je zde neust´ ale co zlepˇsovat. C´ılem je usnadˇ novat uˇzivatel˚ um ovl´ ad´ an´ı aplikace tak, aby byla rychlejˇs´ı, intuitivnˇejˇs´ı a pˇrehlednˇejˇs´ı. V budoucnu by tedy bylo dobr´e rozˇs´ıˇrit funkcionalitu aplikace o interaktivnˇejˇs´ı vyhled´ av´an´ı tras, sp´ıˇse tedy editaci, kdy uˇzivatel bude moci pˇr´ımo editovat trasu na mapˇe pomoc´ı myˇsi. Rovnˇeˇz by bylo vhodn´e pˇredˇelat celkovˇe vzhled aplikace. Nyn´ı je sice aplikace pˇrehledn´ a, ale nen´ı pˇr´ıliˇs l´ıbiv´ a. Bohuˇzel tento u ´kol je sp´ıˇse pro profesion´ aln´ı grafiky, respektive web-designery. Jak bylo zm´ınˇeno na zaˇc´atku t´eto kapitoly, z pohledu funkcionality je v pl´ anu pˇridat podporu pro vkl´ad´ an´ı tras, napˇr´ıklad cyklotras nebo tras pro koleˇckov´e brusle, d´ale moˇznost vkl´adat cel´e z´ajezdy, ke kter´ ym si bude uˇzivatel moci pˇrid´ avat cestovn´ı z´apisky, fotky a dalˇs´ı vˇeci. Vˇse by mˇelo b´ yt sd´ıleno mezi uˇzivateli, kteˇr´ı si budou moci jednotliv´e prvky komentovat a hodnotit. D´ ale by bylo vhodn´e rozˇs´ıˇrit aplikaci o funkce, kter´e by exportovaly data vloˇzen´ a uˇzivateli a ta by se n´aslednˇe vkl´adala do datab´ aze OSM. T´ımto by projekt Stopaˇr pomohl v rozˇsiˇrov´an´ı komunitn´ıho projektu OSM, kter´emu vdˇeˇc´ı za z´akladn´ı data. Na z´avˇer jen zm´ın´ım vˇeci, kter´e by bylo dobr´e implementovat. Je to napˇr´ıklad lokalizace do v´ıce jazyk˚ u, pˇrid´ an´ı v´ıce mapov´ ych vrstev (napˇr´ıklad Google Maps) nebo napojen´ı na dalˇs´ı projekty (Facebook, Picasa, Foursquare).
36
Kapitola 5
Z´ avˇ er C´ılem t´eto pr´ace bylo navrhnout a implementovat webovou aplikaci pro stopaˇre s pouˇzit´ım frameworku Django. C´ıl byl v´ıcem´enˇe splnˇen u ´spˇeˇsnˇe, aplikace byla naprogramov´ana, je funkˇcn´ı a bˇeˇz´ı na serveru josef.fsv.cvut.cz. Jej´ı pouˇzitelnost pro ˇsirˇs´ı veˇrejnost je jiˇz ot´ azkou diskuze. Aplikace Stopaˇr v souˇcasn´e podobˇe umoˇzn ˇuje n´avˇstˇevn´ık˚ um moˇznost registrace a vytvoˇren´ı vlastn´ıho uˇzivatelsk´eho profilu, na kter´ y je nav´az´ano n´asledn´e ukl´ ad´ an´ı zaj´ımav´ ych bod˚ u a tak´e vyhled´ av´an´ı a ukl´ad´ an´ı tras, respektive spoluj´ızd at’ z pohledu ˇridiˇce, tak z pohledu spolujezdce. Neregistrovan´ı uˇzivatel´e mohou pouze prohl´ıˇzet profily uˇzivatel˚ u, jednotliv´e body a spoluj´ızdy. Framework Django, kter´ y byl pouˇzit pˇri tvorbˇe aplikace, je postaven´ y na programovac´ım jazyku Python a dok´aˇze pracovat s nˇekolika datab´ azov´ ymi syst´emy. D´ ale byla pouˇzita nadstavba GeoDjango, kter´a rozˇsiˇruje framework o moˇznost pr´ace s geoprostorov´ ymi daty. Framework tak integruje vˇsechny n´astroje potˇrebn´e k ukl´ ad´ an´ı, zpracov´an´ı a zobrazov´an´ı geoprostorov´ ych dat a d´ıky dodrˇzov´an´ı standard˚ u je jeho propojen´ı s n´astroji jako OpenLayers velice snadn´e. Django vˇsak nen´ı dokonal´e. Jako nev´ yhody Djanga bych zm´ınil hlavnˇe tˇeˇzkop´ adnou pr´aci s grafick´ ym pˇrizp˚ usoben´ım formul´ aˇrov´ ych pol´ı a tak´e s javascriptem. Mezi nejvˇetˇs´ı pˇrednosti Djanga patˇr´ı jednotn´ y a optimalizovan´ y pˇr´ıstup k datab´ azi, komplexn´ı spr´ ava uˇzivatelsk´ ych u ´ˇct˚ u a efektivn´ı ˇsablonovac´ı syst´em. Pouˇzit´ım frameworku Django byla pr´ace znaˇcnˇe ulehˇcena. Program´ ator se nauˇc´ı pracovat s frameworkem pomˇernˇe rychle, hlavnˇe d´ıky mnoˇzstv´ı
37
pˇr´ıklad˚ u, kter´e jsou k dispozici na webu a d´ıky podrobn´e a pˇrehledn´e dokumentaci, kter´ a je k nahl´ednut´ı na ofici´ aln´ıch str´ank´ ach projektu. V´ yhodou je tak´e ˇsirok´ a komunita ochotn´ ych uˇzivatel˚ u, kteˇr´ı r´adi porad´ı s jak´ ymkoliv probl´emem.
38
Seznam pouˇ zit´ ych zdroj˚ u ˇ AK, ´ Pavel. Hrajeme si s Djangem [online]. 2009 [cit. 2010-04-20]. [1] DVOR Dostupn´e z WWW: http://zdrojak.root.cz/serialy/hrajeme-si-s-djangem/. [2] Georepublic [online]. 2010 [cit. 2010-05-01]. Georepublic - pgRouting. Dostupn´e 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, Uˇcebnice jazyka Python. 2002. 90 s. [5] Hunt, Andrew; THOMAS, David. The Pragmatic Programmer. 1999. 320 s. [6] Ofici´ aln´ı dokumentace projektu Django [online]. 2010 [cit. 2010-04-15]. Dostupn´e z WWW: http://docs.djangoproject.com/en/dev/.
Webov´ e odkazy: [7] Webov´ y port´ al Excess http://excess.org/ [8] Javascriptov´a knihovna OpenLayers http://openlayers.org/ [9] Komunitn´ı projekt OpenStreetMap http://www.openstreetmap.org/ 39
[10] Projekt pgRouting http://pgrouting.postlbs.org/ [11] Projekt PostGIS http://postgis.refractions.net/ [12] Datab´ azov´ y syst´em PostgreSQL http://www.postgresql.org/ [13] Programovac´ı jazyk Python http://www.python.org/
40
Pˇ r´ıloha A
Uk´ azky vzhledu webov´ e aplikace Stopaˇ r
41
Obr´azek A.1: Uk´azka u ´vodn´ı str´anky.
42
Obr´azek A.2: Uk´azka str´anky s podrobnostmi o bodu.
43
Obr´azek A.3: Uk´azka str´anky s podrobnostmi o spoluj´ızdˇe.
44