SlideShare uma empresa Scribd logo
O framework web para perfeccionistas com prazos
Django facilita o desenvolvimento de aplicações web com mais
qualidade e menos código


                                  Alexandre D. Rogoski
                                             Exata T.I.
                                           alexandre@exatati.com.br
Quem sou eu?


●
    Desenvolvedor Python;
●
    Administrador de Sistemas/Redes;
●
    Embaixador da Comunidade openSUSE;
●   Contribuidor openSUSE/Novell.
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.
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 – Don't Repeat Yourself.
“... 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.
“... 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.
“... 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.
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.
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>
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.
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.
Arquitetura do Framework: Core
O 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.
Projetos e Aplicações
Como 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.
O que é uma aplicação?

●   Possui views para lidar com solicitações HTTP;
●
    URLconf's 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.
django-admin.py

Django fornece uma ferramenta de linha de comando
simples que, entre outras coisas, torna mais fácil
criar 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
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.
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!
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)
URLconf's
●   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'),
    )
Como URLConf's 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.
Exemplo de URLConf


Uma 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),
)
Mais sobre URLconf's

    Algumas coisas mais sobre URLconf:
●   Normalmente, cada aplicação contendo views possui
    sua URLconf (urls.py), e uma entrada no URLconf do
    projeto;
●   URLconf's por aplicação podem ser usadas para manter
    as aplicações auto-contidas, então o URLconf do
    projeto pode incluir cada uma das URLconf's das
    aplicações;
●   Mas apenas a URLconf do projeto é realmente
    necessária, ela pode mapear qualquer URL a uma view.
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.
Primeiro Código Web

urls.py:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
  (r'^random_number/$', 'randomness.views.random_number'),
)

views.py:

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)
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).
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.
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.
Exemplo de Modelos


from django.db import models

class 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)
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.
Concretizando os Modelos



class 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)
Concretizando os Modelos


class 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))
O Admin Mumbo Jumbo




●   Django Admin Site!!!
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 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, ...
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>
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.
Nosso Sistema




Agora podemos concluir nosso sistema.
As Views
views.py:
from django.http import HttpResponse, Http404
from django.template import loader, Context

from mybooks.books import models

def 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))
O URLConf

urls.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')),
)
Os Templates



base.html:
<html>
  <head>
    <title>{% block title %}Título{% endblock %}</title>
  </head>
  <body>{% block body %}Corpo{% endblock %}</body>
</html>
Os Templates

book_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 %}
Os Templates
book_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 %}
E Mais
Isto foi apenas o básico, o Django cria muito mais
recursos impressionantes que realmente
maximizam 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.
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
Perguntas?




●   Obrigado a todos!

Mais conteúdo relacionado

PDF
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
ODP
JSF e outras tecnologias Java Web - IMES.java
PDF
Analise frameworks php
PDF
Java 8 - A Evolução da Linguagem
PDF
Be React. Do Tests!
PPT
Mini curso de django
PDF
Pense no futuro: PHP com Zend Framework
PDF
Entendendo Conceitos Caching com PHP
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
JSF e outras tecnologias Java Web - IMES.java
Analise frameworks php
Java 8 - A Evolução da Linguagem
Be React. Do Tests!
Mini curso de django
Pense no futuro: PHP com Zend Framework
Entendendo Conceitos Caching com PHP

Mais procurados (20)

PDF
Treinamento Básico de Django
PDF
Frameworks PHP
ODP
Fazendo Um Elefante Passar Debaixo da Porta - PGCon-BR
PDF
Mean Stack
PDF
Implementando enterprise patterns com PHP
PDF
Django: desenvolvendo aplicações web de maneira simples e rápida!
PDF
Engenharia rever sa mentebinaria
ODP
Introdução ao framework CodeIgniter
PDF
NoSQL com Zend Framework 2
PDF
Full Text Search - Busca Textual no PostgreSQL
PDF
Usando Git na Unity - Gaming For All 2021
PDF
Tutorial Django + Python
PDF
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
PDF
Começando com Zend Framework 2
PDF
Construindo portlets para IBM WebSphere Portal – Parte 1
PDF
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
PPT
Desenvolvimento web: PHP orientado a objetos
PPSX
Conhecendo o Django
PDF
Como o Cucumber Funciona
PDF
IBM Web Content Management - Melhores práticas
Treinamento Básico de Django
Frameworks PHP
Fazendo Um Elefante Passar Debaixo da Porta - PGCon-BR
Mean Stack
Implementando enterprise patterns com PHP
Django: desenvolvendo aplicações web de maneira simples e rápida!
Engenharia rever sa mentebinaria
Introdução ao framework CodeIgniter
NoSQL com Zend Framework 2
Full Text Search - Busca Textual no PostgreSQL
Usando Git na Unity - Gaming For All 2021
Tutorial Django + Python
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Começando com Zend Framework 2
Construindo portlets para IBM WebSphere Portal – Parte 1
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
Desenvolvimento web: PHP orientado a objetos
Conhecendo o Django
Como o Cucumber Funciona
IBM Web Content Management - Melhores práticas
Anúncio

Semelhante a Django (20)

PPT
F R A M E W O R K D J A N G O
KEY
Django - Desenvolvimento web ágil com Python
PDF
Desmitificando as aplicações RESTFul usando Django Rest Framework
PDF
PHP: Como não programar em POG
PDF
Palestra Zend Framework na Campus Party 2011
PDF
Framework web 01 - Aula UTFPR 2018
PDF
Desenvolvimento web com python e django
PDF
Google Web Toolkit
PDF
Modulo python Configurando o Django ebac.pdf
PDF
Aplicações Web com Python e Google App Engine
PDF
Introdução à Programação Web com Angular
ODP
Django - Muito além do básico
PPT
Python e Django
PDF
Qualidade em projetos PHP - SoLiSC 2011
PDF
Zend Framework: Reuso e extensão de componentes para fácil manutenção
PPT
Django: Uso de frameworks ágeis para desenvolvimento web
PDF
Escalando apps com React e Type Script e SOLID
PDF
Django para portais de alta visibilidade. tdc 2013
PDF
Junho 2016 - Django - A sua cápsula de soluções web em python
F R A M E W O R K D J A N G O
Django - Desenvolvimento web ágil com Python
Desmitificando as aplicações RESTFul usando Django Rest Framework
PHP: Como não programar em POG
Palestra Zend Framework na Campus Party 2011
Framework web 01 - Aula UTFPR 2018
Desenvolvimento web com python e django
Google Web Toolkit
Modulo python Configurando o Django ebac.pdf
Aplicações Web com Python e Google App Engine
Introdução à Programação Web com Angular
Django - Muito além do básico
Python e Django
Qualidade em projetos PHP - SoLiSC 2011
Zend Framework: Reuso e extensão de componentes para fácil manutenção
Django: Uso de frameworks ágeis para desenvolvimento web
Escalando apps com React e Type Script e SOLID
Django para portais de alta visibilidade. tdc 2013
Junho 2016 - Django - A sua cápsula de soluções web em python
Anúncio

Mais de flisolmaringa (11)

PDF
Linux de A a Z
PDF
Desenvolvimento de jogos para iOS com Cocos2d
PDF
Introdução ao LaTeX
PDF
ZFS – Zettabyte File System
PDF
Linguagem Go
PDF
Platinum Arts Sandbox - Game Maker
PDF
Introdução ao processamento paralelo com o Grand Central Dispatch
PDF
Apresentando o FreeBSD
PDF
Sugar: Um sistema operacional para crianças
PDF
Software livre: filosofia, utopia ou alternativa viável?
PDF
Apresentando o FreeBSD
Linux de A a Z
Desenvolvimento de jogos para iOS com Cocos2d
Introdução ao LaTeX
ZFS – Zettabyte File System
Linguagem Go
Platinum Arts Sandbox - Game Maker
Introdução ao processamento paralelo com o Grand Central Dispatch
Apresentando o FreeBSD
Sugar: Um sistema operacional para crianças
Software livre: filosofia, utopia ou alternativa viável?
Apresentando o FreeBSD

Último (20)

PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Aula sobre desenvolvimento de aplicativos
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Curso de Java 12 - (JDBC, Transation, Commit e Rollback).pptx
PPTX
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Aula sobre banco de dados com firebase db
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
PPTX
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Processos na gestão de transportes, TM100 Col18
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Apple Pippin Uma breve introdução. - David Glotz
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Aula sobre desenvolvimento de aplicativos
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Curso de Java 12 - (JDBC, Transation, Commit e Rollback).pptx
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Aula 18 - Manipulacao De Arquivos python
Aula sobre banco de dados com firebase db
COBITxITIL-Entenda as diferença em uso governança TI
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
Custos e liquidação no SAP Transportation Management, TM130 Col18

Django