Your SlideShare is downloading. ×
Python 06
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Python 06

767
views

Published on

Introdução ao web framework Django

Introdução ao web framework Django

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
767
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
51
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript

    • 1. Django Framework Web para Perfeccionistas Curso de Python - Sexta AulaBruno Gama Catão - brunogamacatao@gmail.com
    • 2. O que é Django ?• É um framework web focado em alta produtividade;• Principais recursos: • Mapeador objeto-relacional; • Interface administrativa automática; • Design elegante de URLs; • Sistema de templates; • Sitema de cache; • Internacionalização.
    • 3. Sites que usam Django• Washington Post;• Lawrence;• Toronto Life;• Lista de sites que usam Django: • http://www.djangosites.org
    • 4. Instalando• Site oficial: http://www.djangoproject.com• URL para download: • http://www.djangoproject.com/download/• Descompacte o arquivo;• No diretório criado digite: • [Windows]: python setup.py install • [Linux/MacOs]: sudo python setup.py install
    • 5. Conceitos básicos PROJETOAplicação Aplicação Aplicação AplicaçãoAplicação Aplicação Aplicação AplicaçãoAplicação Aplicação Aplicação Aplicação
    • 6. Criando um projeto• No diretório onde você for criar seus projetos digite: • django-admin.py startproject meusite• Django criou para você os seguintes arquivos: meusite/ __init__.py manage.py settings.py urls.py
    • 7. Criando um projeto• No diretório onde Lembre-se,nocriar seussão sempre você foros comandos digitados prompt ou terminal ! projetos digite: • django-admin.py startproject meusite• Django criou para você os seguintes arquivos: meusite/ __init__.py manage.py settings.py urls.py
    • 8. Criando um projeto com PyDev• Selecione a opção de menu: • File→New→Project ...• Escolha: • Pydev→Pydev Django Project;• No project name escreva: meusite;• Clique em “Finish”.
    • 9. Projeto criado
    • 10. Entrando em detalhes• __init__.py: Arquivo vazio que diz que ao Python que o diretório meusite é um módulo;• manage.py: Arquivo contendo uma série de utilitários de linha de comando;• settings.py: Configurações gerais do projeto;• urls.py: Configurações das URLs do projeto.
    • 11. Configurando um banco de dados• Todo projeto criado com Django está associado a um banco de dados;• Abra o arquivo settings.py
    • 12. Definindo que banco de dados usar• Procure as seguintes linhas no arquivo settings.py:DATABASES = { default: { ENGINE: django.db.backends., # ... NAME: , # ... USER: , # ... PASSWORD: , # ... HOST: , # ... PORT: , # ... }}
    • 13. Definindo que banco de dados usar• Modifique para ficar assim:DATABASES = { default: { ENGINE: django.db.backends.sqlite3, NAME: meusite.db, USER: , # ... PASSWORD: , # ... HOST: , # ... PORT: , # ... }}
    • 14. Sincronizando o projeto com o banco de dados• Sempre que você fizer qualquer modificação relativa ao banco de dados do seu projeto, você deve sincronizar o projeto com o banco de dados;• Clique com o botão direito do mouse sobre o projeto e selecione: • Django→Sync DB
    • 15. Criando o super usuário do projeto• Todo projeto em Django tem um super usuário;• Na primeira vez que você for sincronizar o projeto com o banco de dados, Django irá te perguntar se quer criar este super usuário: Digite ‘yes’, em seguida o nome do usuário, e-mail e a senha duas vezes.
    • 16. Criando uma aplicação• Como já dissemos anteriormente, um projeto possui uma ou mais aplicações;• Nossa primeira aplicação será um site de notícias;• Para criar uma aplicação, clique com o botão direito do mouse sobre o projeto e selecione: • Django→Create application;• Digite noticias;• Clique “OK”.
    • 17. Definindo as entidades• Edite o arquivo noticias/models.py:from django.db import modelsclass Jornalista(models.Model): nome = models.CharField(max_length=100)class Categoria(models.Model): nome = models.CharField(max_length=100)class Noticia(models.Model): jornalista = models.ForeignKey(Jornalista) categoria = models.ForeignKey(Categoria) titulo = models.CharField(max_length=200) texto = models.TextField() data_publicacao = models.DateTimeField()
    • 18. Aplicações instaladas• Para definir que aplicações estão instaladas em um projeto você deve editar o arquivo settings.py;• Localize as seguintes linhas: INSTALLED_APPS = ( django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.sites, django.contrib.messages, # Uncomment the next line to enable the admin: # django.contrib.admin, )
    • 19. Aplicações instaladas• Para instalar o módulo de administração automática descomente a última linha: INSTALLED_APPS = ( django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.sites, django.contrib.messages, django.contrib.admin, )
    • 20. Adicionando URLs• É necessário adicionar uma URL para a aplicação de administração automática;• Para isto modifique o arquivo meusite/urls.py:from django.conf.urls.defaults import *# Uncomment the next two lines to enable the admin:from django.contrib import adminadmin.autodiscover() Descomenteurlpatterns = patterns(, # Example: # (r^meusite/, include(meusite.foo.urls)), # Uncomment the admin/doc line below and add django.contrib.admindocs # to INSTALLED_APPS to enable admin documentation: # (r^admin/doc/, include(django.contrib.admindocs.urls)), # Uncomment the next line to enable the admin: (r^admin/, include(admin.site.urls)), Descomente)
    • 21. Sincronize o banco de dados• Clique com o botão direito do mouse sobre o projeto e selecione: • Django→Sync DB
    • 22. Testando• Para testar se tudo correu bem, no prompt de comando (terminal) vá até o diretório onde está o arquivo manage.py do seu projeto e digite: • python manage.py runserver• Abra seguinte endereço no seu navegador: • http://localhost:8000/admin/
    • 23. Digite o nome e senha do seu super usuário.
    • 24. Onde estão as minhas entidades ?
    • 25. Tornando entidades administráveis• Adicione no pacote meusite/noticias o módulo admin.py com o conteúdo: from meusite.noticias.models import * from django.contrib import admin admin.site.register(Jornalista) admin.site.register(Noticia) admin.site.register(Categoria)
    • 26. Registrando a aplicação• Para instalar a aplicação de notícias modifique as INSTALLED_APPS do arquivo meusite/settings.py: INSTALLED_APPS = ( django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.sites, django.contrib.messages, django.contrib.admin, meusite.noticias )
    • 27. Reinicie o servidor• No terminal pressione CONTROL+C para parar o servidor;• Inicie novamente digitando: • python manage.py runserver• Abra seguinte endereço no seu navegador: • http://localhost:8000/admin/
    • 28. Adicione algumas categorias, jornalistas e notícias.Popule o seu banco de dados. Habitue-se com Django.
    • 29. As entidades apareceram !!! Adicione algumas categorias, jornalistas e notícias.Popule o seu banco de dados. Habitue-se com Django.
    • 30. Algo não está muito bem :(• Veja as categorias que eu adicionei:
    • 31. Algo não está muito bem :(• Veja as categorias que eu adicionei: Tem como eu visualizar isso melhor ?
    • 32. Método __unicode__• Abra o arquivo meusite/noticias/models.py: from django.db import models class Jornalista(models.Model): nome = models.CharField(max_length=100) def __unicode__(self): return self.nome class Categoria(models.Model): nome = models.CharField(max_length=100) def __unicode__(self): return self.nome class Noticia(models.Model): jornalista = models.ForeignKey(Jornalista) categoria = models.ForeignKey(Categoria) titulo = models.CharField(max_length=200) texto = models.TextField() data_publicacao = models.DateTimeField() def __unicode__(self): return self.titulo
    • 33. Resultado
    • 34. Resultado
    • 35. Criando as suas páginas• Cada aplicação tem um módulo views.py;• Aí estão todas as funções por exibir as páginas deste módulo;• Cada aplicação deve ter um módulo urls.py que fará o mapeamento das urls para as funções do módulo views.py.
    • 36. Hello World• Edite o arquivo meusite/noticias/views.py: from django.http import HttpResponse def index(request): return HttpResponse("Hello World !")• Crie um módulo urls.py no pacote meusite/ noticias: from django.conf.urls.defaults import * urlpatterns = patterns(meusite.noticias.views, (r^$, index), )
    • 37. Configuração das URLs • Abra o arquivo meusite/urls.py:from django.conf.urls.defaults import *from django.contrib import adminadmin.autodiscover()urlpatterns = patterns(, (r^admin/, include(admin.site.urls)), (r^noticias/, include(meusite.noticias.urls)),)
    • 38. Testando• Abra o seguinte endereço em seu navegador: • http://localhost:8000/noticias/
    • 39. Utilizando templates• Não é muito prático (e bonito) colocar o código HTML diretamente dentro de módulos Python;• Podemos editar as páginas HTML externamente e utilizá-las a partir do nosso código.
    • 40. Utilizando templates• Crie um diretório templates na raiz do seu projeto;• Crie um diretório noticias dentro do diretório templates;• Edite o arquivo meusite/settings.py, localize a linha que contém TEMPLATE_DIRS.
    • 41. TEMPLARE_DIRS• Clique com o botão direito do mouse sobre o diretório templates;• Copie a localização do diretório (Location):
    • 42. Arquivo settings.py• Altere a declaração da variável TEMPLATE_DIRS:TEMPLATE_DIRS = ( /Users/brunocatao/Documents/workspace/meusite/templates)
    • 43. Atenção• O mundo da informática (linguagens, ferramentas, compiladores, etc) não foi feito para os acentos :(• Portanto, é importante você estar atendo ao encoding que você está usando;• Quando abrir o seu arquivo HTML para edição defina o encoding: • Selecione o menu Edit→Set Encoding... • Selecione Other: UTF-8.
    • 44. Crie o seu template • Crie um arquivo chamado index.html no diretório templates/noticias:<html> <head> <title>Últimas Notícias</title> </head> <body> <h1>Veja as nossas últimas notícias:</h1> <ul> {% for noticia in noticias %} <li><b>{{noticia.categoria}}</b>: {{noticia.titulo}}</li> {% endfor %} </ul> </body></html>
    • 45. Exibindo as notícias • Modifique o seu arquivo meusite/noticias/views.py:from django.http import HttpResponsefrom django.shortcuts import render_to_response, get_object_or_404from meusite.noticias.models import *def index(request): noticias = Noticia.objects.all().order_by(-data_publicacao) return render_to_response(noticias/index.html, {noticias: noticias})
    • 46. Exibindo o detalhe das notícias • Modifique o template index.html:<html> <head> <title>Últimas Notícias</title> </head> <body> <h1>Veja as nossas últimas notícias:</h1> <ul> {% for noticia in noticias %} <li><a href="/noticias/noticia/{{noticia.id}}"> <b>{{noticia.categoria}}</b>: {{noticia.titulo}}</a></li> {% endfor %} </ul> </body></html>
    • 47. Crie um template para os detalhes• Crie um arquivo (detalhe.html) na pasta templates/ noticias/detalhe.html: <html> <head> <title>{{noticia.titulo}}</title> </head> <body> <p>{{noticia.categoria}}: {{noticia.jornalista}}</p> <h1>{{noticia.titulo}}</h1> <h2>{{noticia.texto}}</h2> </body> </html>
    • 48. Criando a função para exibir o detalhe • Modifique o seu arquivo meusite/noticias/views.py, adicione a seguinte função:def detalhe(request, noticia_id): noticia = get_object_or_404(Noticia, pk=noticia_id) return render_to_response(noticias/detalhe.html, {noticia: noticia})
    • 49. Associando a URL à função criada• Modifique o arquivo meusite/noticias/urls.py: from django.conf.urls.defaults import * urlpatterns = patterns(meusite.noticias.views, (r^$, index), (r^noticia/(?P<noticia_id>d+)/$, detalhe), )
    • 50. Testando• Abra o seguinte endereço em seu navegador: • http://localhost:8000/noticias/
    • 51. Limitando o número de notícias • Podemos limitar o número de notícias exibidas. Por exemplo, vamos modificar a função index do módulo views.py:from django.http import HttpResponsefrom django.shortcuts import render_to_response, get_object_or_404from meusite.noticias.models import *def index(request): noticias = Noticia.objects.all().order_by(-data_publicacao)[:10] return render_to_response(noticias/index.html, {noticias: noticias})
    • 52. Testando• Adicione pelo menos 11 notícias e teste a sua aplicação;• Experimente mudar os templates;• Abra o seguinte endereço em seu navegador: • http://localhost:8000/noticias/