O framework web para perfeccionistas com prazosDjango facilita o desenvolvimento de aplicações web com maisqualidade e men...
Quem sou eu?●    Desenvolvedor Python;●    Administrador de Sistemas/Redes;●    Embaixador da Comunidade openSUSE;●   Cont...
Python●    Linguagem de programação de alto-nível;●    Interpretada, interativa e orientada a objetos;●    Tipagem forte e...
O que é Django?●   “Django é um framework Python de alto-nível que    estimula o desenvolvimento rápido e limpo, com    de...
“... um framework Python de alto-nível ...”    Um framework deve abordar questões comuns como:●   Prover um método de mape...
“... que estimula o desenvolvimento rápido ...”    Independentemente de quantos poderosos recursos ele tenha,    um framew...
“... e limpo, com design objetivo e realista.”    Acima de tudo, Django tenta:●    Tornar mais fácil fazer as coisas do je...
História●   Batizado com o nome de “Django Reinhardt”;●    Desenvolvido por Adrian Holovaty e Jacob    Kaplan-Moss no Worl...
Abordagem Não-Tão-Limpa<html><head><title>Meus Amiguinhos</title></head><body><h1>Meus Amigos</h1><ul><?php$connection = @...
Abordagem Não-Tão-Limpa●   Quais são os problemas dessa abordagem?    ●        A apresentação está vinculada ao código;   ...
Arquitetura do Framework●   Django é um framework MVC, interpretado de forma livre.    Componentes Principais:●   Core (Fr...
Arquitetura do Framework: CoreO Core proporciona:●   Mecanismo padronizado para tratamento de    requisições HTTP;●    Máq...
Projetos e AplicaçõesComo os sitemas em Django são organizados?●   Cada sistema é composto por uma ou mais    aplicações;●...
O que é uma aplicação?●   Possui views para lidar com solicitações HTTP;●    URLconfs para mapear solicitações de URL em  ...
django-admin.pyDjango fornece uma ferramenta de linha de comandosimples que, entre outras coisas, torna mais fácilcriar os...
manage.py    manage.py é um utilitário que vem com o    esqueleto de projeto padrão.●    Envolve grande parte da mesma    ...
Primeiros Passos    Django torna mais fácil ter um servidor de    desenvolvimento iniciado e executando.●    Simples de us...
Views    O que são views?●   Views são simplesmente funções Python;●   Views têm pelo menos um argumento, um objeto HttpRe...
URLconfs●   Uma vez definida a view só precisamos dizer    ao Django onde ela vive no espaço URL;●    Fazemos isso com um ...
Como URLConfs funcionam?    Django URL dispatcher é responsável por ler o URLconf e    fazer algo de útil com ele:●   Uma ...
Exemplo de URLConfUma requisição para /eventos/2006/:urlpatterns = patterns(, (^$, views.homepage), (^/sobre/$, views.sobr...
Mais sobre URLconfs    Algumas coisas mais sobre URLconf:●   Normalmente, cada aplicação contendo views possui    sua URLc...
Primeira Configuração    settings.py:    ROOT_URLCONF = exemplo.urls●    Para alguns sistemas Django o arquivo de    confi...
Primeiro Código Weburls.py:from django.conf.urls.defaults import *urlpatterns = patterns(,  (r^random_number/$, randomness...
Django ORM    No mundo Django, os modelos são a fonte    oficial de todas as informações relacionadas    com a arquitetura...
Modelos●   Definição explícita no código, sem    introspecção em tempo de execução:    ●        Desempenho;    ●   Metadad...
Mais em Modelos    O modelo para os modelos:●    A classe model representa uma tabela do    banco de dados;●    Cada instâ...
Exemplo de Modelosfrom django.db import modelsclass Author(models.Model):    firstname = models.CharField(max_length = 256...
Inicializando o Banco de Dados    O banco de dados é automaticamente    inicializado com o comando "manager.py    syncdb"....
Concretizando os Modelosclass Author(models.Model):    firstname = models.CharField(max_length = 256, blank = False)    la...
Concretizando os Modelosclass Book(models.Model):    title = models.CharField(max_length = 256, blank = False)    author =...
O Admin Mumbo Jumbo●   Django Admin Site!!!
O SistemaTemos modelos, agora precisamos de views,URLconf e alguns templates.Aprendendo sobre templates rapidamente...
Django TemplatesA engine de templates Django é similar emalgumas maneiras à outras engines (e.x.: Smarty):●   Uma linguage...
Template Simples<html>  <head><title>{{ book }}</title></head>  <body>    <h1>{{ book }}</h1>    <p>Este é um livro:</p>  ...
Como os templates funcionam?Princípios de renderização de templates:●   Código Python (normalmente a função da view) o    ...
Nosso SistemaAgora podemos concluir nosso sistema.
As Viewsviews.py:from django.http import HttpResponse, Http404from django.template import loader, Contextfrom mybooks.book...
O URLConfurls.py:from django.conf.urls.defaults import *urlpatterns = patterns(,  (r^books/$, mybooks.books.views.book_lis...
Os Templatesbase.html:<html>  <head>    <title>{% block title %}Título{% endblock %}</title>  </head>  <body>{% block body...
Os Templatesbook_list.html:{% extends "base.html" %}{% block title %}Meus Livros{% endblock %}{% block body %}  {% if book...
Os Templatesbook_detail.html:{% extends "base.html" %}{% block title %}{{ book }}{% endblock %}{% block body %}<p>Este é u...
E MaisIsto foi apenas o básico, o Django cria muito maisrecursos impressionantes que realmentemaximizam sua produtividade:...
Outros Recursos●   http://www.djangoproject.com●   http://docs.djangoproject.com●   http://www.djangobrasil.org●   http://...
Perguntas?●   Obrigado a todos!
Upcoming SlideShare
Loading in...5
×

Django

1,768

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,768
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
40
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Django

  1. 1. O framework web para perfeccionistas com prazosDjango facilita o desenvolvimento de aplicações web com maisqualidade e menos código Alexandre D. Rogoski Exata T.I. alexandre@exatati.com.br
  2. 2. Quem sou eu?● Desenvolvedor Python;● Administrador de Sistemas/Redes;● Embaixador da Comunidade openSUSE;● Contribuidor openSUSE/Novell.
  3. 3. Python● Linguagem de programação de alto-nível;● Interpretada, interativa e orientada a objetos;● Tipagem forte e dinâmica;● Identação obrigatória = código legível.
  4. 4. O que é Django?● “Django é um framework Python de alto-nível que estimula o desenvolvimento rápido e limpo, com design objetivo e realista.”● Um framework Web de alto-nível é um software que facilita e torna menos doloroso o processo de construção de sites dinâmicos. Abstrai problemas comuns do desenvolvimento Web e oferece atalhos para tarefas de progração frequentes;● DRY – Dont Repeat Yourself.
  5. 5. “... um framework Python de alto-nível ...” Um framework deve abordar questões comuns como:● Prover um método de mapeamento entre as URLs solicitadas e o código que manipula as requisições;● Tornar mais fácil a exibição, validação e reexibição de formulários HTML;● Converter a entrada do usuário em tipos de dados que podem ser manipulados convenientemente;● Separar o conteúdo da apresentação através de um sistema de templates;● Integrar-se com camadas de armazenamento;● Permitir que você trabalhe de forma mais produtiva, em um nível maior de abstração.
  6. 6. “... que estimula o desenvolvimento rápido ...” Independentemente de quantos poderosos recursos ele tenha, um framework Web é inútil se não lhe poupar tempo.● A produtividade do Django é em grande parte graças aos benefícios do Python: ● Linguagem interpretada; ● Tipada dinamicamente; ● Concisa mas expressiva; ● Introspecção poderosa e meta-programação.● Django aproveita as vantagens proporcionadas pelo Python para acelerar o desenvolvimento de aplicações web.
  7. 7. “... e limpo, com design objetivo e realista.” Acima de tudo, Django tenta:● Tornar mais fácil fazer as coisas do jeito “certo”;● Incentivar fraco acoplamento.
  8. 8. História● Batizado com o nome de “Django Reinhardt”;● Desenvolvido por Adrian Holovaty e Jacob Kaplan-Moss no World Online News;● Declarado OpenSource em 2005;● Primeira versão lançada em 3 de setembro de 2008;● Sua pronúncia é JANG-oh. Com D mudo.
  9. 9. Abordagem Não-Tão-Limpa<html><head><title>Meus Amiguinhos</title></head><body><h1>Meus Amigos</h1><ul><?php$connection = @mysql_connect("localhost", "my_username", "my_pass");mysql_select_db("my_database");$people = mysql_query("SELECT name, age FROM friends");while ( $person = mysql_fetch_array($people, MYSQL_ASSOC) ) {?><li><?php echo $person[name] ?> tem <?php echo $person[age] ?> anos de idade.</li><?php } ?></ul></body></html>
  10. 10. Abordagem Não-Tão-Limpa● Quais são os problemas dessa abordagem? ● A apresentação está vinculada ao código; ● O código do banco de dados está vinculado à lógica de negócios; ● A URL é acoplada ao código (determina o nome do arquivo a ser exibido; ● Parâmetros do banco de dados hard-coded; ● Nível muito-baixo. Para aplicações de grande porte a complexidade escalona-se surpreendentemente.
  11. 11. 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 são fracamente acoplados, de modo que cada peça pode ser usada separadamente ou substituída por um equivalente de terceiros.
  12. 12. Arquitetura do Framework: CoreO Core proporciona:● Mecanismo padronizado para tratamento de requisições HTTP;● Máquina de mapeamento URL;● Integração do servidor de Web com múltiplos backends (Apache + mod_python, FastCGI, ...); Aplicativos Web construídos com Django encaixam- se nesse componente para lidar com solicitações HTTP.
  13. 13. Projetos e AplicaçõesComo os sitemas em Django são organizados?● Cada sistema é composto por uma ou mais aplicações;● Aplicações são agrupadas em um “projeto”, embora não seja obrigatório. Projetos são uma forma de representação amigável;● Cada site usa um único arquivo de configurações, normalmente chamado settings.py, que diz ao Django que aplicativos usar e como usá-los;● O arquivo de configuração também tem uma grande variedade de configurações do sistema.
  14. 14. O que é uma aplicação?● Possui views para lidar com solicitações HTTP;● URLconfs para mapear solicitações de URL em views;● Modelos para fácil integração ao banco de dados;● Templates para simplificar geração de código HTML e porporcionar isolamento entre apresentação e lógica de negócios.
  15. 15. django-admin.pyDjango fornece uma ferramenta de linha de comandosimples que, entre outras coisas, torna mais fácilcriar os esqueletos de projeto e aplicação.Por exemplo, para criar um novo projeto:$ django­admin.py startproject exemplo$ cd exemplo && ls__init__.py  manage.py  settings.py  urls.py
  16. 16. manage.py manage.py é um utilitário que vem com o esqueleto de projeto padrão.● Envolve grande parte da mesma funcionalidade do django-admin.py, mas assume que você está interessado no projeto do diretório atual.● Este é apenas um atalho para o projeto ao qual pretende trabalhar, para não ter que ser especificado em cada comando.
  17. 17. Primeiros Passos Django torna mais fácil ter um servidor de desenvolvimento iniciado e executando.● Simples de usar, zero de configuração;● Thread única, processo único;● Fornece relatório de erro verbose (e muito!).● Não é para uso em produção!
  18. 18. Views O que são views?● Views são simplesmente funções Python;● Views têm pelo menos um argumento, um objeto HttpRequest;● Views devem ou retornar um objeto HttpResponse ou uma exceção apropriada. import random from django.http import HttpResponse def random_number(request):     x = random.randint(0, 999)     html = <html><body><p>Seu número da sorte é:  %u</p></body></html> % x     return HttpResponse(html)
  19. 19. URLconfs● Uma vez definida a view só precisamos dizer ao Django onde ela vive no espaço URL;● Fazemos isso com um URLconf, geralmente chamado urls.py. from django.conf.urls.defaults import * urlpatterns = patterns(,     (r^random_number/$,                 randomness.views.random_number), )
  20. 20. Como URLConfs funcionam? Django URL dispatcher é responsável por ler o URLconf e fazer algo de útil com ele:● Uma URLconf são pares de expressão regular com views;● Quando uma solicitação é recebida, o URL dispatcher tenta corresponder cada expressão regular com a URL solicitada;● As expressões regulares são julgados em ordem, de cima para baixo;● Quando é encontrada uma regex que corresponde à URL solicitada, essa view é usada para processar a requisição.
  21. 21. Exemplo de URLConfUma requisição para /eventos/2006/:urlpatterns = patterns(, (^$, views.homepage), (^/sobre/$, views.sobre), (^/eventos/$, views.cal_archive), (^/eventos/(200d)/$, views.cal_year), (^/eventos/(200d)/(dd)/$,  views.cal_month),)
  22. 22. Mais sobre URLconfs Algumas coisas mais sobre URLconf:● Normalmente, cada aplicação contendo views possui sua URLconf (urls.py), e uma entrada no URLconf do projeto;● URLconfs por aplicação podem ser usadas para manter as aplicações auto-contidas, então o URLconf do projeto pode incluir cada uma das URLconfs das aplicações;● Mas apenas a URLconf do projeto é realmente necessária, ela pode mapear qualquer URL a uma view.
  23. 23. Primeira Configuração settings.py: ROOT_URLCONF = exemplo.urls● Para alguns sistemas Django o arquivo de configurações será muito extenso. Mas para este exemplo, entretanto, é tão pequeno que requer apenas o ROOT_URLCONF.
  24. 24. Primeiro Código Weburls.py:from django.conf.urls.defaults import *urlpatterns = patterns(,  (r^random_number/$, randomness.views.random_number),)views.py:import randomfrom django.http import HttpResponsedef random_number(request):    x = random.randint(0, 999)    html = <html><body><p>Seu número da sorte é: %u</p></body></html> % x    return HttpResponse(html)
  25. 25. Django ORM No mundo Django, os modelos são a fonte oficial de todas as informações relacionadas com a arquitetura de banco de dados e de representação.● Modelos reúnem: ● Definição do esquema do banco de dados; ● Definição programática dos objetos (seu comportamento).
  26. 26. Modelos● Definição explícita no código, sem introspecção em tempo de execução: ● Desempenho; ● Metadados Ricos; ● Agnóstico ao Banco de Dados.
  27. 27. Mais em Modelos O modelo para os modelos:● A classe model representa uma tabela do banco de dados;● Cada instância 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.
  28. 28. Exemplo de Modelosfrom django.db import modelsclass Author(models.Model):    firstname = models.CharField(max_length = 256)    lastname = models.CharField(max_length = 256)class Book(models.Model):    title = models.CharField(max_length = 256)    author = models.ForeignKey(Author)
  29. 29. Inicializando o Banco de Dados O banco de dados é automaticamente inicializado com o comando "manager.py syncdb".● As tabelas necessárias para todos os aplicativos instalados são criadas;● Os dados iniciais são inseridos, se os aplicativos possuirem algum;● Hooks específicos dos aplicativos são inicializados.
  30. 30. Concretizando os Modelosclass Author(models.Model):    firstname = models.CharField(max_length = 256, blank = False)    lastname = models.CharField(max_length = 256, blank = False)    class Meta:        unique_together = (          (firstname, lastname),        )    def __str__(self):        return %s %s % (self.firstname, self.lastname)
  31. 31. Concretizando os Modelosclass Book(models.Model):    title = models.CharField(max_length = 256, blank = False)    author = models.ForeignKey(Author)    class Meta:        unique_together = (          (title, author),        )    def __str__(self):        return %s by %s % (self.title, str(self.author))
  32. 32. O Admin Mumbo Jumbo● Django Admin Site!!!
  33. 33. O SistemaTemos modelos, agora precisamos de views,URLconf e alguns templates.Aprendendo sobre templates rapidamente...
  34. 34. Django TemplatesA engine de templates Django é similar emalgumas maneiras à outras engines (e.x.: Smarty):● Uma linguagem simples para aplicar lógica de exibição à marcação.● É extensível.● Ele pode ser usado para mais do que apenas HTML: e- mails, as exportações CSV, JSON, XML, ...● Solução “Out-of-the-box”, não tem habilidade para afetar o estado da aplicação, escrever no banco de dados, chamar funções Python diretamente, ...
  35. 35. Template Simples<html>  <head><title>{{ book }}</title></head>  <body>    <h1>{{ book }}</h1>    <p>Este é um livro:</p>    <table>     <tr><th>Título:</th><td>{{ book.title }}</td></tr>      <tr><th>Autor:</th><td>{{ book.author }}</td></tr>    </table>  </body></html>
  36. 36. Como os templates funcionam?Princípios de renderização de templates:● Código Python (normalmente a função da view) o faz processamento;● O modelo é encontrado pelo nome e carregado;● Um Contexto é criado; isto é uma coleção de objetos e variáveis que serão representadas no template;● O Contexto é renderizado no template com uma única chamada de função.
  37. 37. Nosso SistemaAgora podemos concluir nosso sistema.
  38. 38. As Viewsviews.py:from django.http import HttpResponse, Http404from django.template import loader, Contextfrom mybooks.books import modelsdef book_list(request):    books = models.Book.objects.all()    c = Context({ books: books })    t = loader.get_template(book_list.html)    return HttpResponse(t.render(c))def book_detail(request, id):    try:        book = models.Book.objects.get(id = id)    except models.Book.DoesNotExist:        raise Http404    c = Context({ book: book })    t = loader.get_template(book_detail.html)    return HttpResponse(t.render(c))
  39. 39. O URLConfurls.py:from django.conf.urls.defaults import *urlpatterns = patterns(,  (r^books/$, mybooks.books.views.book_list),  (r^books/(?P<id>[0­9]+)/$, mybooks.books.views.book_detail),  (r^admin/, include(django.contrib.admin.urls)),)
  40. 40. Os Templatesbase.html:<html>  <head>    <title>{% block title %}Título{% endblock %}</title>  </head>  <body>{% block body %}Corpo{% endblock %}</body></html>
  41. 41. Os Templatesbook_list.html:{% extends "base.html" %}{% block title %}Meus Livros{% endblock %}{% block body %}  {% if books %}    <p>Estes são alguns dos livros da minha coleção:</p>    <ul>    {% for book in books %}      <li><a href="{{ book.id }}">{{ book }}</a></li>    {% endfor %}    </ul>  {% else %}    <p>Eu não tenho uma coleção de livros!</p>  {% endif %}{% endblock %}
  42. 42. Os Templatesbook_detail.html:{% extends "base.html" %}{% block title %}{{ book }}{% endblock %}{% block body %}<p>Este é um dos meus livros:</p><table>  <tr>    <th>Título:</th>    <td>{{ book.title }}</td>  </tr>  <tr>    <th>Autor:</th>    <td>{{ book.author }}</td>  </tr></table>{% endblock %}
  43. 43. E MaisIsto foi apenas o básico, o Django cria muito maisrecursos impressionantes que realmentemaximizam sua produtividade:● Processamento de formulários, validação, Ajax, Unit Testing, sessões, cookies, CSRF, ...;● Visões genéricas: O sistema poderia ter sido criado sem escrever uma única visão (e código HTML);● Conectando aplicativos plugáveis de terceiros você consegue recursos sofisticados de graça!● Django está em melhoria contínua e o conjunto de recursos continua a crescer.
  44. 44. 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 django- brasil@googlegroups.com
  45. 45. Perguntas?● Obrigado a todos!
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×