desenvolvimento web com python e django

80
Django Desenvolvimento web com Python e Igor Sobreira www.igorsobreira.com Globo.com

Upload: igor-sobreira

Post on 26-May-2015

4.879 views

Category:

Technology


8 download

TRANSCRIPT

Page 1: Desenvolvimento web com python e django

DjangoDesenvolvimento web com Python e

Igor Sobreirawww.igorsobreira.com

Globo.com

Page 2: Desenvolvimento web com python e django

Licença

Essa apresentação está som a licença Creative Commons

Você pode copiar, distribuir e modificar...

...com a condição de citar a original nos créditos

http://creativecommons.org/licenses/by/2.0/br/

Page 3: Desenvolvimento web com python e django

quem sou eu?

Igor Sobreira

Desenvolvedor web na Globo.com

Trabalho com Python e Django a ~ 4.5 anos

Page 4: Desenvolvimento web com python e django

PythonPor que é uma boa opção para web?

Page 5: Desenvolvimento web com python e django
Page 6: Desenvolvimento web com python e django

fácil de aprender

comunidade ativa

ótima documentação

sintaxe simples e clara

multiplataforma

múltiplos paradigmas

bibliotecas para tudo... tudo!

tipagem dinâmica e forte

várias implementações

metaprogramação

Page 7: Desenvolvimento web com python e django

PEP 8Preocupação com legibilidade de código

Padrão de identação: 4 espaços

Nomenclatura de variáveis

Uso de docstrings

http://www.python.org/dev/peps/pep-0008/

Page 8: Desenvolvimento web com python e django

Por que usar um framework?

Page 9: Desenvolvimento web com python e django

O que precisamos?

roteador de urls

HTML, JSON, XML

formulários

persistência de dados

segurança ( SQL injection, CSRF, XSS )

cookies/sessão e autenticação de usuários

frameworks de teste

Page 10: Desenvolvimento web com python e django

começar do zero

usar componentes separados e montar nosso framework

usar um framework full-stack

Temos algumas opções...

Page 11: Desenvolvimento web com python e django

“...you start by not trying to build a framework, but by building an application...

As you develop further applications each one further refines the framework area of the code”

http://martinfowler.com/bliki/HarvestedFramework.html

Martin Fowler

Page 12: Desenvolvimento web com python e django

Quero montar o meu framework

Pylons

CherryPy

Werkzeug

SQLAlchemy

MongoEngine Jinja2

sugestões...

Existe muita coisa no ecossistema... você vai encontrar o que precisa

Tornado

Storm

Flask

Page 13: Desenvolvimento web com python e django

Quero um framework completo

web2py Plone

sugestões...

Django!

TurboGears

Page 14: Desenvolvimento web com python e django

Django

Page 15: Desenvolvimento web com python e django

Criado em 2005

Lawrence, Kansas

Lawrence Journal-

World

Licença BSD

Page 16: Desenvolvimento web com python e django

DRYDon’t Repeat Yourself

Page 17: Desenvolvimento web com python e django

Projeto == Várias aplicações

south

django-registration django-pagination

django-debug-toolbardjango-mailer

django.contrib.admindjango.contrib.comments

django.contrib.sitemaps

http://djangopackages.com/

Page 18: Desenvolvimento web com python e django

AplicaçõesColoque no path (PYTHONPATH)

Coloque no INSTALLED_APPS no settings.py

Page 19: Desenvolvimento web com python e django

Fácil de começar

Page 20: Desenvolvimento web com python e django

$ pip install django$ django-admin.py startproject encurtador$ cd encurtador$ python manage.py runserver

Page 21: Desenvolvimento web com python e django
Page 22: Desenvolvimento web com python e django

Ótima documentação

Page 23: Desenvolvimento web com python e django
Page 24: Desenvolvimento web com python e django

Banco de Dados

Page 25: Desenvolvimento web com python e django

ORMMapeamento Objeto Relacional

Page 26: Desenvolvimento web com python e django

Padrão Active Record

Classe Tabela

Cria tabelas a partir das classes Python

python manage.py syncdb

Consegue criar classes a partir de bancos legados

python manage.py inspectdb

Page 27: Desenvolvimento web com python e django

models.py

Page 28: Desenvolvimento web com python e django

SQL do model anterior

$ python manage.py syncdb

Page 29: Desenvolvimento web com python e django

>>> palestra = Palestra.objects.get(... palestrante__nome='Igor Sobreira')

>>> Palestra.objects.all()[<Palestra: Desenvolvimento web com Django>]

>>> palestra.titulou'Desenvolvimento web com Django'

Page 30: Desenvolvimento web com python e django

Herança múltipla

Consultas lazy

Facilmente extensível

Tem como passar SQL manualmente

Suporte a múltiplos bancos

Suporte a bancos geográficos

Page 31: Desenvolvimento web com python e django

Alterações nos dados e na modelagem

Migrações

Não existe suporte nativo

Mas existem ótimas aplicações externas

south

Page 32: Desenvolvimento web com python e django

NoSQLBancos de dados não relacionais

Page 33: Desenvolvimento web com python e django

Ainda não existe suporte nativo

Já foi iniciado no GSoC desse ano um backend para MongoDB

Existem ótimas aplicações externas

MongoEngine

No Google App Engine usa-se o BigTable

Porém... muitos módulos ainda dependem do ORM

Admin, ModelAdmin...

Page 34: Desenvolvimento web com python e django

URLs e Views

Page 35: Desenvolvimento web com python e django

Requisição “^programação/$”

urls.py

def programacao(request): horarios = Horario.objects.all() return render_to_response(

‘programacao.html’, {‘horarios’: horarios})

views.py

models.py

Resposta

Page 36: Desenvolvimento web com python e django

Urls aceitando vários formatos

Page 37: Desenvolvimento web com python e django

View renderizando vários formatos

Page 38: Desenvolvimento web com python e django

AdminInterface administrativa automática

Page 39: Desenvolvimento web com python e django

admin.py

Page 40: Desenvolvimento web com python e django
Page 41: Desenvolvimento web com python e django
Page 42: Desenvolvimento web com python e django

Linguagem pra criação de strings

Templates

Page 43: Desenvolvimento web com python e django

<!doctype html><html><head> <title> {% block title %}Palestrantes{% endblock %} </title></head><body> <h1> Palestrantes </h1> <ul> {% for palestrante in lista_palestrantes %} <li> {{ palestrante.nome }} </li> {% endfor %} </ul></body></html>

Page 44: Desenvolvimento web com python e django

Banco de dados geográficos

PostgreSQL / PostGIS

Mysql

Oracle

Spatialite

Manipulação de mapas no Admin

GeoDjango

Page 45: Desenvolvimento web com python e django
Page 46: Desenvolvimento web com python e django
Page 47: Desenvolvimento web com python e django
Page 48: Desenvolvimento web com python e django

CacheEvite processamento desnecessário

Page 49: Desenvolvimento web com python e django

O que cachear?

Page 50: Desenvolvimento web com python e django

O site inteiro

Basta adicionar middlewares no settings.py

Page 51: Desenvolvimento web com python e django

Views específicas

Page 52: Desenvolvimento web com python e django

Fragmentos de template

Page 53: Desenvolvimento web com python e django

Objetos específicos

Page 54: Desenvolvimento web com python e django

Onde cachear?

Page 55: Desenvolvimento web com python e django

Memcached (mais recomendado)

Banco de dados

Arquivos

Memória local

É possível criar backends customizados

ex.: Redis

Page 56: Desenvolvimento web com python e django

Formulários

Validação

Internacionalização (i18n) e localização (l10n)

Serialização de objetos (json, xml e yaml)

Envio de e-mails

Autenticação

Upload de arquivos

Muito mais...

Page 57: Desenvolvimento web com python e django

Jython, implementação de Python em Java

Rode django no seu container web favorito

Glassfish, Tomcat, JBoss

Use qualquer biblioteca no ecossistema Java

Django roda na JVM

Page 58: Desenvolvimento web com python e django

TestesMantenha a qualidade do seu código

Page 59: Desenvolvimento web com python e django

TDD - Test Driven Development

Faça os testes antes da funcionalidade

Ajuda a escrever menos código

Ajuda a deixar o código mais modular

Garante que o que foi feito funciona

“Código não testado é código bugado”

Page 60: Desenvolvimento web com python e django

Testes são muito importantes

Django tem um bom suporte

test runner embutido

test client: uma maneira rápida de fazer requisições HTTP

testes de envio de emails

cria/remove banco de teste

fixtures

Page 61: Desenvolvimento web com python e django

Teste tudo!

Não sabe o que testar? Teste tudo!

Na dúvida se vale a pena testar? Teste tudo!

Não sabe como testar?

leia a documentação

leia código de projetos bem testados

Page 62: Desenvolvimento web com python e django

Testes isolados

Não acessam banco de dados nem rede

Não chamam métodos externos

Usam mocks e stubs

Faça testes unitários

Use com moderação

Page 63: Desenvolvimento web com python e django

Em linguagem natural

Pyccuracy (http://pyccuracy.org)

Lettuce (http://lettuce.it/)

Ou em código python

Selenium

Splinter (http://github.com/cobrateam/splinter/)

Faça testes com browser

Page 64: Desenvolvimento web com python e django

Ambiente de desenvolvimentoIsole seu projetos com ambientes virtuais

Page 65: Desenvolvimento web com python e django

virtualenv

Ambiente python isolado

Cada projeto usa versões diferentes de pacotes python

coloque cada um deles em um virtualenv

Use pip para instalar pacotes

virtualenvwrapper

comandos úteis para gerenciar virtualenvs

Page 66: Desenvolvimento web com python e django

[igor.sobreira@globo-mac:envs]$ virtualenv projeto_env --no-site-packages

New python executable in projeto_env/bin/python

Installing setuptools............done.

[igor.sobreira@globo-mac:envs]$ cd projeto_env/

[igor.sobreira@globo-mac:projeto_env]$ source bin/activate

(projeto_env)[igor.sobreira@globo-mac:projeto_env]$ ls

bin include lib

Page 67: Desenvolvimento web com python e django

DeploymentComo colocar tudo isso no ar?

Page 68: Desenvolvimento web com python e django

Python + Web

WSGIWeb Server Gateway Interface

Page 69: Desenvolvimento web com python e django

PEP 333

http://www.python.org/dev/peps/pep-0333/

Page 70: Desenvolvimento web com python e django

def simple_app(environ, start_response): status = '200 OK' response_headers = [

('Content-type', 'text/plain')]

start_response(status, response_headers) return ['Hello world!\n']

variáveis de ambiente

inicia a resposta informando status e headers

retorna um iterável

Page 71: Desenvolvimento web com python e django

PEP 3333

Versão atualizada da PEP 333

Melhorias para suportar Python 3.x

Questões de strings e unicode que mudaram no Python 3

Compatível com a PEP 333 (Python 2.x)

http://www.python.org/dev/peps/pep-3333/

Page 72: Desenvolvimento web com python e django

PEP 444

http://www.python.org/dev/peps/pep-0444/

Page 73: Desenvolvimento web com python e django

def simple_app(environ): status = b'200 OK' response_headers = [

(b'Content-type', b'text/plain') ] body = [b'Hello world!\n']

return body, status, headers

variáveis de ambiente

retorna o corpo, status e cabeçalhos

Page 74: Desenvolvimento web com python e django

Ainda não está definido o futuro do WSGI

Mas a tendência é a PEP 3333

E num futuro um pouco mais distante o Web3

Acompanhe as discussões

http://mail.python.org/mailman/listinfo/web-sig

Page 75: Desenvolvimento web com python e django

Servidores web

Page 76: Desenvolvimento web com python e django

mod_python

mod_fastcgi

mod_wsgi

Apache Nginx

fastcgi

uWsgi

gunicorn

Mais opções: cherokee, lighttpd, etc

Page 77: Desenvolvimento web com python e django

Consumo de memória: Nginx X Apache

Page 79: Desenvolvimento web com python e django

#cobrateamirc.freenode.net

http://cobrateam.info/

https://github.com/cobrateam