Académique Documents
Professionnel Documents
Culture Documents
cdigo
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.
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.
Independentemente de quantos poderosos recursos ele tenha, um framework Web intil se no lhe poupar tempo.
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.
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
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
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.
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.
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'), )
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
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.
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
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
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
Concretizando os Modelos
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>
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
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!