Python, Django

Stiahnite si na začiatok virtuálny stroj tu.

Úvod do jazyka pyhton
Všetko podstatné sa dá pozrieť v dokumentácii avšak syntax v pythone je robená čím jednoduchšie a teda nebudeme musieť písať mnoho riadkov kódu aby sa nám podarilo vytvoriť funkčnú aplikáciu. Konkrétne prvky, ktoré použijeme budú vysvetlené vrámci príkladu.
Oficiálna dokumentácia k jazyku Python vo verzii 3.4 tu.

Virtualenv
Virtualenv je nástroj na tvorbu izolovaných Python prostredí. Je to vhodné, dokonca aj potrebné ak používame rôzne verzie Pythonu alebo niektorých z balíčkov. Napríklad ak máme dve aplikácie, z ktorých prvá používa Python 2.7 a druhá Python 3.5, tak použijeme tieto prostredia, v ktorých bude iná verzia jazyka Python.

Ak používame python vo verzii menšej ako je 3.3, tak potrebujeme nástroj pip, pomocou ktorého si doinštalujeme tento balíček.
sudo apt-get install python-pip
A potom môžeme nainštalovať balíček virtualenv.
sudo pip install virtualenv

V našom prípade je už priamo k dispozícii nástroj pyvenv, ktorý použijeme. (Aj keď sú s ním malé problémy.)
pyvenv-3.4 --without-pip djenv
Takto nám vznikne adresár djenv, v ktorom budeme ďalej pracovať. Musíme sa však prepnúť do tohto prostredia.
source djenv/bin/activate
A na opustenie tohto prostredia použijeme príkaz:
deactivate
V nami vytvorenom prostredí bude chýbať násroj pip a teda si ho doň dodáme. V aktivovanom prostredí zadáme:
curl https://bootstrap.pypa.io/get-pip.py | python
Potom prostredie deaktivujeme a znova aktivujeme. Teraz sme už pripravený na inštaláciu ďalších balíčkov.

Začíname s Djangom
Django je open source webový aplikačný framework napísaný v Pythone. Je "voľne" založený na modely model-view-controller. Pôvodne bol navrhnutý na správu niekoľkých spravodajských stránok z dielne The World Company.
Oficiálna dokumentácia k frameworku Django 1.8 tu.

Inštalácia Django frameworku:
pip3 install django

Teraz sme už pripravený a môžeme vytvoriť prvý Django projekt. Nazveme ho firstsite. Na jeho vytvorenie použijeme príkaz:
django-admin startproject firstsite

Takto vznikne adresár s názvom firstsite, ktorý bude obsahovať súbory pre základné nastavenia nášho projektu.

firstsite/
    manage.py
    firstsite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

Teraz máme náš prvý projekt predpripravený a po úprave nastavení v súbore settings.py a zmigrovaní základných modelov do databázy, môžeme otestovať, či náš projekt funguje správne.

python manage.py migrate

python manage.py runserver

Prvá aplikácia Nástenka
V projekte si vytvoríme prvú aplikáciu s názvom nastenka.
python manage.py startapp nastenka

Čo takú Nástenku môže tvoriť? Sú to statusy a ich komentáre. Preto si tieto dve entity zadefinujeme ako naše modely v adresáry nastenka/models.py.

from django.db import models

class Status(models.Model):
	status_text = models.CharField(max_length=150)
	status_like = models.BooleanField(default=False)
	
	def __str__(self):
		return self.status_text

class Koment(models.Model):
	status = models.ForeignKey(Status)
	koment_text = models.CharField(max_length=50)
	
	def __str__(self):
		return self.koment_text

Ďalej si zmigrujeme tieto modely do databázy.

python manage.py makemigrations nastenka

python manage.py sqlmigrate nastenka 0001

python manage.py migrate

A modely sú nasvete spolu s tabuľkami v databáze.

Admin page
Vytvoríme si admin užívateľa, cez ktorého sa prihlásime do administratývneho rozhrania. Toto rozhranie zjednodušuje a urýchluje vytvorenie niektorých funkcionalít.
python manage.py createsuperuser

Do súboru nastenka/admin.py pridáme zopár riadkov, ktorými povieme tomuto rozhraniu, aby bral do úvahy aj naše modely.

from django.contrib import admin
from .models import Status, Koment

# Register your models here.

class KomentInline(admin.StackedInline):
	model = Koment
	extra = 3

class StatusAdmin(admin.ModelAdmin):
	fields = ['status_text','status_like']
	inlines = [KomentInline]

admin.site.register(Status, StatusAdmin)

Views, urls, templates
Teraz vytvoríme konkrétne sránky, ktoré sa budú zobrazovať. Najprv si v adresári nastenka vytvoríme súbor urls.py. Pôvodný súbor s url adresami upravíme tak, že doň pridáme náveznosť na tento nový súbor.

url(r'^nastenka/', include('nastenka.urls')),

Nový súbor s url adresami vyplíme týmto kódom:

from django.conf.urls import url
from . import views

urlpatterns = [
	url(r'^$',views.index, name='index'),
	url(r'^(?P[0-9]+)/$', views.detail, name='detail'),
	url(r'^addstatus/$', views.add_status, name='add_status'),
	]

Teraz môžeme vytvoriť view, teda náhľad stránky. Každá zobrazená aj "nezobrazená" stránka má svoj view, ktorý hovorí, čo obsahuje a vykonáva. Často sú spojené spolu s templateom, ktorý uľahčuje vytváranie formy týchto stránok.

from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from .models import Status
from django.core.urlresolvers import reverse

# Create your views here.

def index(request):
	status_list = Status.objects.all()
	context = {'status_list': status_list}
	return render(request, 'index.html', context)

def detail(request, status_id):
	status = get_object_or_404(Status, pk=status_id)
	context = {'status':status}
	return render(request, 'detail.html', context)

def add_status(request):
	try:
		text = request.POST['status']
	except (KeyError):
		return render(request, 'index.html', {'message': "Nedobry status",})
	else:
		status = Status(status_text=text)
		status.save()
		return HttpResponseRedirect(reverse('index'))

Keďže používame v kóde 2 templatey, musíme si ich vytvoriť. Najprv si však vytvoríme adresár do ktorého ich dáme. Nazveme ho templates a umiestnime do adresára s aplikáciou. Prvý bude index.html a druhý detail.html.
Teraz už máme základ našej aplikácie v Djangu hotový a nastal čas na úlohy.

Úlohy:
Úloha1: Pridajte úplne novú aplikáciu do projektu a tá nech vypíše "Hello World!". (Použite HttpResponse a dajde si pozor na názvy adries, ak ich pomenujete rovnako, je potrebné použiť pri deklarácii parameter namespace a pri každom volaní url adresy použiť túto hodnotu ako predponu s dvojbodkou)
Úloha2: Pridajte formulár, ktorý bude pridávať komentáre k statusom. (Postupujte podobne ako pri pridávaní statusov)
Úloha3: Pridajte tlačidlo like/unlike a tiež obslužné views. (Je vhodné použiť 2 view metódy)

Ak bude čas tak ešte niečo málo o static files.