Python 06
Upcoming SlideShare
Loading in...5
×
 

Python 06

on

  • 974 views

Introdução ao web framework Django

Introdução ao web framework Django

Statistics

Views

Total Views
974
Views on SlideShare
974
Embed Views
0

Actions

Likes
0
Downloads
48
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \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

Python 06 Python 06 Presentation Transcript

  • Django Framework Web para Perfeccionistas Curso de Python - Sexta AulaBruno Gama Catão - brunogamacatao@gmail.com
  • 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.
  • Sites que usam Django• Washington Post;• Lawrence;• Toronto Life;• Lista de sites que usam Django: • http://www.djangosites.org
  • 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
  • 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
  • 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
  • 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
  • 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”.
  • Projeto criado
  • 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.
  • Configurando um banco de dados• Todo projeto criado com Django está associado a um banco de dados;• Abra o arquivo settings.py
  • 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: , # ... }}
  • Definindo que banco de dados usar• Modifique para ficar assim:DATABASES = { default: { ENGINE: django.db.backends.sqlite3, NAME: meusite.db, USER: , # ... PASSWORD: , # ... HOST: , # ... PORT: , # ... }}
  • 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
  • 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.
  • 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”.
  • 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()
  • 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, )
  • 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, )
  • 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)
  • Sincronize o banco de dados• Clique com o botão direito do mouse sobre o projeto e selecione: • Django→Sync DB
  • 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/
  • Digite o nome e senha do seu super usuário.
  • Onde estão as minhas entidades ?
  • 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)
  • 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 )
  • 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/
  • Adicione algumas categorias, jornalistas e notícias.Popule o seu banco de dados. Habitue-se com Django.
  • As entidades apareceram !!! Adicione algumas categorias, jornalistas e notícias.Popule o seu banco de dados. Habitue-se com Django.
  • Algo não está muito bem :(• Veja as categorias que eu adicionei:
  • Algo não está muito bem :(• Veja as categorias que eu adicionei: Tem como eu visualizar isso melhor ?
  • 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
  • Resultado
  • Resultado
  • 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.
  • 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), )
  • 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)),)
  • Testando• Abra o seguinte endereço em seu navegador: • http://localhost:8000/noticias/
  • 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.
  • 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.
  • TEMPLARE_DIRS• Clique com o botão direito do mouse sobre o diretório templates;• Copie a localização do diretório (Location):
  • Arquivo settings.py• Altere a declaração da variável TEMPLATE_DIRS:TEMPLATE_DIRS = ( /Users/brunocatao/Documents/workspace/meusite/templates)
  • 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.
  • 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>
  • 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})
  • 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>
  • 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>
  • 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})
  • 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), )
  • Testando• Abra o seguinte endereço em seu navegador: • http://localhost:8000/noticias/
  • 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})
  • 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/