• Nenhum resultado encontrado

django

N/A
N/A
Protected

Academic year: 2021

Share "django"

Copied!
45
0
0

Texto

(1)

O framework web para perfeccionistas com prazos

O framework web para perfeccionistas com prazos

Django facilita o desenvolvimento de aplicações web com mais

Django facilita o desenvolvimento de aplicações web com mais

qualidade e menos código

qualidade e menos código

Alexandre D. Rogoski Alexandre D. Rogoski Exata T.I. Exata T.I. alexandre@exatati.com.br alexandre@exatati.com.br

(2)
(3)

Quem sou eu?

Quem sou eu?

● Desenvolvedor Python;Desenvolvedor Python;

● Administrador de Administrador de Sistemas/RSistemas/Redes;edes;

● Embaixador da Comunidade openSUSE;Embaixador da Comunidade openSUSE;

(4)

Python

Python

● Linguagem de programação de alto-nível;Linguagem de programação de alto-nível;

● Interpretada, interativa e orientada a objetos;Interpretada, interativa e orientada a objetos;

● TTipagem forte ipagem forte e dinâmica;e dinâmica;

(5)

O que é Django?

O que é Django?

● “Django é um framework Python de alto-nível que“Django é um framework Python de alto-nível que

estimula o desenvolvimento rápido e limpo, c

estimula o desenvolvimento rápido e limpo, comom

design objetivo e realista.”

design objetivo e realista.”

● Um framework Web de alto-nível é um softwareUm framework Web de alto-nível é um software

que facilita e torna menos doloroso o processo de

que facilita e torna menos doloroso o processo de

construção de

construção de sites dinâmicos. Asites dinâmicos. Abstrai problemasbstrai problemas

comuns do desenvolvimento Web e oferece

comuns do desenvolvimento Web e oferece

atalhos para tarefas de progração frequentes;

atalhos para tarefas de progração frequentes;

(6)

“... 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

(7)

“... 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.

(8)

“... 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.

(9)

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;

(10)

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>

(11)

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.

(12)

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.

(13)

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 nesencaixam-se componente para lidar com solicitações HTTP.

(14)

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

(15)

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.

(16)

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

(17)

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.

(18)

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!

(19)

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

(20)

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'), )

(21)

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

(22)

Exemplo de URLConf 

Uma requisição para /eventos/2006/:

urlpatterns = patterns('', ('^$', views.homepage), ('^/sobre/$', views.sobre), ('^/eventos/$', views.cal_archive), ('^/eventos/(200\d)/$', views.cal_year), ('^/eventos/(200\d)/(\d\d)/$', views.cal_month), )

(23)

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

(24)

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.

(25)

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

(26)

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

(27)

Modelos

● Definição explícita no código, sem

introspecção em tempo de execução:

● Desempenho;

● Metadados Ricos;

(28)

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.

(29)

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)

(30)

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

(31)

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):

(32)

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):

(33)

O Admin Mumbo Jumbo

(34)

O Sistema

Temos modelos, agora precisamos de views,

URLconf e alguns templates.

(35)

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, ...

(36)

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>

(37)

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.

(38)

Nosso Sistema

(39)

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 })

(40)

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')), )

(41)

Os Templates

base.html:

<html> <head>

<title>{% block title %}Título{% endblock %}</title> </head>

<body>{% block body %}Corpo{% endblock %}</body> </html>

(42)

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 %}

(43)

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>

(44)

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

(45)

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: users@googlegroups.com

Referências

Documentos relacionados

O presente estudo analisou dados de capturas de atuns e afins realizadas com linha-de-mão na costa de Sergipe e desembarcadas no próprio Estado, tanto por embarcações da frota

Como consequência dessa dependência, “o texto didático traz para sala de aula mais um personagem, seu autor, que passa a estabelecer um dialogo com o professor e seus

Os processos de auditoria cada vez mais estão ocupando espaço dentro das organizações que buscam a melhoria contínua de seus processos.Nesse sentido, podemos encontrar,

Os resultados dos experimentos usando softwares comerciais e também o algoritmo proposto foram comparados através de uma análise quantitativa, utilizando medidas numéricas

Ao participar do Municipal Velho Oeste MTB 2021, o atleta aceita totalmente o Regulamento da Prova, participando por livre e espontânea vontade, assume as despesas de

DRª ANGELA DE CASTRO CORREIA GOMES 2° Membro: PROF.. JOAREIS FERNANDES DE AZEVEDO 1°

Portanto, como objetivo, o trabalho visa a investigar os significados atribuídos pelos idosos ao envelhecimento ativo, dentro de um ambiente acadêmico de formação

Do mesmo modo, também não se pode esquecer a existência de diversos outros princípios inerentes à proteção ambiental, tais como o princípio do ambiente