Upload
junior-wagner-lopes
View
221
Download
0
Embed Size (px)
Citation preview
7/26/2019 Pythonedjangonapratica Pessoal
1/127
Python e Django naPrtica!
7/26/2019 Pythonedjangonapratica Pessoal
2/127
Apresentao Rafael Stain Cassau
Analista de SistemasS2IT
Bacharel em Sistemas de Informao
Programando profissionalmente desde 2010.
[email protected]| [email protected]
https://github.com/rafaelcassau
mailto:[email protected]:[email protected]://github.com/rafaelcassauhttps://github.com/rafaelcassauhttps://github.com/rafaelcassaumailto:[email protected]:[email protected]:[email protected]7/26/2019 Pythonedjangonapratica Pessoal
3/127
Histria Python foi criado em meados de1989.
Guido Van Rossum.
Python no inspirado na cobra
(Monty Python).
Influncias de ABC, C, Perl, Haskell,
SmallTalk.
7/26/2019 Pythonedjangonapratica Pessoal
4/127
Python Linguagem de Alto nvel.
Open Source.
Tipagem dinmica.
Fortemente Tipada.
Multiplataforma (Unix, Linux, Mac, Windows, Mobile).
Multiparadigma (OO, funcional e procedural).
Compilada + Interpretada.
Linguagem Interativa.
Linguagem de scrips.
7/26/2019 Pythonedjangonapratica Pessoal
5/127
Verses
2.7.6Mantido at que a verso 3.x esteja estvel e com
boa parte das bibliotecas (frameworks) portados.
3.4.0Evoluo da linguagem desenvolvida paralelamente
pela comunidade pois quebra a compatibilidade retroativa da
linguagem.
7/26/2019 Pythonedjangonapratica Pessoal
6/127
Quem usa Python?
7/26/2019 Pythonedjangonapratica Pessoal
7/127
Mos na massa Python j vem instalado nas distribuies Linux e OS X.
Execuo via terminal python.
Interpretador Interativo.
7/26/2019 Pythonedjangonapratica Pessoal
8/127
Detalhes da linguagem Case sensitive. Bloco de comandos por endentao (no tem {}ou begin end).
No tem (ponto e virgula). Um comando por linha.
No misture espaos com tabs.
# comentrio de uma linha.
"""comentrio""" documentao, ou textos em muitas linhas.
7/26/2019 Pythonedjangonapratica Pessoal
9/127
Nmeros e operadores
intInteiros. longInteiros longos.
floatPonto flutuante.
complexComplexos.
+(Soma).
-(Subtrao).
*(Multiplicao).
/ (Diviso).
// (Diviso inteira para floats).
% (Mdulo).
**(Exponenciao).
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)
7/26/2019 Pythonedjangonapratica Pessoal
10/127
Operadores lgicos 0- False,
0.0- False,
[]- False,
()- False, {}- False,
- False,
set()- False,
None- False,
==(Igualdade),
!=(Diferena),
(Diferena),
>(Maior),
>= (Maior igual),
7/26/2019 Pythonedjangonapratica Pessoal
11/127
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
7/26/2019 Pythonedjangonapratica Pessoal
12/127
Atribuio =(simples).
+=(soma reduzida).
-=(subtrao reduzida).
/=(diviso reduzida).
//=(inteira reduzida).
%=(modulo reduzida).
*=(multiplicao reduzida).
**=(exponenciao reduzida).
a, b = b, a(atribuio em uma linha).
7/26/2019 Pythonedjangonapratica Pessoal
13/127
fusca = Carro()
fusca2 = fusca
delfusca
delfusca2
referncias [ 1 ]
referncias [ 2 ]
referncias [ 1 ]
referncias [ 0 ]
Referncias
Quando o contador de refernciaschegar a zero ogarbage collector chamado.
7/26/2019 Pythonedjangonapratica Pessoal
14/127
if:
elif:
else:
Estrutura condicional Python no tem switch/case.
if, elif, else- (elif- uma juno do comando else if).
if else
7/26/2019 Pythonedjangonapratica Pessoal
15/127
Estrutura de repetio
(while) Python no tem do while. O comando whilepossui um else.
while:
else:
O else ser executado quando a condio se tornar false.
7/26/2019 Pythonedjangonapratica Pessoal
16/127
Estrutura de repetio(for)
O comando for executado sobre um objeto iteravel, podendo
ser este uma string, uma lista, uma tupla, um dicionrio, etc..
O comando forpossui um else.
for in :
else:
O else ser executado ao fim da iterao.
7/26/2019 Pythonedjangonapratica Pessoal
17/127
Estrutura de repetio(for)
forcharacter in'Python is powerfull language programming':
printcharacterelse:
print"Terminou de iterar pela frase!"
fornumber inrange(0,100,2):printnumber
else:
print"Terminou de iterar pelo intervalo de 0 a 100 de 2 em 2!"
7/26/2019 Pythonedjangonapratica Pessoal
18/127
fruit_list = ['orange', 'lemon']
fori,fruit inenumerate(fruit_list):
printi, fruit
else:
print"As frutas acabaram!"
fruit_list = ['orange','lemon']
forfruit infruit_list:
printfruit
else:
print"As frutas acabaram!"
Estrutura de repetio(for)
7/26/2019 Pythonedjangonapratica Pessoal
19/127
Estrutura de repetio(for)
color_list = ('blue','red',)
forcolor incolor_ist:
printcolor
else:
printTerminou!"
dict_char = {1:'A',2:'B',3:'C',4:'D'}
fork,v indict_char.items():
print'Chave: %s, Valor: %s' % (k, v)
else:
printTerminou!"
7/26/2019 Pythonedjangonapratica Pessoal
20/127
Comandos pass- Preenche blocos vazios de cdigo, substitui os delimitadores
de cdigo, tais como {}ou begin end.
del- remove a referncia de um objeto ou um elemento de umacoleo.
exec- executa cdigo direto de uma string passada como
parmetro.
assert- Verifica se uma condio verdadeira, caso contrrio
emite um assertionError.
7/26/2019 Pythonedjangonapratica Pessoal
21/127
Tipos de dados Em python todo tipo de dados objeto!
print5 .__add__(1)
>>> 6
No existe converso implcita, o nico caso a promoo de
um (int)para (long)quando o mesmo excede a capacidade
mxima de armazenamento para o tipo inteiro.
7/26/2019 Pythonedjangonapratica Pessoal
22/127
Tipos de dados(Sequncias) Indexveis- Possuem um ndice para melhorar a performance.
Iterveis- Implementam o comportamento de uma coleo itervel.
Fativeis- (slice) uma tcnica de obter pedaos da lista com sintaxe
simples.
List comprehension- Capacidade de executar operaes iterveis
de uma lista em uma nica expresso escrita em uma linha.
7/26/2019 Pythonedjangonapratica Pessoal
23/127
Tipos de dados (list) Listas so objetos mutveis.
Podem ser criadas atravs da funo 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)
7/26/2019 Pythonedjangonapratica Pessoal
24/127
Tipos de dados (tuple) Tuplas so objetos imutveis.
ordenada por posio. (Posies so importantes)
Podem ser criadas atravs da funo 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)
7/26/2019 Pythonedjangonapratica Pessoal
25/127
Tipos de dados (dict) Dicionrios so objetos compostos por chaves e valores.
No so ordenados.
Somente objetos imutveis podem ser usados como chave.
Dicionrios podem ser criados atravs da funo builtin dict() ou de
forma literal atravs da sintaxe {}.
my_dict = dict()
my_dict = dict(k1=1,k2=v2)
my_dict = {}
7/26/2019 Pythonedjangonapratica Pessoal
26/127
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]
delmy_dict[key]my_dict[key] = value
key in my_dict:
[key1, key2]
[value1, value2]
[(key1, value1), (key2, value2)]
7/26/2019 Pythonedjangonapratica Pessoal
27/127
Tipos de dados (string) Strings so objetos imutveis.
possvel iterar strings e fatiar strings. (slice)
Podem ser criadas com aspas simples ou duplas, ou trs 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
7/26/2019 Pythonedjangonapratica Pessoal
28/127
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
pythonPYTHON
python
True
True
False
P Y T H O N
7/26/2019 Pythonedjangonapratica Pessoal
29/127
Slice Slice a capacidade de fatiar um iterador usando a sintaxe:
Iterator[inicio:fim:intervalo]
Inicio: Se no for especificado 0 (zero).
Fim: Se no for especificado a tamanho da string menos 1 (um).
Intervalo: Se no for especificado 1 (um).
Python language[0]
Python language[:6]
Python language[6:]
Python language[0:6:2]
P
Python
language
Pto
7/26/2019 Pythonedjangonapratica Pessoal
30/127
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- binrio
+- ( leitura + escrita)
7/26/2019 Pythonedjangonapratica Pessoal
31/127
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 posicionadofile.readlines() - retorna um itervel do arquivo
Arquivos (file)
7/26/2019 Pythonedjangonapratica Pessoal
32/127
Funes built-ins Python vem com baterias inclusas. (builtins)
Funes builtins j esto disponveis no escopo global sem a
necessidade de import.
Dentre elas se destacam:
dir(object)- Imprime a lista de todos os mtodos do objeto.
help(object)- Imprime a documentao de classe e de seus
respectivos mtodos.
7/26/2019 Pythonedjangonapratica Pessoal
33/127
Funes 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)
7/26/2019 Pythonedjangonapratica Pessoal
34/127
Funes Funes em python tambm so objetos.
Podem ser passadas como parmetro para outras funes.
Sempre retornam um objeto que por default None.
Suportam valor default em seus parmetros.
Suportam uma lista dinmica de argumentos *argse um dicionrio
dinmico de valores **kwargs, caso sejam definidos. (devem ser os
ltimos parmetros). Podem ter funes internas. (Closures)
Podem ser funes annimas. (lambda)
7/26/2019 Pythonedjangonapratica Pessoal
35/127
Funesdefsum_two_num(n1=0, n2=0):
returnn1 + n2;
defrepeat_sum(fn, length):total = 0
fori inrange(1, (length + 1)):
result = fn(i, i)
total += result
print'%s call: %s' % (i, result)
printSum total: %s' % total
defrepeat_sum_closure(length):
t = {'total': 0}
defsum_two_num(n1=0, n2=0, t={}):
answer = n1 + n2total['total'] += answer
returnanswer
fori inrange(1, (length+1)):
result = sum_two_num(i, i, total)
print'%s call: %s' % (i, result)
print'Sum total: %s' % total['total']
7/26/2019 Pythonedjangonapratica Pessoal
36/127
Funesdefsum_two_num(*args, **kwargs):
if kwargs.get(operacao) == matematica:
return args[0] + args[1]
sum_two_num(2,2, operacao='matematica')
my_pow = lambdax: x**2
fori inrange(1, 11):
printmy_pow(i)
7/26/2019 Pythonedjangonapratica Pessoal
37/127
Hierarquia do escopo A hierarquia de escopos segue o seguinte processo:
Busca as variveis no escopo local, ou seja, funes internas ou
mtodos de classes.
Busca as variveis nas funes externas.
Busca as variveis no escopo global.
Busca as variveis no escopo builtin.
O comando globaldeve ser usado para alterar o valor de uma
varivel global de dentro de uma funo. (Evite variveis globais)
language = 'Java'
defalter_language():
globallanguage
language = 'Python'
7/26/2019 Pythonedjangonapratica Pessoal
38/127
Exceptions Exceptions so objetos responsveis por capturar e tratar erros comuns.
Python possui varias exceptions nativas.
No existe o conceito de checked exceptions.
recomendvel a criao de exceptions personalizadas.
fruit_list = ['orange', apple]
try:
fruit = fruit_list[2]exceptIndexError ase:
print'Indice invlido!'
Exception
KeyError
IndexError IndentationError
AttributeError
7/26/2019 Pythonedjangonapratica Pessoal
39/127
Orientao a Objetos Orientao a objetos um paradigma de programao.
Caractersticas e comportamentos. (Atributos e Classes)
Baixo acoplamento e alta coeso.
Abstrao
Encapsulamento
Herana
Polimorfismo
7/26/2019 Pythonedjangonapratica Pessoal
40/127
Abstrao Python possui classes abstratas a partir da verso 2.6. Possui herana mltipla.
No possui o mecanismo de interface.
Podemos ter o mesmo comportamento de uma interface utilizando
classes abstratas e herana mltipla.
7/26/2019 Pythonedjangonapratica Pessoal
41/127
AbstraoclassGemFigure(object):
def __init__(self, center):
self.center = center
defdraw(self):
raiseNotImplementError()
classRectangle(GemFigure):
def __init__(self, center, height, width):
super(GemFigure, self).__init__(center)
self.center = center
defdraw(self):
print 'rectangule drawn'
7/26/2019 Pythonedjangonapratica Pessoal
42/127
Encapsulamento Em python o encapsulamento por conveno.
Atributos ou mtodos com prefixo _ so CONSIDERADOS de uso
interno do objeto. (Indica possveis mudanas sem aviso prvio)
Atributos ou mtodos com prefixo __ tem seu nome alterado pela
classe com o objetivo de evitar acesso externo.
classPerson(object):name = ''
_age = 0__social_number = 0
Person.namePerson._age
Person._Person__social_number
7/26/2019 Pythonedjangonapratica Pessoal
43/127
EncapsulamentoclassPerson(object):
def__init__(self):
self._name = ''
def_get_name(self):returnself._name
def_set_name(self, name):
if notname:
raiseValueError('Vazio')
self._name = name
name = property(_get_name, _set_name)
p1 = Person()
p1.name = ''
ValueError: Vazio
7/26/2019 Pythonedjangonapratica Pessoal
44/127
Herana Python suporta herana mltipla. (Muito cuidado!).
Mecanismo sofisticado de precedncia de herana.
MRO - (Method Resolution Order).
classFather(object):
fhater = 'Eu sou o pai'
classMother(object):
mother = 'Eu sou a me'
classSon(Father, Mother):son = 'Eu sou o filho''
son = Son()print son.father
print son.mother
print son.son
7/26/2019 Pythonedjangonapratica Pessoal
45/127
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'
printname[0:6] # chama o mtodo __getslice__(0, 6)
>>> Python
fruit_list = ['orange', 'apple', lemon, 'strawberry']
printfruit_list[0:2] # chama o mtodo __getslice__(0, 2)
>>> ['orange', apple]
7/26/2019 Pythonedjangonapratica Pessoal
46/127
Outras caractersticas Atributos de classes X Atributos de instncias. Criao dinmica de atributos em classes e instncias.
Mixin em classes e instncias.
Programao funcional. (map, filter, reduce, zip, lambda)
List comprehension.
Generators e generator comprehension.
Sobrecarga de operadores (special methods).
@classmethod X @staticmethod.
7/26/2019 Pythonedjangonapratica Pessoal
47/127
Django Criado por Jacob Kaplan-Moss, Adrian Holovaty e Simon Willison em
2003.
CMS para auxiliar na criao de modulos administraveis do Lawrence
Journal-World.
Disponibilizado Opensource logo depois.
Framework Full Stack.
Web gil, plugvel, action based.
7/26/2019 Pythonedjangonapratica Pessoal
48/127
Componentes ORM- Mapeador Objeto Relacional.
Template System- Linguagem de Templates.
URL dispatcher- Roteador de URLs.
Admin- Interface Administrativa automatizada.
Internacionalizao.
Gerador e validador de formulrios.
Autenticao, perfil de acessos, etc...
7/26/2019 Pythonedjangonapratica Pessoal
49/127
MVC ou MTV MVC- Model View Controller.
MTV- Model Template View.
Model- Camada responsvel pela lgica de negocios, abstrao de
persistncia etc...
Template- Camada responsvel pela lgica de visualizao.
View- Camada responsvel pela interface entre Model e Template.
7/26/2019 Pythonedjangonapratica Pessoal
50/127
Ambiente (PIP) PIPUtilitrio de instalao de pacotes python. Baixa e instala pacotes do PyPI (Python Package Index).
Download - https://www.python.org/download.
Distribuies baseadas em Debian - sudo apt-get install python-pip.
pip freezeLista os pacotes python instalados.
pip install nome_do_pacoteInstala novos pacotes.
pip uninstallnome_do_pacoteDesistala o pacote.
sudo apt-get install python-pip
https://www.python.org/downloadhttps://www.python.org/downloadhttps://www.python.org/download7/26/2019 Pythonedjangonapratica Pessoal
51/127
Ambiente (Virtualenv) Poderiamos desenvolver utilizando o interpretador padro do python,
mas se tivessemos 2 sistemas sendo desenvolvidos simultaneamente
com verses do python diferentes?
virtualenvpacote python que tem a capacidade de criar e gerenciarambientes isolados.
pip install virtualenv
virtualenv --no-site-packages diretorio/nome_do_ambiente
sourcediretorio/nome_do_ambiente/bin/activate
(nome_do_ambiente)
7/26/2019 Pythonedjangonapratica Pessoal
52/127
Projeto Biblioteca pessoalCadastrar livros pessoais e controlar emprstimos. Cadastro de livros(titulo, descrio, 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 instalao foirealizada com sucesso.
7/26/2019 Pythonedjangonapratica Pessoal
53/127
Sucesso!
7/26/2019 Pythonedjangonapratica Pessoal
54/127
django-admin.py O modulo "django-admin.py" possui diversos comandos utilitrios paraauxliar o desenvolvedor.
django-admin.py help - Lista os comandos disponveis.
django-admin.py - Definio detalhada sobre o comando.
django-admin.py startproject nome_do_projeto
django-admin.py startapp nome_da_aplicacao
7/26/2019 Pythonedjangonapratica Pessoal
55/127
Criando o projeto Execute o comando django-admin.py startproject personal_library. O Django criar a seguinte estrutura:
personal_librarypersonal_library
__init__.pysettings.py
urls.pywsgi.pymanage.py
Pasta onde o projeto est guardado.Project (No deve ser renomeada).
Arquivo vazio (indica um package).Arquivo de configurao do projeto.
Definies de URLs do projeto.Protocolo parecido com fastCGI serve HTTP.Utilitrio parecido com o "django-admin.py".
7/26/2019 Pythonedjangonapratica Pessoal
56/127
Testando o projeto O Django possui um servidor web interno para ser usado no ambiente
de desenvolvimento.
NUNCA use o servidor interno em produo.
O servidor local possui recarga automtica de mdulos e por padro j
serve os arquivos estaticos. (javascripts, css, imagens, etc.).
O comando para executa-lo "pythonmanage.py runserver porta".
python manage.py runserver 8000.
7/26/2019 Pythonedjangonapratica Pessoal
57/127
Sucesso!
7/26/2019 Pythonedjangonapratica Pessoal
58/127
Testando no browser
7/26/2019 Pythonedjangonapratica Pessoal
59/127
manage.py O mdulo "manage.py" possui varios comandos utilitrios.
syncdb- Cria tabelas no banco de dados.
dumpdata --formatF[aplicao] - Extrai dados da aplicao 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 usurio root.
runserver endereco:porta - Inicia o servidor web de desenvolvimento.
startapp aplicacao- Cria a estrutura de uma nova aplicao no projeto.
7/26/2019 Pythonedjangonapratica Pessoal
60/127
Aplicaes O django um framework plugvel.
Um projeto uma composio de vrias aplicaes que PODEM ser
plugveis e podem ser instaladas em vrios projetos.
my_application__init__.py
views.pymodels.pytests.pyadmin.py
Nome da app.Arquivo vazio (indica um package).
Mdulo onde as views da app so criadas.Mdulo onde os models da app so criados.Mdulo onde os testes automatizados so criados.Mdulo onde a parte administrativa criada.
7/26/2019 Pythonedjangonapratica Pessoal
61/127
Criando a app library
7/26/2019 Pythonedjangonapratica Pessoal
62/127
Estrutura do projeto
7/26/2019 Pythonedjangonapratica Pessoal
63/127
Ciclo de vida (request)
7/26/2019 Pythonedjangonapratica Pessoal
64/127
Urls um mdulo python responsvel por realizar o roteamento de URLs do
projeto atravs do mapeamento das mesmas utilizando regex.
Todas as urls podem ficar em um unico arquivo urls.py, mas
recomendvel que cada aplicao contenha seu prprio arquivo urls.py
para mapear as urls expecificas da aplicao e deixa-la plugvel.
Posteriormente o arquivo urls.pyrefernte ao projeto deve importar os
mdulos urls.pyde cada aplicao instalada ao projeto.
url(regex, app.views.action, name=my.action)
7/26/2019 Pythonedjangonapratica Pessoal
65/127
Iniciando (urls.py)
7/26/2019 Pythonedjangonapratica Pessoal
66/127
Views um mdulo python que agrupa um conjunto de actions (views).
Toda viewdeve receber um objeto HTTPRequestcomo primeiro
parmetro e retornar um objeto HTTPResponsecomo resposta.
O objeto HTTPRequest fornecido automaticamente pelo django.
O objeto HTTPResponse de responsabilidade do desenvolvedor.
7/26/2019 Pythonedjangonapratica Pessoal
67/127
Iniciando (views.py)
7/26/2019 Pythonedjangonapratica Pessoal
68/127
Testando
7/26/2019 Pythonedjangonapratica Pessoal
69/127
Testando
7/26/2019 Pythonedjangonapratica Pessoal
70/127
Models um mdulo python responsvel por mapear as tabelas do banco de
dados em objetos e abstrair toda a complexidade de manipulao das
tabelas. (CRUD)
TIPOS DE CAMPOS MAIS USADOS
BooleanField EmailField TextField
CharField DecimalField SlugField
DateField IntegerField URLField
OPES DE CAMPOS MAIS USADAS
null db_column primary_key
blank db_index unique
choices default verbose_name
7/26/2019 Pythonedjangonapratica Pessoal
71/127
Iniciando (models.py)
7/26/2019 Pythonedjangonapratica Pessoal
72/127
Iniciando (settings.py) O settings.py um arquivo de configurao do projeto.
criado automaticamente.
J vem com varias definies inclusas e vrios comentrios
autoexplicativos sobre as mesmas.
Os parmetros de configurao do banco ficam no settings.py
7/26/2019 Pythonedjangonapratica Pessoal
73/127
Configurando o banco Atualmente o django suporta os seguintes bancos de dados:
SQLite
MySQL
PostGreSQL
Oracle
Usaremos o SQLite devido a facilidade de configurao, e por no
precisar de nenhum SGBD.
7/26/2019 Pythonedjangonapratica Pessoal
74/127
Configurando o banco
Altere o nome do arquivo para personal_library.db.
7/26/2019 Pythonedjangonapratica Pessoal
75/127
Instalando a app
Adicione a app library ao final da tupla e comente as 4 primeiras apps.
7/26/2019 Pythonedjangonapratica Pessoal
76/127
Validando os models
7/26/2019 Pythonedjangonapratica Pessoal
77/127
Exibindo o SQL da app
7/26/2019 Pythonedjangonapratica Pessoal
78/127
Criando as tabelas
7/26/2019 Pythonedjangonapratica Pessoal
79/127
Estrutura do projeto
7/26/2019 Pythonedjangonapratica Pessoal
80/127
Templates O django possui uma linguagem de templates poderosa.
possvel extender templates e sobreescrever trechos especificos de
cdigo com o mecnismo "extends".
possvel incluir paginas expecificas com o mecanismo "include".
As tags com (lgica) devem ficar entre as marcaes "{% %}".
Para imprimir o resultado de uma expresso os marcadores utilizados
so "{{ }}".
possvel criar template "filters"e "tags"personalizadas.
7/26/2019 Pythonedjangonapratica Pessoal
81/127
Templates O django possui por padro dois mecnismos de busca de templates.
filesystem.Loader- percorre somente o projeto buscando por HTMLs
que estejam dentro de um diretrio chamado templates.
app_directories.Loader- percorre somente as apps buscando por
HTMLs que estejam dentro de um diretrio templates.
7/26/2019 Pythonedjangonapratica Pessoal
82/127
Template padro Criando o template base.
Crie uma pasta chamada templatesdentro do pacote
personal_library.
Adicione a tupla TEMPLATE_DIRSno settings do projeto, ela adiciona
o seguinte diretrio na rvore de busca de templates do django.
7/26/2019 Pythonedjangonapratica Pessoal
83/127
Template padro
7/26/2019 Pythonedjangonapratica Pessoal
84/127
Template app library Criando o template da app library.
Crie um diretrio com as pastas templatese librarydentro da app.
O diretrio criado com esse padro para distinguir que o template
library.html referente a app library, pois pode existir um template
chamado library.htmlem outra app.
Essa tcnica evita que o o mecnismo de busca do django carregue
templates errados.
T l t lib
7/26/2019 Pythonedjangonapratica Pessoal
85/127
Template app library
7/26/2019 Pythonedjangonapratica Pessoal
86/127
Listando livros Realiza uma busca em todos os livros. (ORM)
Altera mtodo de retorno, para que o mesmo importe o template
library.htmle popule o contexto com a lista de livros retornados do
banco.
I i d ( h ll)
7/26/2019 Pythonedjangonapratica Pessoal
87/127
Inserindo (shell) Realiza um cadastro de livro no banco atravs da ferramenta shell do
django. (ORM)
7/26/2019 Pythonedjangonapratica Pessoal
88/127
Testando Execute o comando runserver.
7/26/2019 Pythonedjangonapratica Pessoal
89/127
Forms um mdulo python divido em duas funes principais:
1 - Validar a entrada de dados vindos do HTML.
2 - Gerar HTML automaticamente.
FieldsRealizam o mapeamento do formulrio recebido via POST
convertendo os valores recebidos para tipos nativos do python.
WidgetsGeram o HTML que o field exibir na pgina HTML.
Todo field possui um widget padro atrelado a ele, mas possvel altera-
lo.
7/26/2019 Pythonedjangonapratica Pessoal
90/127
Forms O django fornece duas classes geradoras de forms.
forms.FormClasse padro que define os fields e seus respectivos
widgets, que quando herdada serve para criar formulrios especficos.
forms.ModelFormClasse que usa o mecnismo de metaprogramaoe faz um introspeco no model definido em seu corpo para gerar os
fields dinamicamente em tempo de execuo.
A renderizao do formulrio no template pode ser feita com os seguintes
comandos no template:
form.as_p, form.as_li, ou form.as_table
7/26/2019 Pythonedjangonapratica Pessoal
91/127
FormsTIPOS DE CAMPOS MAIS USADOS
BooleanField DateField ImageField
CharField EmailField IntegerField
ChoiceField FileField MultipleChoiceFiel
d
TIPOS DE WIDGETS MAIS USADOS
TextInput FileInput CheckBoxInput
PasswordInput DateInput SelectMultiple
HiddenInput TextArea RadioSelect
I i i d (f )
7/26/2019 Pythonedjangonapratica Pessoal
92/127
Iniciando (forms.py)
R f t d (i d )
7/26/2019 Pythonedjangonapratica Pessoal
93/127
Refatorando (index)
Com o formulrio de cadastro e alterao implementado, necessriocriar uma instancia do mesmo e adiciona-la ao contexto para ser
retornado quando a view index chamada.
C d t li
7/26/2019 Pythonedjangonapratica Pessoal
94/127
Cadastro livros Aps alterar a view index para retornar o formulrio no contexto,
necessrio adiciona-lo ao template library.html para que o mesmo
seja renderizado.
C d t li
7/26/2019 Pythonedjangonapratica Pessoal
95/127
Cadastro livros Na action do form foi adiciona a templatetag url contendo o nome da
rota que far a ligao com a view responsvel por persistir os livros no
banco.
necessrio adicionar essa rota no arquivo urls.py.
C d t li
7/26/2019 Pythonedjangonapratica Pessoal
96/127
Cadastro livros Com a rota adicionada no urls.py necessrio criar a view save
que conter a lgica de persistncia de livros no banco.
T t d
7/26/2019 Pythonedjangonapratica Pessoal
97/127
Testando Execute o runserver da aplicao e cadastre um novo livro.
Faa teste de validao de campos obrigatrios.
Veja que a mensagem de validao exibida em ingls.
Para traduzi-la altere a varivel LANGUAGE_CODE para pt-br
no settings.py.
T t d
7/26/2019 Pythonedjangonapratica Pessoal
98/127
Testando
Fl d lt
7/26/2019 Pythonedjangonapratica Pessoal
99/127
Fluxo de alterao Para realizar a alterao de livros necessrio recuperar o objeto e
adiciona-lo ao formulrio.
Quando a listagem foi implementada a URL especifica para a alterao
j foi adicionada no link editar.
Agora necessrio mape-la no urls.py adicionando uma rota a ela.
Fl d lt
7/26/2019 Pythonedjangonapratica Pessoal
100/127
Fluxo de alterao Com a rota adicionada no urls.py necessrio criar a view edit
que conter a lgica de recuperao do objeto e adio do mesmo ao
contexto.
R f t d
7/26/2019 Pythonedjangonapratica Pessoal
101/127
Refatorando o save
T t d
7/26/2019 Pythonedjangonapratica Pessoal
102/127
Testando Execute o runserver da aplicao.
Cadastre um novo livro.
Faa a alterao do livro cadastrado anteriormente.
Fl o de remoo
7/26/2019 Pythonedjangonapratica Pessoal
103/127
Fluxo de remoo
Para realizar a remoo de livros necessrio recuperar o objeto eremove-lo atravs do mtodo delete(). (ORM)
Quando a listagem foi implementada a URL especifica para a remoo j
foi adicionada no link excluir.
Agora necessrio mape-la no urls.pyadicionando uma rota a ela.
Fluxo de remoo
7/26/2019 Pythonedjangonapratica Pessoal
104/127
Fluxo de remoo Com a rota adicionada no urls.py necessrio criar a view remove
que conter a lgica de remoo do objeto.
T t d
7/26/2019 Pythonedjangonapratica Pessoal
105/127
Testando Execute o runserver da aplicao.
Cadastre um novo livro.
Faa a remoo do livro cadastrado anteriormente.
E t t d li
7/26/2019 Pythonedjangonapratica Pessoal
106/127
Estrutura da aplicao
Dj Ad i
7/26/2019 Pythonedjangonapratica Pessoal
107/127
Django Admin um mecanismo do django que permite a gerao automtica de
interfaces administrativas.
flexvel, ou seja possvel customizar somente partes especificas.
customizavel, para cada model existe um conjunto de varias opes
para a modificao do layout e gerenciamento dos fluxos.
fortemente baseado em metaprogramao.
Dj Ad i
7/26/2019 Pythonedjangonapratica Pessoal
108/127
Django Admin Para ativa-lo necessrio habilitar as quatro primeiras linhas que
estavam comentadas no INSTALED_APPS.
Dj Ad i
7/26/2019 Pythonedjangonapratica Pessoal
109/127
Django Admin Outro passo necessrio habilitar as rotas do admin que estavam
comentadas no arquivo urls.py.
Django Admin
7/26/2019 Pythonedjangonapratica Pessoal
110/127
Django Admin
Aps realizar essas configuraes execute o comando: python manage.py syncdb, ele ira criar as tabelas necessrias e
sugerir a criao de um superuser que deve ser criado.
Autenticao
7/26/2019 Pythonedjangonapratica Pessoal
111/127
Autenticao
Aps esses passos execute o runserver da aplicao e acesse a url: localhost:8000/admin.
Autentique com o usurio criado no passo anterior.
Dashboard
7/26/2019 Pythonedjangonapratica Pessoal
112/127
Dashboard
Uma tela com uma listagem das aplicaes instaladas no projeto exibidano canto superior esquerdo.
No canto superior direito uma tela de listagem de suas operaes
exibida.
Cadastro de grupos
7/26/2019 Pythonedjangonapratica Pessoal
113/127
Cadastro de grupos
Permite o cadastro de grupos de acesso associados a aes de cada appinstalada.
Listagem de grupos
7/26/2019 Pythonedjangonapratica Pessoal
114/127
Listagem de grupos Lista os grupos de acesso cadastrados.
Cadastro de usurios
7/26/2019 Pythonedjangonapratica Pessoal
115/127
Cadastro de usurios Tela de cadastro de usurios divida em dois passos: 1- Dados de autenticao.
2- Dados pessoais.
Listagem de usurios
7/26/2019 Pythonedjangonapratica Pessoal
116/127
Listagem de usurios Lista os usurios cadastrados.
Possui filtros no canto superior direito.
Adicionando apps
7/26/2019 Pythonedjangonapratica Pessoal
117/127
Adicionando apps
Para permitir que uma app seja gerenciada pelo Django Adminnecessrio registra-la no arquivo admin.py que compe a app.
Podemos registra-la da maneira clssica atravs do comando:
admin.site.register(Library).
Ou da maneira customizada onde o comportamento padro do admin
alterado.
Adicionando apps
7/26/2019 Pythonedjangonapratica Pessoal
118/127
Adicionando apps Aps a configurao do admin.py execute o runserver da aplicao e
acesse o admin novamente.
A app libraryj esta no menu de aplicaes que so gerenciadas
pelo admin.
Customizao
7/26/2019 Pythonedjangonapratica Pessoal
119/127
Customizao O item de menu referente a app libraryapareceu em ingls, no
somente ele como tambm a tela de listagem de livros, outro problema
que na listagem no exibido o titulo do livro e sim uma
representao do objeto recuperado.
Para resolver esses problemas necessrio adicionar algumas meta-
informaes no model Librarye sobrescrever o mtodo__unicode__(self) do mesmo.
Customizao model
7/26/2019 Pythonedjangonapratica Pessoal
120/127
Customizao model
Customizao
7/26/2019 Pythonedjangonapratica Pessoal
121/127
Customizao Aps as alteraes no model execute o runserver da aplicao e
observe o resultado.
Customizao
7/26/2019 Pythonedjangonapratica Pessoal
122/127
Customizao
Listagem de livros.
Customizao
7/26/2019 Pythonedjangonapratica Pessoal
123/127
Customizao
Cadastro de livros.
Logout
7/26/2019 Pythonedjangonapratica Pessoal
124/127
Logout
Garimpando na web
7/26/2019 Pythonedjangonapratica Pessoal
125/127
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=PLfkVgm8720kzm6fmTekjtKyFcppyD4UbdCurso 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)
Referncias
http://ark4n.files.wordpress.com/2010/01/python_para_desenvolvedores_2ed.pdfhttp://ark4n.files.wordpress.com/2010/01/python_para_desenvolvedores_2ed.pdfhttp://osantana.me/pydjango/https://www.youtube.com/playlist?list=PLfkVgm8720kzm6fmTekjtKyFcppyD4Ubdhttps://www.youtube.com/playlist?list=PLfkVgm8720kzm6fmTekjtKyFcppyD4Ubdhttp://pycursos.com/biblioteca/http://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://pycursos.com/python-para-zumbis/http://pycursos.com/python-para-zumbis/http://pycursos.com/python-para-zumbis/http://pycursos.com/python-para-zumbis/http://pycursos.com/python-para-zumbis/http://pycursos.com/python-para-zumbis/http://pycursos.com/python-para-zumbis/http://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://www.globalcode.com.br/gratuitos/minicursos/minicurso-introducao-a-programacao-orientada-a-objetos-em-pythonhttp://pycursos.com/biblioteca/http://pycursos.com/biblioteca/https://www.youtube.com/playlist?list=PLfkVgm8720kzm6fmTekjtKyFcppyD4Ubdhttps://www.youtube.com/playlist?list=PLfkVgm8720kzm6fmTekjtKyFcppyD4Ubdhttps://www.youtube.com/playlist?list=PLfkVgm8720kzm6fmTekjtKyFcppyD4Ubdhttp://osantana.me/pydjango/http://osantana.me/pydjango/http://ark4n.files.wordpress.com/2010/01/python_para_desenvolvedores_2ed.pdfhttp://ark4n.files.wordpress.com/2010/01/python_para_desenvolvedores_2ed.pdfhttp://ark4n.files.wordpress.com/2010/01/python_para_desenvolvedores_2ed.pdf7/26/2019 Pythonedjangonapratica Pessoal
126/127
Referncias 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
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-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://www.python.org.br/wiki/ProgramacaoOrientadaObjetoPythonhttp://www.dcc.ufrj.br/~fabiom/mab225/pythonoo.pdfhttp://www.dcc.ufrj.br/~fabiom/mab225/pythonoo.pdfhttp://www.dcc.ufrj.br/~fabiom/mab225/pythonoo.pdfhttp://www.python.org.br/wiki/ProgramacaoOrientadaObjetoPythonhttp://www.python.org.br/wiki/ProgramacaoOrientadaObjetoPythonhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://pt.slideshare.net/ramalho/orientao-a-objetos-em-python-presentationhttp://osantana.me/pydjango/http://osantana.me/pydjango/https://docs.djangoproject.com/en/1.6/ref/https://docs.djangoproject.com/en/1.6/ref/https://docs.python.org/2/library/https://docs.python.org/2/library/7/26/2019 Pythonedjangonapratica Pessoal
127/127
Duvidas?