SlideShare uma empresa Scribd logo
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. 
rafa.cassau@gmail.com | rafa_cassau@msn.com 
https://github.com/rafaelcassau
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.
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.
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.
Quem usa Python?
Mãos na massa 
Python já vem instalado nas distribuições Linux e OS X. 
Execução via terminal “python”. 
Interpretador Interativo.
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.
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)
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.
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
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).
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.
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>
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.
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.
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!"
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)
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!"
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.
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.
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.
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)
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)
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 = {}
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)]
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”‟
Tipos de dados (string) 
„A,B,C‟.split(„,‟) 
„nt Pithon‟.strip(„nt‟) 
„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
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‟
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)
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)
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.
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)
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)
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']
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)
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'
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
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
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.
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'
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
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
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
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]
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.
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.
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...
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.
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
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)
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.
Sucesso!
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
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".
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.
Sucesso!
Testando no browser
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.
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.
Criando a app library
Estrutura do projeto
Ciclo de vida (request)
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)
Iniciando (urls.py)
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.
Iniciando (views.py)
Testando
Testando
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
Iniciando (models.py)
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
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.
Configurando o banco 
Altere o nome do arquivo para “personal_library.db”.
Instalando a app 
Adicione a app library ao final da tupla e comente as 4 primeiras apps.
Validando os models
Exibindo o SQL da app
Criando as tabelas
Estrutura do projeto
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.
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”.
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.
Template padrão
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.
Template app library
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.
Inserindo (shell) 
Realiza um cadastro de livro no banco através da ferramenta “shell” do django. (ORM)
Testando 
Execute o comando runserver.
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.
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
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
Iniciando (forms.py)
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.
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.
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”.
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.
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”.
Testando
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.
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.
Refatorando o save
Testando 
Execute o runserver da aplicação. 
Cadastre um novo livro. 
Faça a alteração do livro cadastrado anteriormente.
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.
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.
Testando 
Execute o runserver da aplicação. 
Cadastre um novo livro. 
Faça a remoção do livro cadastrado anteriormente.
Estrutura da aplicação
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.
Django Admin 
Para ativa-lo é necessário habilitar as quatro primeiras linhas que estavam comentadas no “INSTALED_APPS”.
Django Admin 
Outro passo necessário é habilitar as rotas do “admin” que estavam comentadas no arquivo “urls.py”.
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.
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.
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.
Cadastro de grupos 
Permite o cadastro de grupos de acesso associados a ações de cada app instalada.
Listagem de grupos 
Lista os grupos de acesso cadastrados.
Cadastro de usuários 
Tela de cadastro de usuários divida em dois passos: 
1 - Dados de autenticação. 
2 - Dados pessoais.
Listagem de usuários 
Lista os usuários cadastrados. 
Possui filtros no canto superior direito.
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.
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.
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.
Customização model
Customização 
Após as alterações no model execute o runserver da aplicação e observe o resultado.
Customização 
Listagem de livros.
Customização 
Cadastro de livros.
Logout
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=PLfkVgm8720kzm6fmTekjtKyFcppyD4Ubd – 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)
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
Duvidas?

Mais conteúdo relacionado

Mais procurados

Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
Grupython Ufla
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
Christian Perone
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
Luciano Ramalho
 
Variáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dadosVariáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dados
BrunoSilvaSantana
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
Luciano Ramalho
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - Apresentação
Leinylson Fontinele
 
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando ArquivosAula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
Daniel Brandão
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
Fabrício Lopes Sanchez
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
Alvaro Oliveira
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
Priscila Mayumi
 
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
antonio sérgio nogueira
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
Helio Colombe
 
Lógica de Programação - Estruturas de Seleção
Lógica de Programação - Estruturas de SeleçãoLógica de Programação - Estruturas de Seleção
Lógica de Programação - Estruturas de Seleção
Janynne Gomes
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
Marcio Marinho
 
Python
PythonPython
Funções em C
Funções em CFunções em C
Funções em C
Elaine Cecília Gatto
 
Lógica de Programação - Algoritmos
Lógica de Programação - AlgoritmosLógica de Programação - Algoritmos
Lógica de Programação - Algoritmos
Roney Sousa
 
Python Orientação a Objeto
Python Orientação a ObjetoPython Orientação a Objeto
Python Orientação a Objeto
antonio sérgio nogueira
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de Dados
Daniel Brandão
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
Giancarlo Silva
 

Mais procurados (20)

Apresentação python fábio jr alves
Apresentação python   fábio jr alvesApresentação python   fábio jr alves
Apresentação python fábio jr alves
 
Python - Introdução Básica
Python - Introdução BásicaPython - Introdução Básica
Python - Introdução Básica
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Variáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dadosVariáveis, constantes e tipos de dados
Variáveis, constantes e tipos de dados
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Estrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - ApresentaçãoEstrutura de Dados - Aula 01 - Apresentação
Estrutura de Dados - Aula 01 - Apresentação
 
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando ArquivosAula 04 PHP - Utilizando Funções e Manipulando Arquivos
Aula 04 PHP - Utilizando Funções e Manipulando Arquivos
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 
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
 
Curso de Python (Básico) - Português
Curso de Python (Básico) - PortuguêsCurso de Python (Básico) - Português
Curso de Python (Básico) - Português
 
Lógica de Programação - Estruturas de Seleção
Lógica de Programação - Estruturas de SeleçãoLógica de Programação - Estruturas de Seleção
Lógica de Programação - Estruturas de Seleção
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
Python
PythonPython
Python
 
Funções em C
Funções em CFunções em C
Funções em C
 
Lógica de Programação - Algoritmos
Lógica de Programação - AlgoritmosLógica de Programação - Algoritmos
Lógica de Programação - Algoritmos
 
Python Orientação a Objeto
Python Orientação a ObjetoPython Orientação a Objeto
Python Orientação a Objeto
 
PHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de DadosPHP Aula07 - conexão Com Banco de Dados
PHP Aula07 - conexão Com Banco de Dados
 
Curso básico de Algoritmos com Python
Curso básico de Algoritmos com PythonCurso básico de Algoritmos com Python
Curso básico de Algoritmos com Python
 

Destaque

Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de django
rosenclever
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
Igor Sobreira
 
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
Osvaldo Santana Neto
 
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
Rodrigo Nossal
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
ricobl
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
Mateus Padua
 
Python no Celular
Python no CelularPython no Celular
Python no Celular
iuridiniz
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em Python
Relsi Maron
 
Canivete python
Canivete pythonCanivete python
Canivete python
Anderson Dantas
 
Object.__class__.__dict__ - python object model and friends - with examples
Object.__class__.__dict__ - python object model and friends - with examplesObject.__class__.__dict__ - python object model and friends - with examples
Object.__class__.__dict__ - python object model and friends - with examples
Robert Lujo
 
Programando em python comandos basicos
Programando em python   comandos basicosProgramando em python   comandos basicos
Programando em python comandos basicos
samuelthiago
 
Django, Framework Python para desenvolvimento web
Django, Framework Python para desenvolvimento webDjango, Framework Python para desenvolvimento web
Django, Framework Python para desenvolvimento web
Mayron Cachina
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao Django
Vinicius Mendes
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com Django
Diemesleno Souza Carvalho
 
Django - Lightning Talk - We Web Conf
Django - Lightning Talk - We Web ConfDjango - Lightning Talk - We Web Conf
Django - Lightning Talk - We Web Conf
Julio Cesar Eiras Melanda
 
Introdução ao Python com Django
Introdução ao Python com DjangoIntrodução ao Python com Django
Introdução ao Python com Django
Henrique Gabriel Gularte Pereira
 
Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
Vinta Software
 
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
Rafael Nunes
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
Filipe Ximenes
 
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
Allyson Barros
 

Destaque (20)

Mini curso de django
Mini curso de djangoMini curso de django
Mini curso de django
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 
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
 
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
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Python no Celular
Python no CelularPython no Celular
Python no Celular
 
Desenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em PythonDesenvolvendo aplicações Mobile em Python
Desenvolvendo aplicações Mobile em Python
 
Canivete python
Canivete pythonCanivete python
Canivete python
 
Object.__class__.__dict__ - python object model and friends - with examples
Object.__class__.__dict__ - python object model and friends - with examplesObject.__class__.__dict__ - python object model and friends - with examples
Object.__class__.__dict__ - python object model and friends - with examples
 
Programando em python comandos basicos
Programando em python   comandos basicosProgramando em python   comandos basicos
Programando em python comandos basicos
 
Django, Framework Python para desenvolvimento web
Django, Framework Python para desenvolvimento webDjango, Framework Python para desenvolvimento web
Django, Framework Python para desenvolvimento web
 
Mini curso introdutório ao Django
Mini curso introdutório ao DjangoMini curso introdutório ao Django
Mini curso introdutório ao Django
 
Aplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web Com DjangoAplicacoes Rapidas Para Web Com Django
Aplicacoes Rapidas Para Web 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
 
Introdução ao Python com Django
Introdução ao Python com DjangoIntrodução ao Python com Django
Introdução ao Python com Django
 
Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
 
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
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
 
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
 

Semelhante a Python e django na prática

Aula python
Aula pythonAula python
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
wildcat9335
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
rodrigopex
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
ciceroclc
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
Fabio Spanhol
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
Rodrigo Amaral
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Alvaro Oliveira
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
Stephen Chin
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
Flávio Schuindt
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
guestac3de
 
Tutorial Python - 1
Tutorial Python - 1Tutorial Python - 1
Tutorial Python - 1
Fabio Spanhol
 
Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetos
Felipe Hummel
 
Introdução a programação em python d2
Introdução a programação em python d2Introdução a programação em python d2
Introdução a programação em python d2
Moises de Paula
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
Marcelo Barros de Almeida
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
Julio Cesar Eiras Melanda
 
Slide_Python.pdf
Slide_Python.pdfSlide_Python.pdf
Slide_Python.pdf
HevertonSCosta
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação Funcional
Lambda 3
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
Diogo Gomes
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
Junior Sobrenome
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
Rildo Pragana
 

Semelhante a Python e django na prática (20)

Aula python
Aula pythonAula python
Aula python
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Computação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo TutorialComputação Científica com SciPy - Brevíssimo Tutorial
Computação Científica com SciPy - Brevíssimo Tutorial
 
Python: programação divertida novamente
Python: programação divertida novamentePython: programação divertida novamente
Python: programação divertida novamente
 
Cherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações webCherrypy - um framework para desenvolvimento rápido de aplicações web
Cherrypy - um framework para desenvolvimento rápido de aplicações web
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
A Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicialA Linguagem Lua - Uma abordagem inicial
A Linguagem Lua - Uma abordagem inicial
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Tutorial Python - 1
Tutorial Python - 1Tutorial Python - 1
Tutorial Python - 1
 
Scala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetosScala: unindo programação funcional e orientação a objetos
Scala: unindo programação funcional e orientação a objetos
 
Introdução a programação em python d2
Introdução a programação em python d2Introdução a programação em python d2
Introdução a programação em python d2
 
Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)Python para desenvolvedores - material apoio (parte I)
Python para desenvolvedores - material apoio (parte I)
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Slide_Python.pdf
Slide_Python.pdfSlide_Python.pdf
Slide_Python.pdf
 
Técnicas de Programação Funcional
Técnicas de Programação FuncionalTécnicas de Programação Funcional
Técnicas de Programação Funcional
 
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop PythonIEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
IEEEweek 2017 @ DETI Univ. Aveiro - Workshop Python
 
Linguagem de Programação Python
Linguagem de Programação PythonLinguagem de Programação Python
Linguagem de Programação Python
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 

Python e django na prática

  • 1. Python e Django na Prática!
  • 2. Apresentação Rafael Stain Cassau Analista de Sistemas – S2IT Bacharel em Sistemas de Informação Programando profissionalmente desde 2010. rafa.cassau@gmail.com | rafa_cassau@msn.com https://github.com/rafaelcassau
  • 3. 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.
  • 4. 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.
  • 5. 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.
  • 7. Mãos na massa Python já vem instalado nas distribuições Linux e OS X. Execução via terminal “python”. Interpretador Interativo.
  • 8. 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.
  • 9. 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)
  • 10. 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.
  • 11. 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
  • 12. 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).
  • 13. 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.
  • 14. 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>
  • 15. 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.
  • 16. 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.
  • 17. 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!"
  • 18. 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)
  • 19. 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!"
  • 20. 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.
  • 21. 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.
  • 22. 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.
  • 23. 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)
  • 24. 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)
  • 25. 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 = {}
  • 26. 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)]
  • 27. 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”‟
  • 28. Tipos de dados (string) „A,B,C‟.split(„,‟) „nt Pithon‟.strip(„nt‟) „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
  • 29. 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‟
  • 30. 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)
  • 31. 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)
  • 32. 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.
  • 33. 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)
  • 34. 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)
  • 35. 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']
  • 36. 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)
  • 37. 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'
  • 38. 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
  • 39. 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
  • 40. 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.
  • 41. 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'
  • 42. 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
  • 43. 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
  • 44. 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
  • 45. 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]
  • 46. 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.
  • 47. 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.
  • 48. 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...
  • 49. 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.
  • 50. 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
  • 51. 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)
  • 52. 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.
  • 54. 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
  • 55. 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".
  • 56. 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.
  • 59. 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.
  • 60. 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.
  • 61. Criando a app library
  • 63. Ciclo de vida (request)
  • 64. 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)
  • 66. 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.
  • 70. 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
  • 72. 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
  • 73. 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.
  • 74. Configurando o banco Altere o nome do arquivo para “personal_library.db”.
  • 75. Instalando a app Adicione a app library ao final da tupla e comente as 4 primeiras apps.
  • 77. Exibindo o SQL da app
  • 80. 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.
  • 81. 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”.
  • 82. 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.
  • 84. 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.
  • 86. 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.
  • 87. Inserindo (shell) Realiza um cadastro de livro no banco através da ferramenta “shell” do django. (ORM)
  • 88. Testando Execute o comando runserver.
  • 89. 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.
  • 90. 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
  • 91. 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
  • 93. 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.
  • 94. 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.
  • 95. 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”.
  • 96. 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.
  • 97. 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”.
  • 99. 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.
  • 100. 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.
  • 102. Testando Execute o runserver da aplicação. Cadastre um novo livro. Faça a alteração do livro cadastrado anteriormente.
  • 103. 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.
  • 104. 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.
  • 105. Testando Execute o runserver da aplicação. Cadastre um novo livro. Faça a remoção do livro cadastrado anteriormente.
  • 107. 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.
  • 108. Django Admin Para ativa-lo é necessário habilitar as quatro primeiras linhas que estavam comentadas no “INSTALED_APPS”.
  • 109. Django Admin Outro passo necessário é habilitar as rotas do “admin” que estavam comentadas no arquivo “urls.py”.
  • 110. 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.
  • 111. 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.
  • 112. 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.
  • 113. Cadastro de grupos Permite o cadastro de grupos de acesso associados a ações de cada app instalada.
  • 114. Listagem de grupos Lista os grupos de acesso cadastrados.
  • 115. Cadastro de usuários Tela de cadastro de usuários divida em dois passos: 1 - Dados de autenticação. 2 - Dados pessoais.
  • 116. Listagem de usuários Lista os usuários cadastrados. Possui filtros no canto superior direito.
  • 117. 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.
  • 118. 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.
  • 119. 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.
  • 121. Customização Após as alterações no model execute o runserver da aplicação e observe o resultado.
  • 124. Logout
  • 125. 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=PLfkVgm8720kzm6fmTekjtKyFcppyD4Ubd – 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)
  • 126. 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