Pythonedjangonapratica Pessoal

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/download
  • 7/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.pdf
  • 7/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?