Vous êtes sur la page 1sur 45

O framework web para perfeccionistas com prazos Django facilita o desenvolvimento de aplicaes web com mais qualidade e menos

cdigo

Alexandre D. Rogoski Exata T.I.


alexandre@exatati.com.br

Quem sou eu?

Desenvolvedor Python; Administrador de Sistemas/Redes; Embaixador da Comunidade openSUSE; Contribuidor openSUSE/Novell.

Python

Linguagem de programao de alto-nvel; Interpretada, interativa e orientada a objetos; Tipagem forte e dinmica; Identao obrigatria = cdigo legvel.

O que Django?

Django um framework Python de alto-nvel que estimula o desenvolvimento rpido e limpo, com design objetivo e realista. Um framework Web de alto-nvel um software que facilita e torna menos doloroso o processo de construo de sites dinmicos. Abstrai problemas comuns do desenvolvimento Web e oferece atalhos para tarefas de prograo frequentes; DRY Don't Repeat Yourself.

... um framework Python de alto-nvel ...


Um framework deve abordar questes comuns como:

Prover um mtodo de mapeamento entre as URLs solicitadas e o cdigo que manipula as requisies; Tornar mais fcil a exibio, validao e reexibio de formulrios HTML; Converter a entrada do usurio em tipos de dados que podem ser manipulados convenientemente; Separar o contedo da apresentao atravs de um sistema de templates; Integrar-se com camadas de armazenamento; Permitir que voc trabalhe de forma mais produtiva, em um nvel maior de abstrao.

... que estimula o desenvolvimento rpido ...

Independentemente de quantos poderosos recursos ele tenha, um framework Web intil se no lhe poupar tempo.

A produtividade do Django em grande parte graas aos benefcios do Python:

Linguagem interpretada; Tipada dinamicamente; Concisa mas expressiva; Introspeco poderosa e meta-programao.

Django aproveita as vantagens proporcionadas pelo Python para acelerar o desenvolvimento de aplicaes web.

... e limpo, com design objetivo e realista.

Acima de tudo, Django tenta:

Tornar mais fcil fazer as coisas do jeito certo; Incentivar fraco acoplamento.

Histria

Batizado com o nome de Django Reinhardt; Desenvolvido por Adrian Holovaty e Jacob Kaplan-Moss no World Online News; Declarado OpenSource em 2005; Primeira verso lanada em 3 de setembro de 2008; Sua pronncia JANG-oh. Com D mudo.

Abordagem No-To-Limpa
<html> <head><title>MeusAmiguinhos</title></head> <body> <h1>MeusAmigos</h1> <ul> <?php $connection=@mysql_connect("localhost","my_username", "my_pass"); mysql_select_db("my_database"); $people=mysql_query("SELECTname,ageFROMfriends"); while($person=mysql_fetch_array($people,MYSQL_ASSOC)){ ?> <li> <?phpecho$person['name']?>tem<?phpecho$person['age']?> anosdeidade. </li> <?php}?> </ul> </body> </html>

Abordagem No-To-Limpa

Quais so os problemas dessa abordagem?


A apresentao est vinculada ao cdigo; O cdigo do banco de dados est vinculado lgica de negcios; A URL acoplada ao cdigo (determina o nome do arquivo a ser exibido; Parmetros do banco de dados hard-coded; Nvel muito-baixo. Para aplicaes de grande porte a complexidade escalona-se surpreendentemente.

Arquitetura do Framework

Django um framework MVC, interpretado de forma livre. Componentes Principais:

Core (Framework HTTP); Mapeador Objeto-Relacional (ORM); Template Engine; Lembre-se, os componentes do Django so fracamente acoplados, de modo que cada pea pode ser usada separadamente ou substituda por um equivalente de terceiros.

Arquitetura do Framework: Core


O Core proporciona:

Mecanismo padronizado para tratamento de requisies HTTP; Mquina de mapeamento URL; Integrao do servidor de Web com mltiplos backends (Apache + mod_python, FastCGI, ...); Aplicativos Web construdos com Django encaixamse nesse componente para lidar com solicitaes HTTP.

Projetos e Aplicaes
Como os sitemas em Django so organizados?

Cada sistema composto por uma ou mais aplicaes; Aplicaes so agrupadas em um projeto, embora no seja obrigatrio. Projetos so uma forma de representao amigvel; Cada site usa um nico arquivo de configuraes, normalmente chamado settings.py, que diz ao Django que aplicativos usar e como us-los; O arquivo de configurao tambm tem uma grande variedade de configuraes do sistema.

O que uma aplicao?

Possui views para lidar com solicitaes HTTP; URLconf's para mapear solicitaes de URL em views; Modelos para fcil integrao ao banco de dados; Templates para simplificar gerao de cdigo HTML e porporcionar isolamento entre apresentao e lgica de negcios.

django-admin.py
Django fornece uma ferramenta de linha de comando simples que, entre outras coisas, torna mais fcil criar os esqueletos de projeto e aplicao. Por exemplo, para criar um novo projeto:
$djangoadmin.pystartprojectexemplo $cdexemplo&&ls __init__.pymanage.pysettings.py urls.py

manage.py
manage.py um utilitrio que vem com o esqueleto de projeto padro.

Envolve grande parte da mesma funcionalidade do django-admin.py, mas assume que voc est interessado no projeto do diretrio atual. Este apenas um atalho para o projeto ao qual pretende trabalhar, para no ter que ser especificado em cada comando.

Primeiros Passos
Django torna mais fcil ter um servidor de desenvolvimento iniciado e executando.

Simples de usar, zero de configurao; Thread nica, processo nico; Fornece relatrio de erro verbose (e muito!). No para uso em produo!

Views
O que so views?

Views so simplesmente funes Python; Views tm pelo menos um argumento, um objeto HttpRequest; Views devem ou retornar um objeto HttpResponse ou uma exceo apropriada.
importrandom fromdjango.httpimportHttpResponse defrandom_number(request): x=random.randint(0,999) html='<html><body><p>Seunmerodasorte: %u</p></body></html>'%x returnHttpResponse(html)

URLconf's

Uma vez definida a view s precisamos dizer ao Django onde ela vive no espao URL; Fazemos isso com um URLconf, geralmente chamado urls.py.
fromdjango.conf.urls.defaultsimport* urlpatterns=patterns('', (r'^random_number/$', 'randomness.views.random_number'), )

Como URLConf's funcionam?


Django URL dispatcher responsvel por ler o URLconf e fazer algo de til com ele:

Uma URLconf so pares de expresso regular com views; Quando uma solicitao recebida, o URL dispatcher tenta corresponder cada expresso regular com a URL solicitada; As expresses regulares so julgados em ordem, de cima para baixo; Quando encontrada uma regex que corresponde URL solicitada, essa view usada para processar a requisio.

Exemplo de URLConf

Uma requisio para /eventos/2006/:


urlpatterns=patterns('', ('^$',views.homepage), ('^/sobre/$',views.sobre), ('^/eventos/$',views.cal_archive), ('^/eventos/(200\d)/$',views.cal_year), ('^/eventos/(200\d)/(\d\d)/$', views.cal_month), )

Mais sobre URLconf's


Algumas coisas mais sobre URLconf:

Normalmente, cada aplicao contendo views possui sua URLconf (urls.py), e uma entrada no URLconf do projeto; URLconf's por aplicao podem ser usadas para manter as aplicaes auto-contidas, ento o URLconf do projeto pode incluir cada uma das URLconf's das aplicaes; Mas apenas a URLconf do projeto realmente necessria, ela pode mapear qualquer URL a uma view.

Primeira Configurao
settings.py: ROOT_URLCONF='exemplo.urls'

Para alguns sistemas Django o arquivo de configuraes ser muito extenso. Mas para este exemplo, entretanto, to pequeno que requer apenas o ROOT_URLCONF.

Primeiro Cdigo Web


urls.py: fromdjango.conf.urls.defaultsimport* urlpatterns=patterns('', (r'^random_number/$','randomness.views.random_number'), ) views.py: importrandom fromdjango.httpimportHttpResponse defrandom_number(request): x=random.randint(0,999) html='<html><body><p>Seunmerodasorte: %u</p></body></html>'%x returnHttpResponse(html)

Django ORM
No mundo Django, os modelos so a fonte oficial de todas as informaes relacionadas com a arquitetura de banco de dados e de representao.

Modelos renem:

Definio do esquema do banco de dados; Definio programtica dos objetos (seu comportamento).

Modelos

Definio explcita no cdigo, sem introspeco em tempo de execuo:


Desempenho; Metadados Ricos; Agnstico ao Banco de Dados.

Mais em Modelos
O modelo para os modelos:

A classe model representa uma tabela do banco de dados; Cada instncia de classe representa uma linha na tabela; Cada classe do modelo automaticamente recebe alguns atributos especiais para fornecer funcionalidade de banco de dados, como consultas.

Exemplo de Modelos

fromdjango.dbimportmodels classAuthor(models.Model): firstname=models.CharField(max_length=256) lastname=models.CharField(max_length=256) classBook(models.Model): title=models.CharField(max_length=256) author=models.ForeignKey(Author)

Inicializando o Banco de Dados


O banco de dados automaticamente inicializado com o comando "manager.py syncdb".

As tabelas necessrias para todos os aplicativos instalados so criadas; Os dados iniciais so inseridos, se os aplicativos possuirem algum; Hooks especficos dos aplicativos so inicializados.

Concretizando os Modelos

classAuthor(models.Model): firstname=models.CharField(max_length=256,blank=False) lastname=models.CharField(max_length=256,blank=False) classMeta: unique_together=( ('firstname','lastname'), ) def__str__(self): return'%s%s'%(self.firstname,self.lastname)

Concretizando os Modelos

classBook(models.Model): title=models.CharField(max_length=256,blank=False) author=models.ForeignKey(Author) classMeta: unique_together=( ('title','author'), ) def__str__(self): return'%sby%s'%(self.title,str(self.author))

O Admin Mumbo Jumbo

Django Admin Site!!!

O Sistema

Temos modelos, agora precisamos de views, URLconf e alguns templates. Aprendendo sobre templates rapidamente...

Django Templates
A engine de templates Django similar em algumas maneiras outras engines (e.x.: Smarty):

Uma linguagem simples para aplicar lgica de exibio marcao. extensvel. Ele pode ser usado para mais do que apenas HTML: emails, as exportaes CSV, JSON, XML, ... Soluo Out-of-the-box, no tem habilidade para afetar o estado da aplicao, escrever no banco de dados, chamar funes Python diretamente, ...

Template Simples

<html> <head><title>{{book}}</title></head> <body> <h1>{{book}}</h1> <p>Esteumlivro:</p> <table> <tr><th>Ttulo:</th><td>{{book.title}}</td></tr> <tr><th>Autor:</th><td>{{book.author}}</td></tr> </table> </body> </html>

Como os templates funcionam?


Princpios de renderizao de templates:

Cdigo Python (normalmente a funo da view) o faz processamento; O modelo encontrado pelo nome e carregado; Um Contexto criado; isto uma coleo de objetos e variveis que sero representadas no template; O Contexto renderizado no template com uma nica chamada de funo.

Nosso Sistema

Agora podemos concluir nosso sistema.

As Views
views.py: fromdjango.httpimportHttpResponse,Http404 fromdjango.templateimportloader,Context frommybooks.booksimportmodels defbook_list(request): books=models.Book.objects.all() c=Context({'books':books}) t=loader.get_template('book_list.html') returnHttpResponse(t.render(c)) defbook_detail(request,id): try: book=models.Book.objects.get(id=id) exceptmodels.Book.DoesNotExist: raiseHttp404 c=Context({'book':book}) t=loader.get_template('book_detail.html') returnHttpResponse(t.render(c))

O URLConf
urls.py:
fromdjango.conf.urls.defaultsimport* urlpatterns=patterns('', (r'^books/$', 'mybooks.books.views.book_list'), (r'^books/(?P<id>[09]+)/$', 'mybooks.books.views.book_detail'), (r'^admin/', include('django.contrib.admin.urls')), )

Os Templates

base.html:
<html> <head> <title>{%blocktitle%}Ttulo{%endblock%}</title> </head> <body>{%blockbody%}Corpo{%endblock%}</body> </html>

Os Templates
book_list.html: {%extends"base.html"%} {%blocktitle%}MeusLivros{%endblock%} {%blockbody%} {%ifbooks%} <p>Estessoalgunsdoslivrosdaminhacoleo:</p> <ul> {%forbookinbooks%} <li><ahref="{{book.id}}">{{book}}</a></li> {%endfor%} </ul> {%else%} <p>Eunotenhoumacoleodelivros!</p> {%endif%} {%endblock%}

Os Templates
book_detail.html: {%extends"base.html"%} {%blocktitle%}{{book}}{%endblock%} {%blockbody%} <p>Esteumdosmeuslivros:</p> <table> <tr> <th>Ttulo:</th> <td>{{book.title}}</td> </tr> <tr> <th>Autor:</th> <td>{{book.author}}</td> </tr> </table> {%endblock%}

E Mais
Isto foi apenas o bsico, o Django cria muito mais recursos impressionantes que realmente maximizam sua produtividade:

Processamento de formulrios, validao, Ajax, Unit Testing, sesses, cookies, CSRF, ...; Vises genricas: O sistema poderia ter sido criado sem escrever uma nica viso (e cdigo HTML); Conectando aplicativos plugveis de terceiros voc consegue recursos sofisticados de graa! Django est em melhoria contnua e o conjunto de recursos continua a crescer.

Outros Recursos

http://www.djangoproject.com http://docs.djangoproject.com http://www.djangobrasil.org http://www.aprendendodjango.com.br http://www.djangobook.com http://djangoadvent.com http://www.python.org IRC: #django e #django-br ML: django-users@googlegroups.com djangobrasil@googlegroups.com

Perguntas?

Obrigado a todos!

Vous aimerez peut-être aussi