![Page 1: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/1.jpg)
Igor SobreiraIgor Sobreirawww.igorsobreira.comwww.igorsobreira.com
Django
Framework web para perfeccionistas com prazos
![Page 2: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/2.jpg)
o que é um framework?
![Page 3: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/3.jpg)
“é uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido”
“Frameworks são projetados com a intenção de facilitar o desenvolvimento de software, habilitando designers e
programadores a gastarem mais tempo determinando as exigências do software do que com detalhes de baixo nível
do sistema.”
![Page 4: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/4.jpg)
o que é django?
● framework web escrito em python● desenvolvido no Lowrence JournalWorld● publicado em julho de 2005● opensource (licensa BSD)
![Page 5: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/5.jpg)
“Django is a highlevel Python Web framework that encourages rapid development and clean, pragmatic design”
![Page 6: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/6.jpg)
por que python?
![Page 7: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/7.jpg)
● altíssimo nível● multiparadigma (OO, funcional e procedural)● tipagem dinâmica e forte● coletor de lixo● multiplataforma● código limpo● fácil de aprender
![Page 8: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/8.jpg)
“Produtividade e legibilidade”
![Page 9: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/9.jpg)
onde usar python?● web
– Django, TurboGears, Pylons. Zope, Plone, Grok...● desktop
– PyGTK, PyQT, WxPython, TkInter...● mobile
– PyS60 (Symbian), PyMaemo...
![Page 10: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/10.jpg)
por que usar django?
● feito em Python :)● MTV == MVC● ORM (Mapeamento Objeto Relacional)● Interface de Administração automática● URLs limpas● Boa documentação (+inglês)
![Page 11: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/11.jpg)
separando as tarefas
MVC (Model – View – Controller)
MTV (Model – Template – View)
![Page 12: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/12.jpg)
organizando o código
um projeto possui uma ou mais aplicações
DRY – Don't Repeat YourselfDRY – Don't Repeat Yourself
![Page 13: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/13.jpg)
caminho de uma requisição
![Page 14: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/14.jpg)
models.py
from datetime import datetime
from django.db import models
class Image(models.Model):
image = models.ImageField(upload_to='fotos')
description = models.CharField(max_length=50)
pub_date = models.DateTimeField(default=datetime.now)
![Page 15: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/15.jpg)
models.py (2)BEGIN;
CREATE TABLE "teste_image" (
"id" integer NOT NULL PRIMARY KEY,
"image" varchar(100) NOT NULL,
"description" varchar(50) NOT NULL,
"pub_date" datetime NOT NULL
);
COMMIT;
![Page 16: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/16.jpg)
models.py (3)class Category(models.Model):
name = models.CharField(max_length=50)
class Post(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
pub_date = models.DateTimeField(default=datetime.now)
author = models.CharField(max_length=50)
category = models.ForeignKey(Category)
![Page 17: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/17.jpg)
models.py (4)BEGIN;CREATE TABLE "teste_category" ( "id" integer NOT NULL PRIMARY KEY, "name" varchar(50) NOT NULL);CREATE TABLE "teste_post" ( "id" integer NOT NULL PRIMARY KEY, "title" varchar(50) NOT NULL, "content" text NOT NULL, "pub_date" datetime NOT NULL, "author" varchar(50) NOT NULL, "category_id" integer NOT NULL REFERENCES
"teste_category" ("id"));COMMIT;
![Page 18: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/18.jpg)
persistindo os dados
cat = Category(name = 'Django')
cat.save()
![Page 19: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/19.jpg)
post = Post( title = 'Primeira app em django',
content = 'vamos comecar...',
author = 'Igor',
category = cat )
post.save()
persistindo os dados (2)
![Page 20: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/20.jpg)
p = Post.objects.all()
[<Post: Post object>, <Post: Post object>]
acessando os dados
![Page 21: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/21.jpg)
p = Post.objects.filter(author = 'Igor')
acessando os dados (2)
![Page 22: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/22.jpg)
p = Post.objects.get(id=2)
acessando os dados (3)
![Page 23: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/23.jpg)
urls.py
from django.conf.urls.defaults import *
urlpatters =patterns('myproject.myapp.views',
(r'^lastest/$', 'last_posts'),
(r'^post/(\d+)/$', 'post_details'),
(r'^contact/$', 'contact'),
)
![Page 24: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/24.jpg)
views.pyfrom django.shortcuts import render_to_responsefrom myapp.models import Post
def last_posts(request): posts = Post.objects.order_by('-date')[:5] return render_to_response('latest.html',
{'posts': posts} )
![Page 25: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/25.jpg)
● hora dos web designers :)● simplesmente arquivos .html com “buracos” que
serão preenchidos com o conteúdo passado pela view
templates
![Page 26: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/26.jpg)
<html>
<head>
<title> Blog - {{ post.title }} </title>
</head>
<body>
<h1> {{ post.title }} </h1>
<p> {{ post.content }} </p>
<small> Publicado por {{ post.author }} em
{{ post.pub_date }} </small>
</body>
</html>
![Page 27: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/27.jpg)
● variáveis– {{ nome }}, {{ lista }}
● filters– {{ nome|safe }}
– {{ lista|unordered_list }}
● tags– {% for nome in lista %} {{ nome }} {% endfor %}
– {% if condicao %} <b> OK </b> {% endif %}
templates (2)
![Page 28: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/28.jpg)
templates (3)
<ul>
{% for post in last_posts %}
<li> {{ post|date:"d/m/Y h:i" }} -
{{ post.title }} </li>
{% endfor %}
</ul>
![Page 29: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/29.jpg)
mais facilidades...● formulários
● testes
● controle usuários (auth/auth)
● internacionalização (i18n)
● AJAX ?!?!
● feeds RSS / Atom
● cache
![Page 30: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/30.jpg)
dando uma olhada no admin...
![Page 31: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/31.jpg)
![Page 32: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/32.jpg)
![Page 33: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/33.jpg)
![Page 34: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/34.jpg)
![Page 35: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/35.jpg)
dúvidas
?
![Page 36: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/36.jpg)
● http://www.djangoproject.com/
● http://www.djangobrasil.org/
● http://groups.google.com/group/djangobrasil/
● http://djangobook.com/
● http://www.python.org
● http://www.pythonbrasil.com.br/
● irc.freenode.net (#djangobr, #django)
![Page 37: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/37.jpg)
Igor Sobreira● www.igorsobreira.com
● http://djangopeople.net/igorsobreira
● GTalk: [email protected]
● MSN: [email protected]
● IRC: igors
![Page 38: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/38.jpg)
se der tempo...
![Page 39: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/39.jpg)
formulários
from django import newforms as forms
class ContatoForm(forms.Form):
nome = forms.CharField(label=u'Nome')
email = forms.EmailField(label=u'Email',
required=False)
msg = forms.CharField(label=u'Mensagem',
widget=forms.Textarea)
![Page 40: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/40.jpg)
Formulários (contato.html )
<form action="." method="post">
{{ form.as_p }}
<input type="submit" value="Enviar" />
</form>
![Page 41: Django - Framework web para perfeccionistas com prazos](https://reader030.vdocuments.mx/reader030/viewer/2022020720/556667b2d8b42aa21e8b5125/html5/thumbnails/41.jpg)
Formulários (views.py)def contato(request):
if request.method == "POST":
form = ContatoForm(request.POST)
if form.is_valid():
# faz algo aqui...
return HttpResponseRedirect("/sucesso/")
else:
form = ContatoForm()
return render_to_response("contato.html",
{"form":form})