Django
    Framework web para perfeccionistas com prazos




                         Igor Sobreira
                      ...
o que é um framework?




               
“é uma estrutura de suporte definida em que um outro 
     projeto de software pode ser organizado e desenvolvido”

     “...
o que é django?
        framework web escrito em python
    ●



        desenvolvido no Lowrence Journal­World
    ●



 ...
“Django is a high­level Python Web 
    framework that encourages rapid 
    development and clean, pragmatic design”




...
por que python?




            
altíssimo nível
    ●



        multiparadigma (OO, funcional e procedural)
    ●



        tipagem dinâmica e forte
   ...
“Produtividade e legibilidade”



                    
onde usar python?
    web
●


    – Django, TurboGears, Pylons. Zope, Plone, Grok...

    desktop
●


    – PyGTK, PyQT, W...
por que usar django?

        feito em Python  :­)
    ●



        MTV == MVC
    ●



        ORM (Mapeamento Objeto Rel...
separando as tarefas

    MVC (Model – View – Controller)

    MTV (Model – Template – View)



                       
organizando o código

    um projeto possui uma ou mais aplicações




DRY – Don't Repeat Yourself
                       ...
caminho de uma requisição




                 
models.py
from datetime import datetime
from django.db import models

class Image(models.Model):
  image = models.ImageFie...
models.py (2)
    BEGIN;
    CREATE TABLE quot;teste_imagequot; (
         quot;idquot; integer NOT NULL PRIMARY KEY,
    ...
models.py (3)
class Category(models.Model):
  name = models.CharField(max_length=50)


class Post(models.Model):
  title =...
models.py (4)
BEGIN;
CREATE TABLE quot;teste_categoryquot; (
   quot;idquot; integer NOT NULL PRIMARY KEY,
   quot;namequo...
persistindo os dados


    cat = Category(name = 'Django')
    cat.save()




                      
persistindo os dados (2)
post = Post( title = 'Primeira app em django',
              content = 'vamos comecar...',
      ...
acessando os dados

     p = Post.objects.all()
    [<Post: Post object>, <Post: Post object>]




                       ...
acessando os dados (2)


    p = Post.objects.filter(author = 'Igor')




                          
acessando os dados (3)


    p = Post.objects.get(id=2)




                      
urls.py
from django.conf.urls.defaults import *


urlpatters =patterns('myproject.myapp.views',
        (r'^lastest/$', 'l...
views.py
from django.shortcuts import render_to_response
from myapp.models import Post

def last_posts(request):
  posts =...
templates
        hora dos web designers :­)
    ●



        simplesmente arquivos .html com “buracos” que 
    ●


     ...
<html>
<head>
 <title> Blog - {{ post.title }} </title>
</head>
<body>
 <h1> {{ post.title }} </h1>
 <p> {{ post.content }...
templates  (2)
        variáveis
    ●


             {{ nome }}, {{ lista }}
         –

        filters
    ●


        ...
templates  (3)


<ul>
    {% for post in last_posts %}
      <li> {{ post|date:quot;d/m/Y h:iquot; }} -
           {{ post...
mais facilidades...
     formulários
    ●



     testes
    ●



     controle usuários (auth/auth)
    ●



     intern...
dando uma olhada no admin...



                  
     
     
     
     
dúvidas

      ?

       
http://www.djangoproject.com/
●




        http://www.djangobrasil.org/
●




        http://groups.google.com/group/djan...
Igor Sobreira
     www.igorsobreira.com
    ●



     http://djangopeople.net/igorsobreira
    ●



     G­Talk: v2.igor@g...
se der tempo...



              
formulários
from django import newforms as forms


class ContatoForm(forms.Form):
    nome = forms.CharField(label=u'Nome'...
Formulários (contato.html)
<form action=quot;.quot; method=quot;postquot;>
{{ form.as_p }}
<input type=quot;submitquot; va...
Formulários (views.py)
def contato(request):
     if request.method == quot;POSTquot;:
       form = ContatoForm(request.P...
Upcoming SlideShare
Loading in …5
×

Django - Framework web para perfeccionistas com prazos

2,812 views
2,754 views

Published on

Seminário de introdução ao Django no Núcleo Comunicação Digital

Published in: Education, Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,812
On SlideShare
0
From Embeds
0
Number of Embeds
239
Actions
Shares
0
Downloads
135
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Django - Framework web para perfeccionistas com prazos

  1. 1. Django Framework web para perfeccionistas com prazos Igor Sobreira www.igorsobreira.com    
  2. 2. o que é um framework?    
  3. 3. “é 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.”    
  4. 4. o que é django? framework web escrito em python ● desenvolvido no Lowrence Journal­World ● publicado em julho de 2005 ● open­source (licensa BSD) ●    
  5. 5. “Django is a high­level Python Web  framework that encourages rapid  development and clean, pragmatic design”    
  6. 6. por que python?    
  7. 7. 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 ●    
  8. 8. “Produtividade e legibilidade”    
  9. 9. onde usar python? web ● – Django, TurboGears, Pylons. Zope, Plone, Grok... desktop ● – PyGTK, PyQT, WxPython, TkInter... mobile ● – PyS60 (Symbian), PyMaemo...    
  10. 10. 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) ●    
  11. 11. separando as tarefas MVC (Model – View – Controller) MTV (Model – Template – View)    
  12. 12. organizando o código um projeto possui uma ou mais aplicações DRY – Don't Repeat Yourself    
  13. 13. caminho de uma requisição    
  14. 14. 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)    
  15. 15. models.py (2) BEGIN; CREATE TABLE quot;teste_imagequot; ( quot;idquot; integer NOT NULL PRIMARY KEY, quot;imagequot; varchar(100) NOT NULL, quot;descriptionquot; varchar(50) NOT NULL, quot;pub_datequot; datetime NOT NULL ); COMMIT;    
  16. 16. 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)    
  17. 17. models.py (4) BEGIN; CREATE TABLE quot;teste_categoryquot; ( quot;idquot; integer NOT NULL PRIMARY KEY, quot;namequot; varchar(50) NOT NULL ); CREATE TABLE quot;teste_postquot; ( quot;idquot; integer NOT NULL PRIMARY KEY, quot;titlequot; varchar(50) NOT NULL, quot;contentquot; text NOT NULL, quot;pub_datequot; datetime NOT NULL, quot;authorquot; varchar(50) NOT NULL, quot;category_idquot; integer NOT NULL REFERENCES quot;teste_categoryquot; (quot;idquot;) );     COMMIT;
  18. 18. persistindo os dados cat = Category(name = 'Django') cat.save()    
  19. 19. persistindo os dados (2) post = Post( title = 'Primeira app em django', content = 'vamos comecar...', author = 'Igor', category = cat ) post.save()    
  20. 20. acessando os dados  p = Post.objects.all() [<Post: Post object>, <Post: Post object>]    
  21. 21. acessando os dados (2) p = Post.objects.filter(author = 'Igor')    
  22. 22. acessando os dados (3) p = Post.objects.get(id=2)    
  23. 23. 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'), )    
  24. 24. views.py from django.shortcuts import render_to_response from myapp.models import Post def last_posts(request): posts = Post.objects.order_by('-date')[:5] return render_to_response('latest.html', {'posts': posts} )    
  25. 25. templates hora dos web designers :­) ● simplesmente arquivos .html com “buracos” que  ● serão preenchidos com o conteúdo passado pela  view    
  26. 26. <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>    
  27. 27. templates  (2) variáveis ● {{ nome }}, {{ lista }} – filters ● {{ nome|safe }} – {{ lista|unordered_list }} – tags ● {% for nome in lista %} {{ nome }} {% endfor %} – {% if condicao %} <b> OK </b> {% endif %} –    
  28. 28. templates  (3) <ul> {% for post in last_posts %} <li> {{ post|date:quot;d/m/Y h:iquot; }} - {{ post.title }} </li> {% endfor %} </ul>    
  29. 29. mais facilidades...  formulários ●  testes ●  controle usuários (auth/auth) ●  internacionalização (i18n) ●  AJAX ?!?! ●  feeds RSS / Atom ●  cache ●    
  30. 30. dando uma olhada no admin...    
  31. 31.    
  32. 32.    
  33. 33.    
  34. 34.    
  35. 35. dúvidas ?    
  36. 36. http://www.djangoproject.com/ ● http://www.djangobrasil.org/ ● http://groups.google.com/group/django­brasil/ ● http://djangobook.com/ ● http://www.python.org ● http://www.pythonbrasil.com.br/ ● irc.freenode.net (#django­br, #django) ●    
  37. 37. Igor Sobreira  www.igorsobreira.com ●  http://djangopeople.net/igorsobreira ●  G­Talk: v2.igor@gmail.com ●  MSN: igor@v2windcenter.com ●  IRC: igors ●    
  38. 38. se der tempo...    
  39. 39. 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)    
  40. 40. Formulários (contato.html) <form action=quot;.quot; method=quot;postquot;> {{ form.as_p }} <input type=quot;submitquot; value=quot;Enviarquot; /> </form>    
  41. 41. Formulários (views.py) def contato(request): if request.method == quot;POSTquot;: form = ContatoForm(request.POST) if form.is_valid(): # faz algo aqui... return HttpResponseRedirect(quot;/sucesso/quot;) else: form = ContatoForm() return render_to_response(quot;contato.htmlquot;,     {quot;formquot;:form})

×