Desenvolvimento web com python e django

5.704 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
8 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
5.704
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1.036
Ações
Compartilhamentos
0
Downloads
200
Comentários
0
Gostaram
8
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Desenvolvimento web com python e django

  1. 1. Django Desenvolvimento web com Python e Igor Sobreira www.igorsobreira.com Globo.com
  2. 2. 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/
  3. 3. quem sou eu? Igor Sobreira Desenvolvedor web na Globo.com Trabalho com Python e Django a ~ 4.5 anos
  4. 4. Python Por que é uma boa opção para web?
  5. 5. 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
  6. 6. PEP 8 Preocupaçã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/
  7. 7. Por que usar um framework?
  8. 8. 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
  9. 9. começar do zero usar componentes separados e montar nosso framework usar um framework full-stack Temos algumas opções...
  10. 10. “...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
  11. 11. 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
  12. 12. Quero um framework completo web2py Plone sugestões... Django! TurboGears
  13. 13. Django
  14. 14. Criado em 2005 Lawrence, Kansas Lawrence Journal- World Licença BSD
  15. 15. DRY Don’t Repeat Yourself
  16. 16. Projeto == Várias aplicações south django-registration django-pagination django-debug-toolbar django-mailer django.contrib.admin django.contrib.comments django.contrib.sitemaps http://djangopackages.com/
  17. 17. Aplicações Coloque no path (PYTHONPATH) Coloque no INSTALLED_APPS no settings.py
  18. 18. Fácil de começar
  19. 19. $ pip install django $ django-admin.py startproject encurtador $ cd encurtador $ python manage.py runserver
  20. 20. Ótima documentação
  21. 21. Banco de Dados
  22. 22. ORM Mapeamento Objeto Relacional
  23. 23. 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
  24. 24. models.py
  25. 25. SQL do model anterior $ python manage.py syncdb
  26. 26. >>> palestra = Palestra.objects.get( ... palestrante__nome='Igor Sobreira') >>> Palestra.objects.all() [<Palestra: Desenvolvimento web com Django>] >>> palestra.titulo u'Desenvolvimento web com Django'
  27. 27. Herança múltipla Consultas lazy Facilmente extensível Tem como passar SQL manualmente Suporte a múltiplos bancos Suporte a bancos geográficos
  28. 28. Alterações nos dados e na modelagem Migrações Não existe suporte nativo Mas existem ótimas aplicações externas south
  29. 29. NoSQL Bancos de dados não relacionais
  30. 30. 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...
  31. 31. URLs e Views
  32. 32. 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
  33. 33. Urls aceitando vários formatos
  34. 34. View renderizando vários formatos
  35. 35. Admin Interface administrativa automática
  36. 36. admin.py
  37. 37. Linguagem pra criação de strings Templates
  38. 38. <!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>
  39. 39. Banco de dados geográficos PostgreSQL / PostGIS Mysql Oracle Spatialite Manipulação de mapas no Admin GeoDjango
  40. 40. Cache Evite processamento desnecessário
  41. 41. O que cachear?
  42. 42. O site inteiro Basta adicionar middlewares no settings.py
  43. 43. Views específicas
  44. 44. Fragmentos de template
  45. 45. Objetos específicos
  46. 46. Onde cachear?
  47. 47. Memcached (mais recomendado) Banco de dados Arquivos Memória local É possível criar backends customizados ex.: Redis
  48. 48. 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...
  49. 49. 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
  50. 50. Testes Mantenha a qualidade do seu código
  51. 51. 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”
  52. 52. 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
  53. 53. 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
  54. 54. 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
  55. 55. 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
  56. 56. Ambiente de desenvolvimento Isole seu projetos com ambientes virtuais
  57. 57. 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
  58. 58. [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
  59. 59. Deployment Como colocar tudo isso no ar?
  60. 60. Python + Web WSGIWeb Server Gateway Interface
  61. 61. PEP 333 http://www.python.org/dev/peps/pep-0333/
  62. 62. 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
  63. 63. 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/
  64. 64. PEP 444 http://www.python.org/dev/peps/pep-0444/
  65. 65. 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
  66. 66. 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
  67. 67. Servidores web
  68. 68. mod_python mod_fastcgi mod_wsgi Apache Nginx fastcgi uWsgi gunicorn Mais opções: cherokee, lighttpd, etc
  69. 69. Consumo de memória: Nginx X Apache
  70. 70. http://python.org.br http://djangobrasil.org #python-br #django-br http://groups.google.com/group/django-brasil http://groups.yahoo.com/group/python-brasil/ Comunidade
  71. 71. #cobrateam irc.freenode.net http://cobrateam.info/ https://github.com/cobrateam
  72. 72. Obrigado Dúvidas? www.igorsobreira.com igor@igorsobreira.com Globo.com

×