Īss ieskats Django web aplikāciju platformā.

Web izstrāde patreiz piedzīvo īstu bumu. Visu mutēs ir AJAX, Web 2.0 un  Ruby on Rails , kas parādīja kā 10 minūšu laikā uzcept aplikāciju. Taču arī konkurenti nesnauž, no kuriem visspligtākais ir Django, kas ir balstīts uz Python un ļauj izveidot aplikāciju pāris minūšu laikā. Uzskatu ka Django ir labāks par Ruby on Rails kaut vai dēļ UTF-8, kas Django ir pieejams uzreiz. Pirms pāris dienām Django izlaida savu 0.95 versiju, kas būtiski atšķiras no iepriekšējās versijas. Lai dotu ieskatu šajā lieliskajā web aplikāciju veidošanas platformā, aprakstīšu, kā veidot vienkāršu blogu.

Lai uzinstalētu Django, būs nepieciešams Python (ieteicams 2.4, bet var arī 2.3) versija, kas pieejama pēc adreses www.python.org, kā arī kāda no PostgreSQL, SQLite, MySql un attiecīgo datubāzu sasaites (bindings) ar Python. Savā pamācībā izmantošu SQLite, kas pieejama pēc adreses http://initd.org/tracker/pysqlite. Instalācijas gaita ir aprakstīta šeit, tikai piebildīšu, ka var gadīties, ka netiek uzinstalēti setuptools, tad nepieciešams palaist ez_setup.py, kas atrodas instalācijas saknes direktorijā. Var gadīties arī problēmas, ja Internet Explorer Favorītos ir folderi ar latviešu simboliem, tad ieteicams tos pārdēvēt vai izdzēst.

Kad Django ir uzinstalēts, pienācis laiks izveidot aplikāciju. To var izdarīt aizejot uz vēlamo direktoriju, kur vēlaties izveidot savu projektu un palaižot django-admin.py startproject blogsite. Windows lietotājiem vajadzēs lietot absolūto ceļu, parasti c:\Python24\Lib\site-packages\Django-0.95-py2.4.egg\django\bin\django-admin.py startproject blogsite. Ja viss ir noritējis kā nākas, tad izveidosies direktorija blogsite, kur atradīsies faili, kas nepieciešami Django aplikācijai. Lai sāktu darbu, nepieciešams veikt sistēmas iestatīšanu. Lai to darītu ar jebkuru teksta redaktoru atveram failu settings.py, kas atrodas mūsu izveidotajā direktorijā blogsite, un rediģējam vērtības sekojoši:

DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'blogdb.db3'


Kad izmaiņas ir izdarītas, pienācis laiks viedot aplikāciju. Izpildam manage.py startapp blog. Tas izveido direktoriju blog ar vairākiem failiem, kuriem mēs tūlīņ ķersimies klāt. No sākuma nepieciešams izveidot datubāzes struktūru. Django to sauc par modeli. Lai sāktu modeļa veidošanu, nepieciešams atvērt failu models.py, kas atrodas jaunizveidajā direktorijā blog. Sāksim ar ierakstu modeļa izveidi. Tātad parasti blogam vajag virsrakstu un pašu tekstu, noder arī datums, kad puksts ir veikts. Tad nu rakstam:

class Article(models.Model):
    title=models.CharField(maxlength=50)
    blog_text=models.TextField()
    date_published=models.DateTimeField(default=models.LazyDate())


Tātad, ko mēs izdarījām- izveidojām Python klasi Article, kas ir mantota no klases models.Model, un kurai ir atribūti title, blog_text un date_published. Taču vēl nekas nav izveidots. Lai projekts zinātu, ka ir pievienota jauna aplikācija, nepieciešams to pievienot instalēto aplikāciju sarakstam. Lai to izdarītu, atveram settings.py un sarakstam INSTALLED_APPS galā pierakstīt “'blogsite.blog',”. Ir svarīgi ievietot komatu, kad pievieno jaunu ierakstu sarakstam. 

Tagad, kad projekts zin, kad ir vēl kāda aplikācija, nepieciešams palaist komandu manage.py syncdb. Šī ir ļoti svarīga komanda- tā iziet cauri instētajām aplikācijām un ja kāda tabula nav izveidota, izveido to. Šajā gadījumā tiek izveidotas mūsu tikko uzrakstītā tabula Article un citas standarta Django tabulas. Tāpat tiek jautāts, vai nepieciešams izveidot superlietotāju, uz ko vajag atbildēt “yes” un izveidot to, tas būs nepieciešams tālākajiem darbiem. Tagad mums ir arī datubāze un var sākt spēlēties pa nopietnam. Katram Django projektam nāk līdzi savs webserveris, kas ir laižas ar manage.py runserver. Ja palaižot netiek ziņots par ķļūdām, tad viss ir nostrādājis un pēc ievadot adresi http://127.0.0.1:8000/ (linuxam standartā: 8080) apskatītes. Patreiz gan nekā nav, tikai paziņojums, ka serveris strādā. Lai kaut kas būtu, no sākuma ir jāieraksta kāds ieraksts. Te nonākam pie viena lielākajiem Django vaļiem- administrācijas interfeisa. Lai to ievadītu, pievienojam vēl vienu ierakstu instalēto aplikāciju sarakstam- ierakstam 'django.contrib.admin'. Tagad jāizskatās šādi:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'blogsite.blog',
    'django.contrib.admin',
    )

Lai Django atpazītu jaunu aplikāciju, nepieciešams atkal palaist manage.py syncdb. Pēc tam failā urls.py, kas kalpo kā URL novadītājs pa pareizajiem ceļiem, atkomentējiet nākamo rindu pēc # Uncomment this for admin Saglabājam failu un aizejam uz http://127.0.0.1:8000/admin . Ja viss ir kārtībā, jāparādās pieslēgšanās formai. Pieslēdzieties, izmantojot izveidotā superlietotāja lietotājvārdu un paroli. Neko savā blogā vēl ierakstīt nevar, jo katram modelim nepieciešams pievienot Admin apakšklasi. Pie reizes pievienojam arī __str__ funkciju, kas nepieciešama, lai raksti smuki izsktatītos administrācijas sarakstā, kā arī get_absolute_url, kas tiek izmantota, lai noteiktu kāds ir ieraksta URLs. Papildus pievienojam arī ordering funkciju, kas paredzēta standarta kārtošanas noteiktšanai. Tagad modelis izsaktās šādi:

class Article(models.Model):

[....]

class Meta:
    ordering = ('-date_published',)

def __str__(self):
    return self.title

def get_absolute_url(self):
    return "/%s/" % str(self.id)
class Admin:
    pass


Lai izmaiņas stātos spēkā, palaižam manage.py syncdb. Atjaunojot lapu redzam, ka parādījusies vēl viena rinda Blogs, kur var ierakstīt ierakstus. Pienācis laiks ierakstīt savu pirmo ierakstu. Nospiežam “Add” rindā “Articles” un parādīsies forma ieraksta pievienošanai. Ierakstam virsrakstu un pašu tekstu un pēc tam nospiežam “Save”. Urrā, mums ir pirmais ieraksts! Bet vēl nekas nav galā, jo šo ierakstu redzam mēs, un paroli jau nu nevienam nedosim. Tāpēc nepieciešams izveidot arī lapu, ko citi var lasīt. Arī šeit Django nāk pretī, piedāvājot pamatskatus (generic views), kas padara lapu izveidošanu vienkāršu. Taču no sākuma nepieciešams izveidot URL struktūru. Parastais variants ir ka lietotājs sākumā redz sarakstu ar ierakstiem un noklikšķinot uz katra var izlasīt pilnu aprakstu. Lai to izdarītu, Django izmanto regulārās izteiksmes. Lai varētu piekļūt ierakstiem, failam urls.py jāizskatās šādi :

from django.conf.urls.defaults import *
from blogsite.blog.models import Article


blog_dict = {
    'queryset': Article.objects.all(),
}

urlpatterns = patterns('',
(r'^$', 'django.views.generic.list_detail.object_list', blog_dict),
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', dict_dict),
(r'^admin/', include('django.contrib.admin.urls')),
)


Palaižot http://127.0.0.1:8000/ tiek dots kļūdas paziņojums, kas norāda, ka vēl nepieciešams izveidot šablonu. Lai sāktu darbu ar šabloniem, vispirms nepieciešams definēt direktoriju, kur atrodas šablonu. Atveriet failu settings.py un pie TEMPLATE_DIRS ierakstiet direktoriju, kur atradīsies šabloni:

TEMPLATE_DIRS = (
      "./templates",

Tas nozīmē, ka šabloni atradīsies apakšdirektorijā templates. Tad nu pienācis laiks izveidot pirmo šablonu. Django šablonu valoda ir vienkārša un paredzēta lai HTML lapu veidotāji varētu ar to strādāt. Mainīgie tiek apzīmēti ar {{mainīgais}}, bet dažādi nosacījumi ar {% if True %}. Izveidojam šādu šablonu un saglabājam kā article_list.html šablonu direktorijas apakšdirektorijā blogs:

{% if object_list %}

<ul>
{% for article in object_list %}
<a href="{{article.id}}">
<li>{{ article.title }}</li>
</a>
{% endfor %}
</ul>
{% else %}
<p>nav nekā.</p>
{% endif %}


Tagad pienācis laiks arī pašam rakstam. Izveidojam šādu failu un saglabājam ka article_detail.html:

<h1>{{ object.title }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<p>
{{object.blog_text}}
</p>
Publicēts:{{object.date_published}}

Noklikšķinot uz saites, jāparādās ierakstam, kas tika ierakstīts izmantojot administrācijas interfeisu un adresei jābūt http://127.0.0.1:8000/1/


Apsveicu, Jūs esat izveidojuši vienkāršu blogu!

Taču Jūs gribat, lai visi varētu ierakstīt komentārus cik superīgs ir šis blogs, tāpēc var izmantot nedokumentēto iespēju- komentārus. Lai to izdarītu, nepieciešams no sākuma INSTALLED_APPS sarakstam pievienot komentāru aplikāciju.


INSTALLED_APPS = (
[...]
'django.contrib.comments',
)


Pēc tam failā urls.py jāpievieno šāda rinda:

(r'^comments/', include('django.contrib.comments.urls.comments')),


Pēc tam palaižam manage.py syncdb un artile_detail.html sākumā ierakstam {% load comments.comments %}, bet beigās:

{% get_free_comment_list for blog.article object.id as comment_list %}


<h2 id="comments">Komentāri</h2>
{% for comment in comment_list %}
<div class="comment_{% cycle odd,even %}" id="c{{ comment.id }}">
<span class="comnum"><a id="c{{ comment.id }}" href="#c{{ comment.id }}">#{{ forloop.counter }}</a></span>
<p><b>{{ comment.person_name }}</b> {{ comment.submit_date|date:"P" }} datumā komentēja :</p>
{{ comment.comment|escape|urlizetrunc:40|linebreaks }}
</div>
{% endfor %}
<h2>Ierakstīt komentāru</h2>

{% free_comment_form for blog.article object.id %}


    Pēc tam nepieciešams izveidot vairākus šablonus. Pirmais ir komentāra ievietošanas šablons. Izveidojiet direktoriju comments šablonu direktorijā un izveidojiet failu freeform.html, kurā ierakstiet:

{% if display_form %}

<form action="/comments/postfree/" method="post">
<p>Vārds: <input type="text" id="id_person_name" name="person_name" /></p>
<p>Komentārs:<br /><textarea name="comment" id="id_comment" rows="10" cols="60"></textarea></p>
<input type="hidden" name="options" value="{{ options }}" />
<input type="hidden" name="target" value="{{ target }}" />
<input type="hidden" name="gonzo" value="{{ hash }}" />
<p><input type="submit" name="preview" value="Pirmsskatīt komentāru" /></p>
</form>
{% endif %}


Nākamais ir komentāra apstiprināšanas šablons. Izveidojiet failu free_preview.html un ierakstiet tur:

<h1>Komentāra pirmsskate</h1>
<form action="../postfree/" method="post">
{% if comment_form.has_errors %}
<p><strong style="color: red;">Izlabojiet kļūdas.</strong></p>
{% else %}
<div class="comment">
{{ comment.comment|escape|urlizetrunc:"40"|linebreaks }}
<p class="date small">Posted by <strong>{{ comment.person_name }}</strong></p>
</div>
<p><input type="submit" name="post" value="Post public comment" /></p>

<h1>ja nepatīk, var labot</h1>
{% endif %}
{% if comment_form.person_name.errors %}
{{ comment_form.person_name.html_error_list }}
{% endif %}


<p><label for="id_person_name">Vārds:</label> {{ comment_form.person_name }}</p>
{% if comment_form.comment.errors %}
{{ comment_form.comment.html_error_list }}
{% endif %}
<p>
<label for="id_person_name">Komentārs:</label>
<br />
{{ comment_form.comment }}
</p>
<input type="hidden" name="options" value="{{ options }}" />
<input type="hidden" name="target" value="{{ target }}" />
<input type="hidden" name="gonzo" value="{{ hash }}" />
<p>
<input type="submit" name="preview" value="Pirmsskatīt laboto komentāru" />
</p>
</form>


Kā pēdējais ir komentāra sekmīgas pievienošanas šablons. Izveidojiet failu posted.html un ierakstiet tajā:

<h1>Komentārs sekmīgi pievienots</h1>


{% if object %}
<ul>
<li><a href="{{ object.get_absolute_url }}">Apskatīt komentāru</a></li>
</ul>
{% endif %}

Ja viss ir izdevies sekmīgi, tad var ievietot komentāru, to apskatīt un tad apstiprināt. Pie paša raksta parādās komentāri ar to saitēm. Ar to arī pabeigšu pamācības pirmo daļu. Ja būs atsaucība, tad noteikti rakstīšu vēl, jo blogam vēl daudz kas pietrūkst. Iesaku arī apskatīt Django dokumentāciju un it sevišķi pamācību četrās daļās, kas spilgti raksturo Django iespējas.

Tiem, kam gribas visu izmēģināt uzreiz vai ir kādas neskaidrības un problēmas, var lejupielādēt izejas kodu(BSD licence).

©viestards.tosteris.com