SlideShare uma empresa Scribd logo
1 de 54
Django
      Framework Web para Perfeccionistas
         Curso de Python - Sexta Aula
Bruno 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

                PROJETO
Aplicação   Aplicação   Aplicação   Aplicação

Aplicação   Aplicação   Aplicação   Aplicação

Aplicaçã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 models

class 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 admin
admin.autodiscover()                        Descomente

urlpatterns = 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 admin
admin.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 HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from 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 HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from 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/

Mais conteúdo relacionado

Mais procurados

Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com DjangoMarinho Brandão
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Webantonio sérgio nogueira
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
Introdução a Desenvolvimento Web
Introdução a Desenvolvimento WebIntrodução a Desenvolvimento Web
Introdução a Desenvolvimento WebPeslPinguim
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com DjangoMarcos Petry
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao DjangoVinicius Mendes
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Thyago Maia
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontMichel Ribeiro
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPMarcelo Andrade
 

Mais procurados (20)

Java script aula 10 - angularjs
Java script   aula 10 - angularjsJava script   aula 10 - angularjs
Java script aula 10 - angularjs
 
Java script - funções
Java script - funçõesJava script - funções
Java script - funções
 
Java script aula 07 - j-query
Java script   aula 07 - j-queryJava script   aula 07 - j-query
Java script aula 07 - j-query
 
Java script aula 09 - JQuery
Java script   aula 09 - JQueryJava script   aula 09 - JQuery
Java script aula 09 - JQuery
 
Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com Django
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
Angular js
Angular jsAngular js
Angular js
 
Introdução ao JQuery e AJAX
Introdução ao JQuery e AJAXIntrodução ao JQuery e AJAX
Introdução ao JQuery e AJAX
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Introdução a Desenvolvimento Web
Introdução a Desenvolvimento WebIntrodução a Desenvolvimento Web
Introdução a Desenvolvimento Web
 
Java script aula 05 - funções
Java script   aula 05 - funçõesJava script   aula 05 - funções
Java script aula 05 - funções
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
servlet-requisicoes
servlet-requisicoesservlet-requisicoes
servlet-requisicoes
 
Criando websites a jato com Django
Criando websites a jato com DjangoCriando websites a jato com Django
Criando websites a jato com Django
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao Django
 
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
Desenvolvimento de Sistemas Web com PHP Frameworks - Aula 2
 
Evento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de FrontEvento Front End SP - Arquitetura de Front
Evento Front End SP - Arquitetura de Front
 
Jboss tutorial
Jboss tutorialJboss tutorial
Jboss tutorial
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 

Destaque

Desenvolvimento web simples com Python e DJango
Desenvolvimento web simples com Python e DJangoDesenvolvimento web simples com Python e DJango
Desenvolvimento web simples com Python e DJangoRafael Nunes
 
SUAP: Caso de Sucesso utilizando Python e Django no Serviço Público Federal
SUAP: Caso de Sucesso utilizando Python e Django no Serviço Público FederalSUAP: Caso de Sucesso utilizando Python e Django no Serviço Público Federal
SUAP: Caso de Sucesso utilizando Python e Django no Serviço Público FederalAllyson Barros
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de djangorosenclever
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e DjangoOsvaldo Santana Neto
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e djangoIgor Sobreira
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na práticaRafael Cassau
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Djangofabiocerqueira
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose PigmentarBruno Catão
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.comricobl
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 

Destaque (19)

Introdução ao Python com Django
Introdução ao Python com DjangoIntrodução ao Python com Django
Introdução ao Python com Django
 
Django - Lightning Talk - We Web Conf
Django - Lightning Talk - We Web ConfDjango - Lightning Talk - We Web Conf
Django - Lightning Talk - We Web Conf
 
Python 05
Python 05Python 05
Python 05
 
Desenvolvimento web simples com Python e DJango
Desenvolvimento web simples com Python e DJangoDesenvolvimento web simples com Python e DJango
Desenvolvimento web simples com Python e DJango
 
Python 02
Python 02Python 02
Python 02
 
Python 03
Python 03Python 03
Python 03
 
SUAP: Caso de Sucesso utilizando Python e Django no Serviço Público Federal
SUAP: Caso de Sucesso utilizando Python e Django no Serviço Público FederalSUAP: Caso de Sucesso utilizando Python e Django no Serviço Público Federal
SUAP: Caso de Sucesso utilizando Python e Django no Serviço Público Federal
 
Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de django
 
Python 04
Python 04Python 04
Python 04
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
Python 01
Python 01Python 01
Python 01
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
Python e django na prática
Python e django na práticaPython e django na prática
Python e django na prática
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Django
 
Retina e Retinose Pigmentar
Retina e Retinose PigmentarRetina e Retinose Pigmentar
Retina e Retinose Pigmentar
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 

Semelhante a Django Framework para Perfeccionistas

Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de DjangoLeandro Zanuz
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosRodrigo Nossal
 
Apresentação de Django Extension
Apresentação de Django ExtensionApresentação de Django Extension
Apresentação de Django ExtensionMoacir Filho
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de djangoFilipe Ximenes
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Rafael Sales Pavarina
 
Introdução a Plataforma Android
Introdução a Plataforma AndroidIntrodução a Plataforma Android
Introdução a Plataforma AndroidÉdipo Souza
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoMario Chaves
 

Semelhante a Django Framework para Perfeccionistas (20)

Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de Django
 
Oficina de Django
Oficina de DjangoOficina de Django
Oficina de Django
 
Django Módulo Básico Parte II
Django Módulo Básico Parte IIDjango Módulo Básico Parte II
Django Módulo Básico Parte II
 
Django Básico
Django BásicoDjango Básico
Django Básico
 
Implementação de
Implementação de Implementação de
Implementação de
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
 
Django: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutosDjango: Desenvolvendo uma aplicação web em minutos
Django: Desenvolvendo uma aplicação web em minutos
 
My first app django
My first app djangoMy first app django
My first app django
 
Apresentação de Django Extension
Apresentação de Django ExtensionApresentação de Django Extension
Apresentação de Django Extension
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
django.pptx
django.pptxdjango.pptx
django.pptx
 
EBAC Django
EBAC DjangoEBAC Django
EBAC Django
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Workshop Django
Workshop DjangoWorkshop Django
Workshop Django
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018Workshop Django Framework - 30/10/2018
Workshop Django Framework - 30/10/2018
 
Introdução a Plataforma Android
Introdução a Plataforma AndroidIntrodução a Plataforma Android
Introdução a Plataforma Android
 
Técnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em djangoTécnicas para preparação e desenvolvimento de sites em django
Técnicas para preparação e desenvolvimento de sites em django
 

Mais de Bruno Catão

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Bruno Catão
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Bruno Catão
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2Bruno Catão
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1Bruno Catão
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Bruno Catão
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework GrailsBruno Catão
 
O framework spring
O framework springO framework spring
O framework springBruno Catão
 

Mais de Bruno Catão (11)

Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2Introdução às Redes Neurais - Parte 2/2
Introdução às Redes Neurais - Parte 2/2
 
Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2Introdução às Redes Neurais - Parte 1/2
Introdução às Redes Neurais - Parte 1/2
 
React JS - Parte 2
React JS - Parte 2React JS - Parte 2
React JS - Parte 2
 
React JS - Parte 1
React JS - Parte 1React JS - Parte 1
React JS - Parte 1
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)Unity3d Space Shooter (Parte 1)
Unity3d Space Shooter (Parte 1)
 
Introdução ao Framework Grails
Introdução ao Framework GrailsIntrodução ao Framework Grails
Introdução ao Framework Grails
 
O framework spring
O framework springO framework spring
O framework spring
 

Django Framework para Perfeccionistas

  • 1. Django Framework Web para Perfeccionistas Curso de Python - Sexta Aula Bruno 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 PROJETO Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação Aplicação Aplicaçã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”.
  • 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 models class 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 admin admin.autodiscover() Descomente urlpatterns = 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.
  • 24. Digite o nome e senha do seu super usuário.
  • 25.
  • 26. Onde estão as minhas entidades ?
  • 27. 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)
  • 28. 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' )
  • 29. 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/
  • 30. Adicione algumas categorias, jornalistas e notícias. Popule o seu banco de dados. Habitue-se com Django.
  • 31. As entidades apareceram !!! Adicione algumas categorias, jornalistas e notícias. Popule o seu banco de dados. Habitue-se com Django.
  • 32. Algo não está muito bem :( • Veja as categorias que eu adicionei:
  • 33. Algo não está muito bem :( • Veja as categorias que eu adicionei: Tem como eu visualizar isso melhor ?
  • 34. 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
  • 37. 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.
  • 38. 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'), )
  • 39. Configuração das URLs • Abra o arquivo meusite/urls.py: from django.conf.urls.defaults import * from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', (r'^admin/', include(admin.site.urls)), (r'^noticias/', include('meusite.noticias.urls')), )
  • 40. Testando • Abra o seguinte endereço em seu navegador: • http://localhost:8000/noticias/
  • 41. 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.
  • 42. 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.
  • 43. TEMPLARE_DIRS • Clique com o botão direito do mouse sobre o diretório templates; • Copie a localização do diretório (Location):
  • 44. Arquivo settings.py • Altere a declaração da variável TEMPLATE_DIRS: TEMPLATE_DIRS = ( '/Users/brunocatao/Documents/workspace/meusite/templates' )
  • 45. 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.
  • 46. 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>
  • 47. Exibindo as notícias • Modifique o seu arquivo meusite/noticias/views.py: from django.http import HttpResponse from django.shortcuts import render_to_response, get_object_or_404 from meusite.noticias.models import * def index(request): noticias = Noticia.objects.all().order_by('-data_publicacao') return render_to_response('noticias/index.html', {'noticias': noticias})
  • 48. 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>
  • 49. 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>
  • 50. 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})
  • 51. 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'), )
  • 52. Testando • Abra o seguinte endereço em seu navegador: • http://localhost:8000/noticias/
  • 53. 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 HttpResponse from django.shortcuts import render_to_response, get_object_or_404 from 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})
  • 54. 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/

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n