Django
AsuacápsuladesoluçõeswebemPython
4º Encontro Carioca de Testes - 14 de junho de 2016
Sobremim
Paula Grangeiro
28 anos
Bacharel em Sistemas de Informação
Duque de Caxias
Gateira
Python & Arquitetura de Softwa...
Ondemeencontrar...
PorquePython? Não seria maravilhoso
se eu pudesse programar
enquanto desenvolvo uma
aplicação?
● É Software Livre
● É multiplataforma
● É uma linguagem de alto nível
● É fortemente tipada
● É de fácil aprendizado
● Po...
4ªposição
Entre as linguagens mais utilizadas no mundo.
fonte: TIOBE, Junho/2016 (http://www.tiobe.com/tiobe_index)
Django
Não seria maravilhoso
se eu pudesse me
preocupar somente em
desenvolver o código do
meu negócio sem me
perder numa ...
Vantagens
StartandGo!
● É Software Livre
● É multiplataforma
● É de nem tão fácil aprendizado
● Possui uma extensa documen...
print(‘codetime’)
BatteriesIncluded
● ORM
● Multi DB
● Migrations
● Authorization
● Authentication
● Admin
● Sites
● Forms
● CSRF
● Dev Serv...
MVT
A arquitetura MVT do Django é similar ao
conceito de MVC, onde os Models com a
ajuda da ORM intermediam o acesso ao
ba...
Model
Seria um sonho se
existisse um framework
onde não fosse
necessário ter que
lidar com todos essas
tabelas e
relaciona...
ORM
patient = Patient.objects.get(id=1)
patient.name = ‘Sara Shiva’
patient.save()
● API única de acesso
independente do b...
Migrations
python manage.py makemigrations
python manage.py migrate
● Mantém a consistência entre os
modelos e tabelas do ...
print(‘codetime’)
View
A simplicidade do
framework é
inversamente relativa à
quantidade de bruxaria
necessária para
realizar um POST
Views
Responsável por receber uma
requisição(request) Web e
retornar uma resposta
(response)
from django.http import HttpR...
URLdispatcher
Necessário para ligar a
requisição ao responsável pela
resposta.
from django.conf.urls import url
from . imp...
print(‘codetime’)
ClassBasedViews
Views especializadas em
certos tipos de objects
request e response
from django.http import HttpResponse
fr...
print(‘codetime’)
Template Em apenas um dia e 72
linhas Deus programou o
mundo. Nos outros 6
criou o layout.
Templates
● HTML friendly
● São extensíveis
● Tags
● Filters
{% extends “admin/base.html” %}
{% block content %}
<ul>
{% f...
print(‘codetime’)
Obrigada!
- Email: contato@paulagrangeiro.com.br
- Site: www.paulagrangeiro.com.br
- GitHub: @pgrangeiro
- Twitter: www.tw...
Django - A sua cápsula de soluções web em python
Próximos SlideShares
Carregando em…5
×

Django - A sua cápsula de soluções web em python

104 visualizações

Publicada em

Slides da apresentação realizada no 4º Encontro Carioca de Testes

Publicada em: Tecnologia
2 comentários
0 gostaram
Estatísticas
Notas
  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
104
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
3
Comentários
2
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • Olá. Hoje vou falar um pouco sobre esse versátil web framework Python que é o Django. Quando a Samanta me convidou para palestrar nesse encontro de Testes fiquei em dúvida sobre o que falar pois não sou da área de qualidade (mas prometo que pratico na medida do meu alcance). Sou programadora Python e Django há quatro anos, num total de 9 anos na área de desenvolvimento, e o objetivo dessa apresentação é dar um breve overview sobre esse framework e deixá-los empolgados da mesma maneira que estou durante todo esse tempo quando o assunto é desenvolvimento web com Python. Então vamos começar.
  • Sobre mim: Meu nome é Paula Grangeiro e apesar da estatura eu tenho 28 anos (rs!). Na verdade eu coloquei a idade aqui pra passar maior credibilidade na minha apresentação (rs!). Sou Bacharel em Sistemas de Informação pela Fundação Educacional de Duque de Caxias. Sim, eu sou de Duque de Caxias. Sou gateira, meu hobby é realmente colecionar gatos. Os assuntos que me interessam na área de tecnologia são em geral sobre Python e Arquitetura de Software.
  • Quando falo sobre mim gosto muito de citar as comunidades das quais faço parte porque devo muito à elas pelo que sou hoje. Gostaria de dar uma atenção especial ao InsideOut que é aquele último logo no topo à esquerda. É um projeto que promove a diversidade na área tecnológica do qual eu e a Samanta fazemos parte. Esse slide tem os links de cada comunidade no logo, então quem quiser depois ter acesso e saber mais sobre, é só baixar essa apresentação e acessar estes links. Não sei se o pessoal do Meetup de Testes vai disponibilizar o conteúdo das apresentações, mas qualquer coisa é só entrar em contato comigo que eu envio. O último logo desse slide é da EloGroup, a empresa em que eu trabalho hoje utilizando Python e Django. Não é uma comunidade mas achei pertinente já que o nome desse slide é “Onde me encontrar”
  • Então, gostaria de iniciar essa apresentação primeiramente respondendo esta pergunta. Por que Python? Python é uma senhorita linguagem com 25 anos de estrada. Ela surgiu em 1991, portanto mais antiga que Java (1995). De lá para cá ela se estabeleceu em diversos campos da computação: existem consolidadas ferramentas escritas em Python no ramo da computação científica, tratamento de imagens, animação, etc. A partir dos anos 2000 ela começou a despontar como uma opção para desenvolvimento web depois do release da PEP 333 que descreve a interface de comunicação Python com web servers, o WSGI (https://www.python.org/dev/peps/pep-0333/)
  • Então hoje, quando eu inicio um projeto que tem como destino a web, quais são os principais motivos que me fazem optar por Python:
    Primeiramente, é Software Livre. A linguagem que é mantida pela organização sem fins lucrativos Python Software Foundation possui licença BSD compatível com a GPL.
    É multiplataforma. Você pode ter uma aplicação Python rodando em ambientes Windows, Mac ou Linux. Aliás, Python já vem pré instalado na maioria das distribuições Linux.
    É uma linguagem de alto nível. Você pode desenvolver seguindo o paradigma orientado à objeto, funcional ou procedural se assim preferir.
    É fortemente tipada. Apesar de não ser necessário declarar o tipo dos seus objetos, o Python faz isso automaticamente para você com algo que é conhecido como “ducking typing”. Resumindo, é uma linguagem fortemente tipada, porém dinâmica, já que a própria linguagem administra isso.
    É de fácil aprendizado. Python é sucessor derivado da linguagem ABC, que foi uma linguagem criada para facilitar o ensino de programação e a prototipagem de sistemas.
    Python possui uma extensa documentação. A própria documentação da linguagem é extremamente completa e, melhor de tudo, legível. Além disso, é praticamente infinita a quantidade de material à cerca de qualquer tema utilizando Python seja em Português ou, em maior número é claro (infinito ao quadrado), em inglês.
    E principalmente, Python tem a comunidade mais lynda do mundo. E graças à ela temos tantos materiais de estudo e suporte de qualidade disponível gratuitamente na internet. Além é claro de contribuir ativamente na própria manutenção e evolução da linguagem.
  • Se mesmo depois de todos esses motivos, você ainda tem alguma dúvida quanto a robustez dessa linguagem, deixo aqui uma estatística atualizada: Python já ocupa o quarto lugar de linguagem mais utilizada no mundo inteiro, segundo o índice TIOBE de junho. #PenseNisto
  • Já deu para perceber o quanto eu gosto de falar e evengelizar novas almas quando o assunto é Python, né? Vocês não estão entendendo, graças ao Python eu já estou há quatro anos limpa, sem usar .Net!
  • Django: É um web framework escrito em Python. Ele foi desenvolvido em 2003 pela equipe de programadores do jornal Lawrence Journal-World, que faz parte da mídia local do estado do Kansas. O principal conceito pregado pelo framework é “don’t repeat yourself” - DRY, que vamos falar mais sobre no próximo slide.
  • Quais são as vantagens de se utilizar o Django quando o assunto é desenvolvimento web com Python?
    Assim como o Python, ele é Software Livre, distribuído com licença BSD pela Django Software Foundation
    Por ser em Python, é multiplataforma.
    Digo que ele é de nem tão fácil aprendizado pois em comparação com a linguagem Python ele possui muitas nuâncias próprias. Você sabe o que esperar ao aprender uma linguagem nova, mas um framework, o céu é o limite. Mas se vale de conforto, durante os workshops do Django Girls que aplico pelo Brasil, meninas totalmente iniciantes no mundo da programação são capazes de deployar a sua primeira aplicação web no fim do workshop. Ou seja, não é molezinha mas também não é difícil.
    Ele também possui extensa documentação de qualidade na internet mantida pela comunidade mais lynda do mundo
    Os seus componentes são desenvolvidos seguindo os princípios do baixo acoplamento e alta coesão para garantir a reusabilidade de código pregada pelo DRY. Estes também são os princípios da programação orientada à objetos, então, sempre que alguém me pergunta como programar em Python orientado à objeto eu indico a leitura das classes do Django, que são ótimos exemplos do assunto.
    Além disso, as pessoas que desevolvem o Django estão preocupadas em manter a retrocompatibilidade com versões mais antigas do framework. A versão atual, que é a 1.9 possui compatibilidade com versões até a 1.7, ou seja, se o seu projeto utiliza o Django 1.7 pode migrar sem muito custo ou nenhum para a última versão disponível. Essa compatibilidade e mantida geralmente em casas de 3 versões, então é possível até mesmo você se programar para atualizações em doses homeopáticas caso o seu projeto ainda esteja na versão 1.3, que é de 2011 por exemplo.
    E principalmente, ele é de fácil instalação e configuração. E por isso coloquei aquele “Start and Go” ali do lado.
  • E não adianta falar se não for demonstrar. Então vamos lá!
    Demonstração:
    Instalação do Django
    Startproject
    Runserver
  • Por muitas vezes o Django é citado como um framework com baterias incluídas pois ele possui inúmeros componentes, distribuídos em apps, que podem ser “plugados” e “desplugados” de acordo com a sua necessidade. Nessa apresentação teremos alguns “Code Time” onde vou tentar demonstrar essas features em amarelo, como a do Dev Server que acabamos de ver na demostração anterior, que pra mim são os principais componentes do ecossistema praticamente infinito do Django. Além dessas core features, que fazem parte do ecossistema do Django e já vêem pré instaladas nele, existem outros inúmeros componentes que podem ser acoplados através de um simples pip install.
  • Os componentes do Django estão distribuindos de acordo com a sua responsabilidade dentro da arquitetura MVT do framework. MVT, que significa Model, View e Template é uma arquitetura similar ao MVC, onde um ou mais componentes de uma arquitetura do Django podem corresponder a uma camada equivalente na arquitetura MVC.
  • Então vamos a uma breve apresentação da camada de Model e dois de seus componentes que contribuem em muito na popularidade do Django
  • A ORM é o componente responsável por encapsular toda a lógica necessária para realizar transações com o Banco de Dados. Ela provê uma API única de acesso independente do banco de dados que esteja sendo utilizado no projeto. Além disso, ela permite uma abordagem orientada à objetos, limpa e flexível, aos itens armazenados. Chega de lidar com transações relacionais. A ORM do Django também é conhecida por suas transações ACID:
    Atomicity, Consistency, Isolation, Durability (atomicidade, consistência, isolação e durabilidade), que são as propriedades que asseguram a confiabilidade do processamento de transações.
  • O Django Migrations foi um componente incorporado ao core do Django na versão 1.8. Antes disso, você poderia optar por utilizar alguns componentes externos, como South, para obter o mesmo resultado. É interessante ressaltar que o Django possui essa cultura de absorver componentes externos amplamente utilizados pela comunidade. As Migrations são responsáveis por refletir as mudanças dos seus modelos da camada de aplicação no schema do banco de dados e ela faz isso através desses dois comandos: makemigrations e migrate.
  • Demonstração:
    Criar e registrar uma app
    Criar um model
    Migrate
    Shell
  • A camada de View do Django é responsável por administrar requisições http realizadas pelo usuário e realizar as transações necessárias para que o conteúdo seja despachado de volta de acordo com o esperado. Existe uma certa confusão com a camada e o componente que possuem o mesmo nome, mas o componente de Views é apenas um de muitos que fazem parte dessa camada.
  • As views são responsáveis por receber o objeto request, que representa a requisição web, e retornar um objeto response que será renderizado no browser do usuário. Nesse slide temos o exemplo de uma simples view responsável por exibir a data/hora atual no browser do usuário.
  • O componente de URL Dispatcher do Django, que é algo como “resolvedor de urls”, é o cara responsável por prover o mapeamento das URLs acessíveis no sistema às views responsáveis por suas respostas. Ele faz isso comparando a url de origem da requisição com os padrões disponíveis no arquivo url.py, utilizando expressões regulares para o match da informação. É um componente extremamente simples, mas que causa certa confusão para djangonautas de primeira viagem.
  • Demonstração:
    Criar uma view
    Atribuir uma URL à mesma
  • As Classes Based Views fazem parte do Django desde a sua versao 1.3. Desde entao tem-se incentivado o seu uso detrimento das function views para estimular o reuso de código. ão é encorajado o seu uso em detrimento às function views para estimular o reuso de código. Elas são nada mais do que classes especializadas em certos tipos de comportamentos para requests e response, quee devem para atender a necessidade do projeto São um componente de extrema utilidade quando pensa-se em desenvolvimento ágil, mas que é necesssário perder algumas horas de estudo para saber qual view se encaixa melhor na sua necessidade.
  • Vamos agora refatorar a nossa view usando uma view genérica do Django.

    Demonstração:
    Refatorar a view para ListView
  • A camada de Template é compreendida por diversos componentes responsáveis por renderizar a resposta enviada pela camada de View. Nessa talk dou enfâse na engine de templates do Django
  • O sistema de templates do Django é HTML friendly, ou seja, você escreve um template conforme escreveria um layout para um sistema web. A única diferença são estas tags especiais {% %} que delimitam blocos de código que serão renderizados pelo servidor. Esses blocos de códigos podem compreender estruturas de dados como if, for, etc, variáveis enviadas no contexto da resposta pela view e ainda tags e filters. Tags são estruturas, classes ou funções python especiais, que aplicam lógica no renderizamento do template. Filters são parecidos,
    Além disso, são extensíveis, ou seja, um template pode herdar de outro para reaproveitar seu código.
  • Demonstração:
    Criar um template que renderize os dados
    Demonstrar o gerenciamento de estáticos
  • Django - A sua cápsula de soluções web em python

    1. 1. Django AsuacápsuladesoluçõeswebemPython 4º Encontro Carioca de Testes - 14 de junho de 2016
    2. 2. Sobremim Paula Grangeiro 28 anos Bacharel em Sistemas de Informação Duque de Caxias Gateira Python & Arquitetura de Software yoroshiku!
    3. 3. Ondemeencontrar...
    4. 4. PorquePython? Não seria maravilhoso se eu pudesse programar enquanto desenvolvo uma aplicação?
    5. 5. ● É Software Livre ● É multiplataforma ● É uma linguagem de alto nível ● É fortemente tipada ● É de fácil aprendizado ● Possui uma extensa documentação ● Tem a comunidade mais lynda do mundo <3 Porque... print(‘É só amor <3’)
    6. 6. 4ªposição Entre as linguagens mais utilizadas no mundo. fonte: TIOBE, Junho/2016 (http://www.tiobe.com/tiobe_index)
    7. 7. Django Não seria maravilhoso se eu pudesse me preocupar somente em desenvolver o código do meu negócio sem me perder numa selva de comandos?
    8. 8. Vantagens StartandGo! ● É Software Livre ● É multiplataforma ● É de nem tão fácil aprendizado ● Possui uma extensa documentação ● Tem a comunidade mais lynda do mundo <3 ● Baixo acoplamento e alta coesão ● Retrocompatibilidade ● É de fácil instalação e configuração
    9. 9. print(‘codetime’)
    10. 10. BatteriesIncluded ● ORM ● Multi DB ● Migrations ● Authorization ● Authentication ● Admin ● Sites ● Forms ● CSRF ● Dev Server ● WSGI ● TestCases ● Caching ● Templates ● Estáticos ● Views ● URL Eporaívai...
    11. 11. MVT A arquitetura MVT do Django é similar ao conceito de MVC, onde os Models com a ajuda da ORM intermediam o acesso ao banco constituindo a camada de Model, os middlewares administram as requisições HTTP e enviam para um sistema de renderização de templates constituindo a camada de View e as Views com a ajuda do sistema que resolve as URLs constituem a camada equivalente a de Controller. Model View Template
    12. 12. Model Seria um sonho se existisse um framework onde não fosse necessário ter que lidar com todos essas tabelas e relacionamentos...
    13. 13. ORM patient = Patient.objects.get(id=1) patient.name = ‘Sara Shiva’ patient.save() ● API única de acesso independente do banco de dados do projeto ● Abordagem orientada à objetos ● Transações ACID
    14. 14. Migrations python manage.py makemigrations python manage.py migrate ● Mantém a consistência entre os modelos e tabelas do banco de dados
    15. 15. print(‘codetime’)
    16. 16. View A simplicidade do framework é inversamente relativa à quantidade de bruxaria necessária para realizar um POST
    17. 17. Views Responsável por receber uma requisição(request) Web e retornar uma resposta (response) from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
    18. 18. URLdispatcher Necessário para ligar a requisição ao responsável pela resposta. from django.conf.urls import url from . import views urlpatterns = [ url(r'^today/$', views.current_datetime), ]
    19. 19. print(‘codetime’)
    20. 20. ClassBasedViews Views especializadas em certos tipos de objects request e response from django.http import HttpResponse from django.views.generic import View import datetime class MyView(View): def get(self, request): now = datetime.datetime.now() html = "<html><body>It is now %s</body></html>" % now return HttpResponse(html)
    21. 21. print(‘codetime’)
    22. 22. Template Em apenas um dia e 72 linhas Deus programou o mundo. Nos outros 6 criou o layout.
    23. 23. Templates ● HTML friendly ● São extensíveis ● Tags ● Filters {% extends “admin/base.html” %} {% block content %} <ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} </ul> {% endblock %}
    24. 24. print(‘codetime’)
    25. 25. Obrigada! - Email: contato@paulagrangeiro.com.br - Site: www.paulagrangeiro.com.br - GitHub: @pgrangeiro - Twitter: www.twitter.com/paulagrangeiro - Facebook: www.facebook.com/paula.grangeiro

    ×