Construindo Sistemas Com Django

4,663 views

Published on

Slides da palestra na PythonBrasil[5]

Published in: Technology
2 Comments
7 Likes
Statistics
Notes
No Downloads
Views
Total views
4,663
On SlideShare
0
From Embeds
0
Number of Embeds
66
Actions
Shares
0
Downloads
152
Comments
2
Likes
7
Embeds 0
No embeds

No notes for slide
  • Primeira vez numa PyCon Sem hábito de falar em público Não é fácil falar para uma platéia dessa Todo mundo cansado Não aguento mais dormir no colchonete (é isso ou dormir na cama de casal com o Semente)
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Djapian – Rafael Django-diario – Semente Cometi erros que não quero cometer mais Existem centenas no Google Code e DjangoPlugables Aplicação plugável possui características que permitem que ela seja facilmente conectada a outras Componentização levada ao extremo
  • Construindo Sistemas Com Django

    1. 1. Marinho Brandão - PythonBrasil [5], 2009, Caxias do Sul Construindo sistemas com Django
    2. 2. Do que vamos falar <ul><ul><li>Sistemas: corporativos ou não, ERP, CRM, administração um pouco melhor de sites brasileiros, etc.
    3. 3. Django é apropriado para construir sistemas...
    4. 4. … mas algumas coisas ainda não estão tão apropriadas assim (formatações, máscaras, alinhamento, etc.)
    5. 5. Usar ou não usar o Admin?
    6. 6. Facilidades disponíveis no django-plus </li></ul></ul>
    7. 7. Escolhendo entre usar Admin ou não <ul><ul><li>Admin = conjunto de RAD para funções existentes no Django
    8. 8. Porquê reinventar a roda?
    9. 9. Comportamentos do sistema aplicados a todo o sistema não devem ser feitas para cada classe ou tela, mas em um só lugar e de uma só vez
    10. 10. Optar por não usar o Admin também pode ser uma boa opção. E também não é complicado... </li></ul></ul>
    11. 11. Projeto base desta apresentação <ul><ul><li>Aplicações plugáveis utilizadas </li><ul><li>django-plus
    12. 12. django-pagination </li></ul><li>Aplicação 'sistema' </li><ul><li>Empresa
    13. 13. MultiEmpresa </li></ul><li>Aplicação 'caixa' </li><ul><li>TipoComposicao
    14. 14. LancamentoCaixa </li></ul></ul></ul><ul><ul><ul><li>LancamentoCaixaComposicao </li></ul></ul></ul><ul><ul><li>http://github.com/marinho/django-pyconbrasil-2009-sistemas/ </li></ul></ul>
    15. 15. Preparando o projeto <ul><ul><li>INSTALLED_APPS += ( </li></ul></ul><ul><ul><ul><li>'django.contrib.admin',
    16. 16. 'djangoplus', # django-plus
    17. 17. 'pagination', # django-pagination </li></ul></ul></ul><ul><ul><ul><li>) </li></ul><li>Criando symlink dos templates do Admin e o por quê de fazer isso </li><ul><li>templates/admin_original -> django/contrib/admin/templates/admin </li></ul><li>URL vazia apontada para admin.site.urls </li></ul></ul><ul><ul><ul><li>(r'', include(admin.site.urls)), </li></ul></ul></ul>
    18. 18. Customizando templates do Admin <ul><ul><li>Templates mais usados </li><ul><li>base.html base_site.html
    19. 19. change_form.html change_list.html
    20. 20. filter.html index.html
    21. 21. edit_inline/tabular.html </li></ul><li>Blocks mais comuns </li><ul><li>extrahead content
    22. 22. breadcrumbs change_list -> search </li></ul></ul></ul><ul><ul><ul><li>change_form -> object-tools change_form -> form_top
    23. 23. change_form -> after_field_sets
    24. 24. change_form -> after_related_objects </li></ul></ul></ul>
    25. 25. Customizando templates do Admin (2) <ul><ul><li>Template 'base_limpo.html'
    26. 26. Classe CSS 'module'
    27. 27. Fieldset + H2
    28. 28. Acrescentando scripts de JavaScript (jQuery)
    29. 29. Acrescentando folha de estilos
    30. 30. Customizando o breadcrumbs
    31. 31. Customizando o object-tools </li></ul></ul>
    32. 32. Customizando templates do Admin (2) <ul><ul><li>Template 'base_limpo.html'
    33. 33. Classe CSS 'module'
    34. 34. Fieldset + H2
    35. 35. Acrescentando scripts de JavaScript (jQuery)
    36. 36. Acrescentando folha de estilos
    37. 37. Customizando o breadcrumbs
    38. 38. Customizando o object-tools </li></ul></ul>
    39. 39. Customizando a listagem <ul><ul><li>Alterando o template 'filter.html' para apresentar filtros como combo boxes (ao invés de listas)
    40. 40. Apresentando um sumário independente dos resultados
    41. 41. Criando um filtro especial abaixo do form de busca </li><ul><li>quebrando o request.GET para tornar isso possível
    42. 42. Método queryset </li></ul></ul></ul>
    43. 43. Extendendo classes básicas do Admin <ul><ul><li>Crie sua própria ModelAdmin, extendendo a original
    44. 44. Faça o mesmo com </li><ul><li>TabularInline
    45. 45. StackedInline
    46. 46. AdminSite </li></ul><li>Usar sempre as classes extendidas para generalizar as customizações </li></ul></ul>
    47. 47. Formatações na listagem <ul><ul><li>Formatação de data e data/hora usando django.utils.translantion no urls.py do projeto
    48. 48. Formatação de valores decimais encapsulando campos desse tipo (fazendo isso de forma genérica) </li></ul></ul>
    49. 49. Formatações na edição <ul><ul><li>Campos com máscaras, usando jquery.maskeditinput.js </li><ul><li>media/js/mascara.js </li></ul><li>Usando o get_form e o get_formset para alterar campos de forma genérica do ModelAdmin e TabularInline
    50. 50. Campos de data </li><ul><li>Apenas modificar o input_formats não é o suficiente, é preciso criar seu próprio widget </li></ul><li>Campos de valor decimal </li><ul><li>Substituindo o campo por outro, que por sua vez usa um widget customizado </li></ul></ul></ul>
    51. 51. Formatações na edição (2) <ul><ul><li>Mostrando listagem sem inline
    52. 52. Forçando maiúsculas nos campos de texto </li></ul></ul><ul><ul><ul><li>Classe 'forca_caixa_alta' </li></ul></ul></ul><ul><ul><ul><li>media/js/widgets.js </li></ul><li>Desabilitando tecla ENTER </li><ul><li>media/js/base.js </li></ul><li>Campos de números inteiros </li></ul></ul><ul><ul><ul><li>utils.widgets.IntegerInput </li></ul></ul></ul>
    53. 53. Formatações na edição (3) <ul><ul><li>Informando valor inicial de um campo usando parâmetro na URL
    54. 54. Campos de chave estrangeira com AjaxFKWidget </li></ul></ul><ul><ul><ul><li>djangoplus.widgets.AjaxFKWidget
    55. 55. djangoplus.widgets.AjaxFKDriver
    56. 56. URLs usadas
    57. 57. Depende do django-pagination </li></ul></ul></ul><ul><ul><li>Campos somente-leitura </li></ul></ul><ul><ul><ul><li>utils.read_only.ReadOnlyTextWidget </li></ul></ul></ul>
    58. 58. Criando uma URL customizada <ul><ul><li>Usando método get_urls
    59. 59. Variável 'title'
    60. 60. Aplicando permissão com decorator permission_required </li></ul></ul>
    61. 61. O que esperar para o futuro? <ul><ul><li>Grande parte das customizações apresentar um dia serão suportadas oficialmente, à medida que o Django evoluir
    62. 62. Usar customizações com consciência para não criar problemas
    63. 63. Decidir com sabedoria entre criar customizações generalizadas ou específicas </li></ul></ul>
    64. 64. Conclusão Perguntas?   [email_address] http://www.marinhobrandao.com http://www.aprendendodjango.com

    ×