django - webes keretrendszer mindenkinek

Post on 24-May-2015

5.335 Views

Category:

Technology

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

@ Linux Akadémia 2008. Szerencs, 2008. július 11.

TRANSCRIPT

webes keretrendszerhatáridőkkel rendelkező

perfekcionistáknak

Farkas SzilveszterLinux Akadémia 2008

Szerencs, 2008. július 11.

webes keretrendszermindenkinek

Farkas SzilveszterLinux Akadémia 2008

Szerencs, 2008. július 11.

tartalomwebes keretrendszerek

módszertanokpéldákPython

gyorstalpaló

tartalomdjango története

alapokbeépített szolgáltatásokkiegészítő szolgáltatások

hasznos alkalmazásoksaját alkalmazás készítése

webes keretrendszerekáltalános tudnivalók

Ruby on Rails2004. július, David Heinemeier Hansson

Basecampbasecamphq.com

A List Apartalistapart.com

Twittertwitter.com

Githubgithub.com

módszertanok

DRY„Don’t Repeat Yourself”

MVC

MVCModel

MVCView

MVCController

automatizmus

példák

RubyMerb, Ruby on Rails

PHPCakePHP, Doctrine, Symfony

PythonDjango, Pylons, TurboGears, Zope

Python

Python programozásSzalay Attila

?

objektumorientált

struktúrált kód

könnyen tanulható

platformfüggetlen

rengeteg modulPython Package Index (PyPI)

interaktív shell/usr/bin/python, IPython

The Zen of Python

>>> import thisThe Zen of Python, by Tim Peters

Beautiful is better than ugly.Explicit is better than implicit.Simple is better than complex.Complex is better than complicated.Flat is better than nested.Sparse is better than dense.Readability counts.Special cases aren't special enough to break the rules.Although practicality beats purity.Errors should never pass silently.Unless explicitly silenced.In the face of ambiguity, refuse the temptation to guess.There should be one-- and preferably only one --obvious way to do it.Although that way may not be obvious at first unless you're Dutch.Now is better than never.Although never is often better than *right* now.If the implementation is hard to explain, it's a bad idea.If the implementation is easy to explain, it may be a good idea.Namespaces are one honking great idea -- let's do more of those!

gyorstalpaló

tagolás

a = 5if a > 5: print "A nagyobb, mint 5."else: print "A nem nagyobb, mint 5."

függvénydefiníció

def fuggveny(a, b=3): print "Az eredmény:", a + b return a + b

osztálydefiníció

class Osztaly(OsOsztaly): tagvaltozo = 0

def __init__(self): print "Én vagyok a konstruktor."

def tagfuggveny(self, valtozo): self.tagvaltozo += valtozo def negyzet(self): return self.tagvaltozo ** 2

modulok

import sys

from subprocess import Popen

from os.path import join as pathjoin

történet

Adrian HolovatyLawrence Journal-World, Kansas

<1.0 (0.96.2)

alapok

MVC

MTV

MTVModel

MTVTemplate

MTVView

ORMobject-relational mapper

adatoknatív objektumok

lekérdezésekbeépített nyelvi elemekkel támogatva

mezőtípusokbeépített validációval

AutoFieldBooleanFieldCharField

CommaSeparatedIntegerFieldDateField

DateTimeFieldDecimalFieldEmailFieldFileField

FilePathFieldFloatFieldImageField

IntegerFieldIPAddressField

NullBooleanFieldPhoneNumberField

PositiveIntegerFieldPositiveSmallIntegerField

SlugFieldSmallIntegerField

TextFieldTimeFieldURLField

USStateFieldXMLField

kapcsolatoktöbb-egy, több-több, egy-egy

class Article(models.Model): title = fields.CharField() body = fields.TextField() submitted = fields.DateTimeField() author = fields.ForeignKey(User) published = fields.BooleanField()

sablon rendszer

alapvetően html

{% tagek %}

{% block "nev" %}Ide jöhet akármi.{% endblock %}

{% if feltetel %}Feltétel teljesült.{% else %}Nem teljesült a feltétel.{% endif %}

{{ változók }}

{{ valtozo }}

{{ objektum.tagvaltozo }}

{{ objektum.tagfuggveny }}

|szűrők

{{ datum|date:"Y. m. d." }}

2008. 07. 11.

{{ html|escape }}

<strong>Django</strong> (nem Django)

{{ meret|filesizeformat }}

234.5 MB

leszármaztatás

{% extends "base.html" %}{% block "title" %}Másik cím{% endblock %}

<head> <title>{% block "title" %}Oldal címe{% endblock %}</title></head>

base.html

extended.html

nézetek

kérés - válaszHttpRequest - HttpResponse

1. szabályHttpRequest objektumot kapunk

2. szabályHttpResponse objektumot kell visszaadnunk

def nezet(request): response = HttpResponse() return response

urlconfnézetek hozzárendelése url-ekhez

REST(ful)szép url-ek

/cikkek//cikkek/2008/07/11/linux-akademia//felhasznalok//felhasznalok/gipszjakab//uzenetek//uzenetek/1024//uzenetek/1024/szerkesztes//uzenetek/1024/torles/

urlpatterns = patterns('', (r'^cikkek/(\d{4})/$', 'oldalam.views.eves_archivum'), (r'^cikkek/(\d{4})/(\d{2})/$', 'oldalam.views.havi_archivum'), (r'^cikkek/(\d{4})/(\d{2})/(\d+)/$', 'oldalam.views.oldal_reszletek'),)

paraméterátadás

urlpatterns = patterns('', (r'^szavazasok/$', 'oldalam.szavazo.views.kezdo'), (r'^szavazasok/(?P<azon>\d+)/$', 'oldalam.szavazo.views.reszletek'), (r'^szavazasok/(?P<azon>\d+)/eredmenyek/$', 'oldalam.szavazo.views.eredmenyek'), (r'^szavazasok/(?P<azon>\d+)/szavazas/$', 'oldalam.szavazo.views.szavazas'),)

def reszletek(request, azon): sz = get_object_or_404(Szavazas, pk=azon) return render_to_response('szavazas_reszletek.html', {'szavazas': sz})

newformsűrlapok egyszerűen

mezőkhasonlóan a modellekhez

widgetek

validálásbeépített, vagy egyedi

validálásmezőnként, vagy globálisan

modell → űrlap

class ArticleForm(forms.ModelForm): class Meta: model = Article

beépített szolgáltatások

adatbázis hozzáférésMySQL, Oracle, PostgreSQL, SQLite

adatbázis hozzáféréstranzakciókezeléssel

munkamenetek(sessions)

gyorsítótárazás(caching)

honosítás(internationalization)

unicode mindenhol

lapszámozás(pagination)

szerializációXML, JSON, Python, YAML

fájlfeltöltésbármekkora fájlmérettel

middleware-ek

rövidítések(shortcuts)

tesztelés

kiegészítő szolgáltatások

authfelhasználók, csoportok és jogosultságok

adminadminisztrációs felület két sor kóddal

class Article(models.Model): title = fields.CharField() body = fields.TextField() submitted = fields.DateTimeField() author = fields.ForeignKey(User) published = fields.BooleanField()

class Article(models.Model): title = fields.CharField() body = fields.TextField() submitted = fields.DateTimeField() author = fields.ForeignKey(User) published = fields.BooleanField()

class Admin: pass

databrowse„adminisztrációs felület látogatóknak”

flatpagesstatikus oldalak

form previewűrlapon szereplő adatok megerősítése beküldés előtt

form wizardtöbblépéses űrlapok

redirectsátirányítások

sitestöbb honlap egy telepítéshez

sitemapskeresőbarát oldalszerkezet biztosítása

syndicationRSS és Atom hírforrások létrehozása

webdesignLorem Ipsum generátor

hasznos alkalmazások

django-registrationfelhasználók regisztrációjához

django-contact-formrugalmas kapcsolatfelvételi űrlap

django-taggingbármelyik modellünket címkézhetjük vele

django-openidOpenID támogatás implementációja

és még sokan mások...Google Code

saját alkalmazás készítése

1. előkészítésprojekt és alkalmazás létrehozása

2. modellezésadatmodell meghatározása

3. URL-ekmilyen címen mit szolgáltatunk

4. nézelődésnézetek leprogramozása

5. sablonaz alkalmazás kinézetének elkészítése

Köszönöm a figyelmet!http://phanatic.hu/

KöszönetTörök Gábor

http://gábor.20y.hu/django/

top related