python e django na prática

127
Python e Django na Prática!

Upload: rafael-cassau

Post on 14-Dec-2014

256 views

Category:

Technology


7 download

DESCRIPTION

Esse material tem o objetivo de ser uma introdução as principais características da linguagem Python, tais como sintaxe básica, tipos de dados, operadores, estrutura condicional, estrutura de repetição e orientação a objetos. Após a introdução a linguagem, o Django é apresentado de maneira pratica, desenvolvendo um CRUD para exemplificar suas principais características e vantagens, esse CRUD é feito passo a passo e após seu termino é feito uma introdução básica aos recursos do Admin do Django.

TRANSCRIPT

Page 1: Python e django na prática

Python e Django na Prática!

Page 2: Python e django na prática

Apresentação Rafael Stain Cassau

Analista de Sistemas – S2IT

Bacharel em Sistemas de Informação

Programando profissionalmente desde 2010.

[email protected] | [email protected]

https://github.com/rafaelcassau

Page 3: Python e django na prática

História Python foi criado em meados de

1989.

Guido Van Rossum.

Python não é inspirado na cobra

(Monty Python).

Influências de ABC, C, Perl, Haskell,

SmallTalk.

Page 4: Python e django na prática

Python Linguagem de Alto nível.

Open Source.

Tipagem dinâmica.

Fortemente Tipada.

Multiplataforma (Unix, Linux, Mac, Windows, Mobile).

Multiparadigma (OO, funcional e procedural).

Compilada + Interpretada.

Linguagem Interativa.

Linguagem de scrips.

Page 5: Python e django na prática

Versões

2.7.6 – Mantido até que a versão 3.x esteja estável e com

boa parte das bibliotecas (frameworks) portados.

3.4.0 – Evolução da linguagem desenvolvida paralelamente

pela comunidade pois quebra a compatibilidade retroativa da

linguagem.

Page 6: Python e django na prática

Quem usa Python?

Page 7: Python e django na prática

Mãos na massa Python já vem instalado nas distribuições Linux e OS X.

Execução via terminal “python”.

Interpretador Interativo.

Page 8: Python e django na prática

Detalhes da linguagem Case sensitive.

Bloco de comandos por endentação (não tem {} ou begin end).

Não tem (ponto e virgula).

Um comando por linha.

Não misture espaços com tabs.

# comentário de uma linha.

"""comentário""" documentação, ou textos em muitas linhas.

Page 9: Python e django na prática

Números e operadores

int – Inteiros.

long – Inteiros longos.

float – Ponto flutuante.

complex – Complexos.

+ (Soma).

- (Subtração).

* (Multiplicação).

/ (Divisão).

// (Divisão inteira para floats).

% (Módulo).

** (Exponenciação).

3 / 2 = 1 (int/int = int).

3.0 / 2 = 1.5 (float/int = float)

3 / 2.0 = 1.5 (int/float = float)

3.0 // 2.0 = 1.0

(float//float = float arredondado)

Page 10: Python e django na prática

Operadores lógicos 0 - False,

0.0 - False,

[] - False,

() - False,

{} - False,

“” - False,

set() - False,

None - False,

== (Igualdade),

!= (Diferença),

<> (Diferença),

> (Maior),

>= (Maior igual),

< (Menor),

<= (Menor igual),

is (Identidade),

not (negação),

and (e),

or (ou),

in (contido),

not in (Não contido),

is not (Negação de

identidade),

Qualquer outro

valor diferente

dos citados

como False é

considerado

True.

Page 11: Python e django na prática

Palavras reservadas and

as

assert

break

class

continue

def

del

elif

Else

lambda

None

nonlocal

not

or

pass

print

raise

return

True

try

while

with

yield

except

exec

False

finally

for

global

if

import

in

Is

Page 12: Python e django na prática

Atribuição = (simples).

+= (soma reduzida).

-= (subtração reduzida).

/= (divisão reduzida).

//= (inteira reduzida).

%= (modulo reduzida).

*= (multiplicação reduzida).

**= (exponenciação reduzida).

a, b = b, a (atribuição em uma linha).

Page 13: Python e django na prática

fusca = Carro()

fusca2 = fusca

del fusca

del fusca2

referências [ 1 ]

referências [ 2 ]

referências [ 1 ]

referências [ 0 ]

Referências

Quando o contador de referências chegar a zero o

garbage collector é chamado.

Page 14: Python e django na prática

if <condição>:

<bloco de comandos>

elif <condição>:

<bloco de comandos>

else:

<bloco de comandos>

Estrutura condicional Python não tem switch/case.

if, elif, else - (elif - É uma junção do comando else if).

<bloco de comandos> if <condição> else <bloco de comandos>

Page 15: Python e django na prática

Estrutura de repetição (while)

Python não tem do while. O comando while possui um else.

while <condicao>:

<bloco de comandos>

else:

<bloco de comandos>

O else será executado quando a condição se tornar false.

Page 16: Python e django na prática

Estrutura de repetição (for)

O comando for é executado sobre um objeto iteravel, podendo

ser este uma string, uma lista, uma tupla, um dicionário, etc..

O comando for possui um else.

for <referência> in <iterator>:

<bloco de comandos>

else:

<bloco de comandos>

O else será executado ao fim da iteração.

Page 17: Python e django na prática

Estrutura de repetição (for)

for character in 'Python is powerfull language programming':

print character

else:

print "Terminou de iterar pela frase!"

for number in range(0, 100, 2):

print number

else:

print "Terminou de iterar pelo intervalo de 0 a 100 de 2 em 2!"

Page 18: Python e django na prática

fruit_list = ['orange', 'lemon']

for i, fruit in enumerate(fruit_list):

print i, fruit

else:

print "As frutas acabaram!"

fruit_list = ['orange', 'lemon']

for fruit in fruit_list:

print fruit

else:

print "As frutas acabaram!"

Estrutura de repetição (for)

Page 19: Python e django na prática

Estrutura de repetição (for)

color_list = ('blue', 'red',)

for color in color_ist:

print color

else:

print “Terminou!"

dict_char = {1: 'A', 2: 'B', 3: 'C', 4: 'D'}

for k, v in dict_char.items():

print 'Chave: %s, Valor: %s' % (k, v)

else:

print “Terminou!"

Page 20: Python e django na prática

Comandos pass - Preenche blocos vazios de código, substitui os delimitadores

de código, tais como {} ou begin end.

del - remove a referência de um objeto ou um elemento de uma

coleção.

exec - executa código direto de uma string passada como

parâmetro.

assert - Verifica se uma condição é verdadeira, caso contrário

emite um assertionError.

Page 21: Python e django na prática

Tipos de dados Em python todo tipo de dados é objeto!

print 5 .__add__(1)

>>> 6

Não existe conversão implícita, o único caso é a promoção de

um (int) para (long) quando o mesmo excede a capacidade

máxima de armazenamento para o tipo inteiro.

Page 22: Python e django na prática

Tipos de dados (Sequências)

Indexáveis - Possuem um índice para melhorar a performance.

Iteráveis - Implementam o comportamento de uma coleção iterável.

Fatiáveis - (slice) é uma técnica de obter pedaços da lista com sintaxe

simples.

List comprehension - Capacidade de executar operações iteráveis

de uma lista em uma única expressão escrita em uma linha.

Page 23: Python e django na prática

Tipos de dados (list) Listas são objetos mutáveis.

Podem ser criadas através da função builtin list() ou de maneira literal

com a sintaxe [].

my_list = list()

my_list = list(iterable)

my_list = []

my_list.append(object)

my_list.insert(index, object)

my_list.extend([1,2,3])

my_list.remove(value)

my_list.index(object)

my_list.count(object)

Page 24: Python e django na prática

Tipos de dados (tuple) Tuplas são objetos imutáveis.

É ordenada por posição. (Posições são importantes)

Podem ser criadas através da função builtin tuple() ou de maneira

literal.

my_tuple = tuple()

my_tuple = tuple(iterable)

my_tuple = (1, 2, 3,)

my_tuple = (1,)

my_tuple = 1, 2, 3,

my_tuple = 1,

my_tuple.index(object)

my_tuple.count(object)

Page 25: Python e django na prática

Tipos de dados (dict) Dicionários são objetos compostos por chaves e valores.

Não são ordenados.

Somente objetos imutáveis podem ser usados como chave.

Dicionários podem ser criados através da função builtin dict() ou de

forma literal através da sintaxe {}.

my_dict = dict()

my_dict = dict(k1=1, k2=v2)

my_dict = {}

Page 26: Python e django na prática

Tipos de dados (dict)

my_dict.get(key, default)

my_dict.pop(key, default)

my_dict.setdefault(key, default)

my_dict.has_key(key)

my_dict.keys()

my_dict.values()

my_dict.items()

my_dict.update(k1=v1, k2=v2)

my_dict[key]

del my_dict[key]

my_dict[key] = value

key in my_dict:

[key1, key2]

[value1, value2]

[(key1, value1), (key2, value2)]

Page 27: Python e django na prática

Tipos de dados (string) Strings são objetos imutáveis.

É possível iterar strings e fatiar strings. (slice)

Podem ser criadas com aspas simples ou duplas, ou três aspas

simples ou duplas. (Multilinha e docstrings)

my_string = „Python is powerfull language‟

my_string = “Python is powerfull language”

my_string = “„Python is powerfull language”‟

Page 28: Python e django na prática

Tipos de dados (string)

„A,B,C‟.split(„,‟)

„\n\t Pithon‟.strip(„\n\t‟)

„Python‟.replace(„P‟, „p‟)

„Python‟.upper()

„Python‟.lower()

„Python‟.startswith(„py‟)

„Python‟.endstswith(„on‟)

„Python‟.isdigit()

„ ‟.join(„Python‟)

[„A‟, „B‟, „C‟]

Python

python

PYTHON

python

True

True

False

P Y T H O N

Page 29: Python e django na prática

Slice Slice é a capacidade de fatiar um iterador usando a sintaxe:

Iterator[inicio:fim:intervalo]

Inicio: Se não for especificado é 0 (zero).

Fim: Se não for especificado é a tamanho da string menos 1 (um).

Intervalo: Se não for especificado é 1 (um).

„Python language‟[0]

„Python language‟[:6]

„Python language‟[6:]

„Python language‟[0:6:2]

„P‟

„Python‟

„ language‟

„Pto‟

Page 30: Python e django na prática

Arquivos (file) Arquivos podem ser criados ou abertos de duas formas diferentes:

Contrutor: file(name, mode, buffer)

Builtin: open(name, mode, buffer)

Arquivos podem ser iterados.

r - leitura

w - escrita (trunca o arquivo)

a - escrita (adiciona)

b - binário

+ - ( leitura + escrita)

Page 31: Python e django na prática

file.close() - Fecha o arquivo

file.flush() - Esvazia o buffer

file.read(0) - Ira ler a linha 5 do arquivo

file.seek(3) - Posiciona o ponteiro na linha 3

file.tell() - Posiciona o ponteiro para o inicio do arquivo

file.write('line') - Escreve 'line'

file.readline() - Ira ler a linha onde o ponteiro estiver posicionado

file.readlines() - retorna um iterável do arquivo

Arquivos (file)

Page 32: Python e django na prática

Funções built-ins Python vem com baterias inclusas. (builtins)

Funções builtins já estão disponíveis no escopo global sem a

necessidade de import.

Dentre elas se destacam:

dir(object) - Imprime a lista de todos os métodos do objeto.

help(object) - Imprime a documentação de classe e de seus

respectivos métodos.

Page 33: Python e django na prática

Funções built-ins int(object)

isinstance(obj, cls)

len(iter)

list(iter)

long(object)

max(iter)

min(ter)

open(na, mod, buff)

range(start, stop, step)

reversed(iter)

set(iter)

sorted(iter)

str(object)

sum(iter)

tuple(iter)

type(object)

unicode(object)

abs(object)

bool(object)

dict(k1=v1)

dir(object)

divmod(x, y)

enumerate(iter)

file(na, mod, buff)

float(object)

help(object)

Page 34: Python e django na prática

Funções Funções em python também são objetos.

Podem ser passadas como parâmetro para outras funções.

Sempre retornam um objeto que por default é None.

Suportam valor default em seus parâmetros.

Suportam uma lista dinâmica de argumentos *args e um dicionário

dinâmico de valores **kwargs, caso sejam definidos. (devem ser os

últimos parâmetros).

Podem ter funções internas. (Closures)

Podem ser funções anônimas. (lambda)

Page 35: Python e django na prática

Funções def sum_two_num(n1=0, n2=0):

return n1 + n2;

def repeat_sum(fn, length):

total = 0

for i in range(1, (length + 1)):

result = fn(i, i)

total += result

print '%s call: %s' % (i, result)

print „Sum total: %s' % total

def repeat_sum_closure(length):

t = {'total': 0}

def sum_two_num(n1=0, n2=0, t={}):

answer = n1 + n2

total['total'] += answer

return answer

for i in range(1, (length+1)):

result = sum_two_num(i, i, total)

print '%s call: %s' % (i, result)

print 'Sum total: %s' % total['total']

Page 36: Python e django na prática

Funções def sum_two_num(*args, **kwargs):

if kwargs.get(„operacao‟) == „matematica‟:

return args[0] + args[1]

sum_two_num(2,2, operacao='matematica')

my_pow = lambda x: x**2

for i in range(1, 11):

print my_pow(i)

Page 37: Python e django na prática

Hierarquia do escopo A hierarquia de escopos segue o seguinte processo:

Busca as variáveis no escopo local, ou seja, funções internas ou

métodos de classes.

Busca as variáveis nas funções externas.

Busca as variáveis no escopo global.

Busca as variáveis no escopo builtin.

O comando global deve ser usado para alterar o valor de uma

variável global de dentro de uma função. (Evite variáveis globais)

language = 'Java'

def alter_language():

global language

language = 'Python'

Page 38: Python e django na prática

Exceptions Exceptions são objetos responsáveis por capturar e tratar erros comuns.

Python possui varias exceptions nativas.

Não existe o conceito de checked exceptions.

É recomendável a criação de exceptions personalizadas.

fruit_list = ['orange', apple]

try:

fruit = fruit_list[2]

except IndexError as e:

print 'Indice inválido!'

Exception

KeyError

IndexError

IndentationError

AttributeError

Page 39: Python e django na prática

Orientação a Objetos Orientação a objetos é um paradigma de programação.

Características e comportamentos. (Atributos e Classes)

Baixo acoplamento e alta coesão.

Abstração

Encapsulamento

Herança

Polimorfismo

Page 40: Python e django na prática

Abstração Python possui classes abstratas a partir da versão 2.6.

Possui herança múltipla.

Não possui o mecanismo de interface.

Podemos ter o mesmo comportamento de uma interface utilizando

classes abstratas e herança múltipla.

Page 41: Python e django na prática

Abstração class GemFigure(object):

def __init__(self, center):

self.center = center

def draw(self):

raise NotImplementError()

class Rectangle(GemFigure):

def __init__(self, center, height, width):

super(GemFigure, self).__init__(center)

self.center = center

def draw(self):

print 'rectangule drawn'

Page 42: Python e django na prática

Encapsulamento Em python o encapsulamento é por convenção.

Atributos ou métodos com prefixo _ são CONSIDERADOS de uso

interno do objeto. (Indica possíveis mudanças sem aviso prévio)

Atributos ou métodos com prefixo __ tem seu nome alterado pela

classe com o objetivo de evitar acesso externo.

class Person(object):

name = ''

_age = 0

__social_number = 0

Person.name

Person._age

Person._Person__social_number

Page 43: Python e django na prática

Encapsulamento class Person(object):

def __init__(self):

self._name = ''

def _get_name(self):

return self._name

def _set_name(self, name):

if not name:

raise ValueError('Vazio')

self._name = name

name = property(_get_name, _set_name)

p1 = Person()

p1.name = ''

ValueError: Vazio

Page 44: Python e django na prática

Herança Python suporta herança múltipla. (Muito cuidado!).

Mecanismo sofisticado de precedência de herança.

MRO - (Method Resolution Order).

class Father(object):

fhater = 'Eu sou o pai'

class Mother(object):

mother = 'Eu sou a mãe'

class Son(Father, Mother):

son = 'Eu sou o filho''

son = Son()

print son.father

print son.mother

print son.son

Page 45: Python e django na prática

Polimorfismo Polimorfismo é a capacidade de executar um comportamento em

comum de maneira especifica sem se preocupar com o tipo do

objeto.

name = 'Python is powerfull language'

print name[0:6] # chama o método __getslice__(0, 6)

>>> Python

fruit_list = ['orange', 'apple', lemon, 'strawberry']

print fruit_list[0:2] # chama o método __getslice__(0, 2)

>>> ['orange', apple]

Page 46: Python e django na prática

Outras características Atributos de classes X Atributos de instâncias.

Criação dinâmica de atributos em classes e instâncias.

Mixin em classes e instâncias.

Programação funcional. (map, filter, reduce, zip, lambda)

List comprehension.

Generators e generator comprehension.

Sobrecarga de operadores (special methods).

@classmethod X @staticmethod.

Page 47: Python e django na prática

Django

Criado por Jacob Kaplan-Moss, Adrian Holovaty e Simon Willison em

2003.

CMS para auxiliar na criação de modulos administraveis do Lawrence

Journal-World.

Disponibilizado Opensource logo depois.

Framework Full Stack.

Web ágil, plugável, action based.

Page 48: Python e django na prática

Componentes

ORM - Mapeador Objeto Relacional.

Template System - Linguagem de Templates.

URL dispatcher - Roteador de URLs.

Admin - Interface Administrativa automatizada.

Internacionalização.

Gerador e validador de formulários.

Autenticação, perfil de acessos, etc...

Page 49: Python e django na prática

MVC ou MTV

MVC - Model View Controller.

MTV - Model Template View.

Model - Camada responsável pela lógica de negocios, abstração de

persistência etc...

Template - Camada responsável pela lógica de visualização.

View - Camada responsável pela interface entre Model e Template.

Page 50: Python e django na prática

Ambiente (PIP) PIP – Utilitário de instalação de pacotes python.

Baixa e instala pacotes do PyPI (Python Package Index).

Download - https://www.python.org/download.

Distribuições baseadas em Debian - sudo apt-get install python-pip.

pip freeze – Lista os pacotes python instalados.

pip install nome_do_pacote – Instala novos pacotes.

pip uninstall nome_do_pacote – Desistala o pacote.

sudo apt-get install python-pip

Page 51: Python e django na prática

Ambiente (Virtualenv) Poderiamos desenvolver utilizando o interpretador padrão do python,

mas se tivessemos 2 sistemas sendo desenvolvidos simultaneamente

com versões do python diferentes?

virtualenv – pacote python que tem a capacidade de criar e gerenciar

ambientes isolados.

pip install virtualenv

virtualenv --no-site-packages diretorio/nome_do_ambiente

source diretorio/nome_do_ambiente/bin/activate

(nome_do_ambiente)

Page 52: Python e django na prática

Projeto

Biblioteca pessoal – Cadastrar livros pessoais e controlar empréstimos.

Cadastro de livros – (titulo, descrição, status, nome, email).

Instale o pip.

Crie o ambiente virtual com o nome "personal_library".

Ative o ambiente virtual.

Instale o Django 1.6. (pip install django==1.6).

execute o comando "pip freeze" para verificar se a instalação foi

realizada com sucesso.

Page 53: Python e django na prática

Sucesso!

Page 54: Python e django na prática

django-admin.py O modulo "django-admin.py" possui diversos comandos utilitários para

auxliar o desenvolvedor.

django-admin.py help - Lista os comandos disponíveis.

django-admin.py <comando> - Definição detalhada sobre o comando.

django-admin.py startproject nome_do_projeto

django-admin.py startapp nome_da_aplicacao

Page 55: Python e django na prática

Criando o projeto Execute o comando django-admin.py startproject personal_library.

O Django criará a seguinte estrutura:

personal_library

personal_library

__init__.py

settings.py

urls.py

wsgi.py

manage.py

Pasta onde o projeto está guardado.

Project (Não deve ser renomeada).

Arquivo vazio (indica um package).

Arquivo de configuração do projeto.

Definições de URLs do projeto.

Protocolo parecido com fastCGI serve HTTP.

Utilitário parecido com o "django-admin.py".

Page 56: Python e django na prática

Testando o projeto

O Django possui um servidor web interno para ser usado no ambiente

de desenvolvimento.

NUNCA use o servidor interno em produção.

O servidor local possui recarga automática de módulos e por padrão já

serve os arquivos estaticos. (javascripts, css, imagens, etc.).

O comando para executa-lo é "python manage.py runserver porta".

python manage.py runserver 8000.

Page 57: Python e django na prática

Sucesso!

Page 58: Python e django na prática

Testando no browser

Page 59: Python e django na prática

manage.py O módulo "manage.py" possui varios comandos utilitários.

syncdb - Cria tabelas no banco de dados.

dumpdata --format F [aplicação] - Extrai dados da aplicação em

XML/JSON.

loaddata fixture - Insere dados XML/JSON/YAML no banco de dados.

shell - Interpretador Python com modelo de dados.

create superuser --username --email - Cria uma usuário root.

runserver endereco:porta - Inicia o servidor web de desenvolvimento.

startapp aplicacao - Cria a estrutura de uma nova aplicação no projeto.

Page 60: Python e django na prática

Aplicações O django é um framework plugável.

Um projeto é uma composição de várias aplicações que PODEM ser

plugáveis e podem ser instaladas em vários projetos.

my_application

__init__.py

views.py

models.py

tests.py

admin.py

Nome da app.

Arquivo vazio (indica um package).

Módulo onde as views da app são criadas.

Módulo onde os models da app são criados.

Módulo onde os testes automatizados são criados.

Módulo onde a parte administrativa é criada.

Page 61: Python e django na prática

Criando a app library

Page 62: Python e django na prática

Estrutura do projeto

Page 63: Python e django na prática

Ciclo de vida (request)

Page 64: Python e django na prática

Urls É um módulo python responsável por realizar o roteamento de URLs do

projeto através do mapeamento das mesmas utilizando regex.

Todas as urls podem ficar em um unico arquivo urls.py, mas é

recomendável que cada aplicação contenha seu próprio arquivo urls.py

para mapear as urls expecificas da aplicação e deixa-la plugável.

Posteriormente o arquivo urls.py referênte ao projeto deve importar os

módulos urls.py de cada aplicação instalada ao projeto.

url(regex, app.views.action, name=my.action)

Page 65: Python e django na prática

Iniciando (urls.py)

Page 66: Python e django na prática

Views É um módulo python que agrupa um conjunto de actions (views).

Toda view deve receber um objeto “HTTPRequest” como primeiro

parâmetro e retornar um objeto “HTTPResponse” como resposta.

O objeto “HTTPRequest” é fornecido automaticamente pelo django.

O objeto “HTTPResponse” é de responsabilidade do desenvolvedor.

Page 67: Python e django na prática

Iniciando (views.py)

Page 68: Python e django na prática

Testando

Page 69: Python e django na prática

Testando

Page 70: Python e django na prática

Models É um módulo python responsável por mapear as tabelas do banco de

dados em objetos e abstrair toda a complexidade de manipulação das

tabelas. (CRUD)

TIPOS DE CAMPOS MAIS USADOS

BooleanField EmailField TextField

CharField DecimalField SlugField

DateField IntegerField URLField

OPÇÕES DE CAMPOS MAIS USADAS

null db_column primary_key

blank db_index unique

choices default verbose_name

Page 71: Python e django na prática

Iniciando (models.py)

Page 72: Python e django na prática

Iniciando (settings.py) O settings.py é um arquivo de configuração do projeto.

É criado automaticamente.

Já vem com varias definições inclusas e vários comentários

autoexplicativos sobre as mesmas.

Os parâmetros de configuração do banco ficam no settings.py

Page 73: Python e django na prática

Configurando o banco Atualmente o django suporta os seguintes bancos de dados:

SQLite

MySQL

PostGreSQL

Oracle

Usaremos o SQLite devido a facilidade de configuração, e por não

precisar de nenhum SGBD.

Page 74: Python e django na prática

Configurando o banco

Altere o nome do arquivo para “personal_library.db”.

Page 75: Python e django na prática

Instalando a app

Adicione a app library ao final da tupla e comente as 4 primeiras apps.

Page 76: Python e django na prática

Validando os models

Page 77: Python e django na prática

Exibindo o SQL da app

Page 78: Python e django na prática

Criando as tabelas

Page 79: Python e django na prática

Estrutura do projeto

Page 80: Python e django na prática

Templates O django possui uma linguagem de templates poderosa.

É possível extender templates e sobreescrever trechos especificos de

código com o mecânismo "extends".

É possível incluir paginas expecificas com o mecanismo "include".

As tags com (lógica) devem ficar entre as marcações "{% %}".

Para imprimir o resultado de uma expressão os marcadores utilizados

são "{{ }}".

É possível criar template "filters" e "tags" personalizadas.

Page 81: Python e django na prática

Templates O django possui por padrão dois mecânismos de busca de templates.

filesystem.Loader - percorre somente o projeto buscando por HTMLs

que estejam dentro de um diretório chamado “templates”.

app_directories.Loader - percorre somente as apps buscando por

HTMLs que estejam dentro de um diretório “templates”.

Page 82: Python e django na prática

Template padrão

Criando o template base.

Crie uma pasta chamada “templates” dentro do pacote

“personal_library”.

Adicione a tupla “TEMPLATE_DIRS” no settings do projeto, ela adiciona

o seguinte diretório na árvore de busca de templates do django.

Page 83: Python e django na prática

Template padrão

Page 84: Python e django na prática

Template app library Criando o template da app library.

Crie um diretório com as pastas “templates” e ”library” dentro da app.

O diretório é criado com esse padrão para distinguir que o template

“library.html” é referente a app “library”, pois pode existir um template

chamado “library.html” em outra app.

Essa técnica evita que o o mecânismo de busca do django carregue

templates errados.

Page 85: Python e django na prática

Template app library

Page 86: Python e django na prática

Listando livros Realiza uma busca em todos os livros. (ORM)

Altera método de retorno, para que o mesmo importe o template

“library.html” e popule o contexto com a lista de livros retornados do

banco.

Page 87: Python e django na prática

Inserindo (shell) Realiza um cadastro de livro no banco através da ferramenta “shell” do

django. (ORM)

Page 88: Python e django na prática

Testando Execute o comando runserver.

Page 89: Python e django na prática

Forms É um módulo python divido em duas funções principais:

1 - Validar a entrada de dados vindos do HTML.

2 - Gerar HTML automaticamente.

Fields – Realizam o mapeamento do formulário recebido via POST

convertendo os valores recebidos para tipos nativos do python.

Widgets – Geram o HTML que o field exibirá na página HTML.

Todo field possui um widget padrão atrelado a ele, mas é possível altera-

lo.

Page 90: Python e django na prática

Forms O django fornece duas classes geradoras de forms.

forms.Form – Classe padrão que define os fields e seus respectivos

widgets, que quando herdada serve para criar formulários específicos.

forms.ModelForm – Classe que usa o mecânismo de metaprogramação

e faz um introspecção no model definido em seu corpo para gerar os

fields dinamicamente em tempo de execução.

A renderização do formulário no template pode ser feita com os seguintes

comandos no template:

form.as_p, form.as_li, ou form.as_table

Page 91: Python e django na prática

Forms TIPOS DE CAMPOS MAIS USADOS

BooleanField DateField ImageField

CharField EmailField IntegerField

ChoiceField FileField MultipleChoiceField

TIPOS DE WIDGETS MAIS USADOS

TextInput FileInput CheckBoxInput

PasswordInput DateInput SelectMultiple

HiddenInput TextArea RadioSelect

Page 92: Python e django na prática

Iniciando (forms.py)

Page 93: Python e django na prática

Refatorando (index) Com o formulário de cadastro e alteração implementado, é necessário

criar uma instancia do mesmo e adiciona-la ao contexto para ser

retornado quando a view “index” é chamada.

Page 94: Python e django na prática

Cadastro livros Após alterar a view “index” para retornar o formulário no contexto, é

necessário adiciona-lo ao template “library.html” para que o mesmo

seja renderizado.

Page 95: Python e django na prática

Cadastro livros Na action do form foi adiciona a templatetag “url” contendo o nome da

rota que fará a ligação com a view responsável por persistir os livros no

banco.

É necessário adicionar essa rota no arquivo “urls.py”.

Page 96: Python e django na prática

Cadastro livros Com a rota adicionada no “urls.py” é necessário criar a view “save”

que conterá a lógica de persistência de livros no banco.

Page 97: Python e django na prática

Testando

Execute o runserver da aplicação e cadastre um novo livro.

Faça teste de validação de campos obrigatórios.

Veja que a mensagem de validação é exibida em inglês.

Para traduzi-la altere a variável “LANGUAGE_CODE” para “pt-br”

no “settings.py”.

Page 98: Python e django na prática

Testando

Page 99: Python e django na prática

Fluxo de alteração Para realizar a alteração de livros é necessário recuperar o objeto e

adiciona-lo ao formulário.

Quando a listagem foi implementada a URL especifica para a alteração

já foi adicionada no link “editar”.

Agora é necessário mapeá-la no “urls.py” adicionando uma rota a ela.

Page 100: Python e django na prática

Fluxo de alteração Com a rota adicionada no “urls.py” é necessário criar a view “edit”

que conterá a lógica de recuperação do objeto e adição do mesmo ao

contexto.

Page 101: Python e django na prática

Refatorando o save

Page 102: Python e django na prática

Testando Execute o runserver da aplicação.

Cadastre um novo livro.

Faça a alteração do livro cadastrado anteriormente.

Page 103: Python e django na prática

Fluxo de remoção Para realizar a remoção de livros é necessário recuperar o objeto e

remove-lo através do método “delete()”. (ORM)

Quando a listagem foi implementada a URL especifica para a remoção já

foi adicionada no link “excluir”.

Agora é necessário mapeá-la no “urls.py” adicionando uma rota a ela.

Page 104: Python e django na prática

Fluxo de remoção Com a rota adicionada no “urls.py” é necessário criar a view “remove”

que conterá a lógica de remoção do objeto.

Page 105: Python e django na prática

Testando Execute o runserver da aplicação.

Cadastre um novo livro.

Faça a remoção do livro cadastrado anteriormente.

Page 106: Python e django na prática

Estrutura da aplicação

Page 107: Python e django na prática

Django Admin É um mecanismo do django que permite a geração automática de

interfaces administrativas.

É flexível, ou seja é possível customizar somente partes especificas.

É customizavel, para cada model existe um conjunto de varias opções

para a modificação do layout e gerenciamento dos fluxos.

É fortemente baseado em metaprogramação.

Page 108: Python e django na prática

Django Admin Para ativa-lo é necessário habilitar as quatro primeiras linhas que

estavam comentadas no “INSTALED_APPS”.

Page 109: Python e django na prática

Django Admin Outro passo necessário é habilitar as rotas do “admin” que estavam

comentadas no arquivo “urls.py”.

Page 110: Python e django na prática

Django Admin Após realizar essas configurações execute o comando:

“python manage.py syncdb”, ele ira criar as tabelas necessárias e

sugerir a criação de um “superuser” que deve ser criado.

Page 111: Python e django na prática

Autenticação Após esses passos execute o runserver da aplicação e acesse a url:

“localhost:8000/admin”.

Autentique com o usuário criado no passo anterior.

Page 112: Python e django na prática

Dashboard Uma tela com uma listagem das aplicações instaladas no projeto é exibida

no canto superior esquerdo.

No canto superior direito uma tela de listagem de suas operações é

exibida.

Page 113: Python e django na prática

Cadastro de grupos Permite o cadastro de grupos de acesso associados a ações de cada app

instalada.

Page 114: Python e django na prática

Listagem de grupos Lista os grupos de acesso cadastrados.

Page 115: Python e django na prática

Cadastro de usuários Tela de cadastro de usuários divida em dois passos:

1 - Dados de autenticação.

2 - Dados pessoais.

Page 116: Python e django na prática

Listagem de usuários Lista os usuários cadastrados.

Possui filtros no canto superior direito.

Page 117: Python e django na prática

Adicionando apps Para permitir que uma “app” seja gerenciada pelo “Django Admin” é

necessário registra-la no arquivo “admin.py” que compõe a “app”.

Podemos registra-la da maneira clássica através do comando:

“admin.site.register(Library)”.

Ou da maneira customizada onde o comportamento padrão do “admin”

é alterado.

Page 118: Python e django na prática

Adicionando apps Após a configuração do “admin.py” execute o runserver da aplicação e

acesse o admin novamente.

A app “library” já esta no menu de aplicações que são gerenciadas

pelo admin.

Page 119: Python e django na prática

Customização

O item de menu referente a app “library” apareceu em inglês, não

somente ele como também a tela de listagem de livros, outro problema

é que na listagem não é exibido o titulo do livro e sim uma

representação do “objeto” recuperado.

Para resolver esses problemas é necessário adicionar algumas meta-

informações no model “Library” e sobrescrever o método

“__unicode__(self)” do mesmo.

Page 120: Python e django na prática

Customização model

Page 121: Python e django na prática

Customização Após as alterações no model execute o runserver da aplicação e

observe o resultado.

Page 122: Python e django na prática

Customização Listagem de livros.

Page 123: Python e django na prática

Customização Cadastro de livros.

Page 124: Python e django na prática

Logout

Page 125: Python e django na prática

Garimpando na web http://ark4n.files.wordpress.com/2010/01/python_para_desenvolvedores

_2ed.pdf - Livro de Python (Opensource)

http://osantana.me/pydjango/ - Curso de Python/Django

https://www.youtube.com/playlist?list=PLfkVgm8720kzm6fmTekjtKyFcpp

yD4Ubd – Curso de Python/Django

http://pycursos.com/biblioteca/ - Python (Assuntos diversos)

http://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-

a-programacao-orientada-a-objetos-em-python - OO

http://pycursos.com/python-para-zumbis/ - Python (Completo)

Page 126: Python e django na prática

Referências

https://docs.python.org/2/library/

https://docs.djangoproject.com/en/1.6/ref/

http://osantana.me/pydjango/

http://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-

presentation

http://www.python.org.br/wiki/ProgramacaoOrientadaObjetoPython

http://www.dcc.ufrj.br/~fabiom/mab225/pythonoo.pdf

Page 127: Python e django na prática

Duvidas?