O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Construindo Sistemas Com Django

4.910 visualizações

Publicada em

Slides da palestra na PythonBrasil[5]

Publicada em: Tecnologia

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

×