Sei sulla pagina 1di 17

Construindo sistemas com

Django
Marinho Brandão - PythonBrasil [5], 2009, Caxias do Sul
Do que vamos falar
Sistemas: corporativos ou não, ERP, CRM, administração um
pouco melhor de sites brasileiros, etc.

Django é apropriado para construir sistemas...

… mas algumas coisas ainda não estão tão apropriadas assim


(formatações, máscaras, alinhamento, etc.)

Usar ou não usar o Admin?

Facilidades disponíveis no django-plus


Escolhendo entre usar Admin ou não
Admin = conjunto de RAD para funções existentes no Django

Porquê reinventar a roda?

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

Optar por não usar o Admin também pode ser uma boa opção.
E também não é complicado...
Projeto base desta apresentação
Aplicações plugáveis utilizadas
django-plus
django-pagination

Aplicação 'sistema'
Empresa
MultiEmpresa

Aplicação 'caixa'
TipoComposicao
LancamentoCaixa
LancamentoCaixaComposicao

http://github.com/marinho/django-pyconbrasil-2009-sistemas/
Preparando o projeto
INSTALLED_APPS += (
'django.contrib.admin',
'djangoplus', # django-plus
'pagination', # django-pagination
)

Criando symlink dos templates do Admin e o por quê de fazer


isso
templates/admin_original → django/contrib/admin/templates/admin

URL vazia apontada para admin.site.urls


(r'', include(admin.site.urls)),
Customizando templates do Admin
Templates mais usados
base.html base_site.html
change_form.html change_list.html
filter.html index.html
edit_inline/tabular.html

Blocks mais comuns


extrahead content
breadcrumbs change_list → search
change_form → object-tools change_form → form_top
change_form → after_field_sets
change_form → after_related_objects
Customizando templates do Admin (2)
Template 'base_limpo.html'

Classe CSS 'module'

Fieldset + H2

Acrescentando scripts de JavaScript (jQuery)

Acrescentando folha de estilos

Customizando o breadcrumbs

Customizando o object-tools
Customizando templates do Admin (2)
Template 'base_limpo.html'

Classe CSS 'module'

Fieldset + H2

Acrescentando scripts de JavaScript (jQuery)

Acrescentando folha de estilos

Customizando o breadcrumbs

Customizando o object-tools
Customizando a listagem
Alterando o template 'filter.html' para apresentar filtros como
combo boxes (ao invés de listas)

Apresentando um sumário independente dos resultados

Criando um filtro especial abaixo do form de busca


quebrando o request.GET para tornar isso possível
Método queryset
Extendendo classes básicas do Admin
Crie sua própria ModelAdmin, extendendo a original

Faça o mesmo com


TabularInline
StackedInline
AdminSite

Usar sempre as classes extendidas para generalizar as


customizações
Formatações na listagem
Formatação de data e data/hora usando
django.utils.translantion no urls.py do projeto

Formatação de valores decimais encapsulando campos desse


tipo (fazendo isso de forma genérica)
Formatações na edição
Campos com máscaras, usando jquery.maskeditinput.js
media/js/mascara.js

Usando o get_form e o get_formset para alterar campos de


forma genérica do ModelAdmin e TabularInline

Campos de data
Apenas modificar o input_formats não é o suficiente, é
preciso criar seu próprio widget

Campos de valor decimal


Substituindo o campo por outro, que por sua vez usa um
widget customizado
Formatações na edição (2)
Mostrando listagem sem inline

Forçando maiúsculas nos campos de texto


Classe 'forca_caixa_alta'
media/js/widgets.js

Desabilitando tecla ENTER


media/js/base.js

Campos de números inteiros


utils.widgets.IntegerInput
Formatações na edição (3)
Informando valor inicial de um campo usando parâmetro na
URL

Campos de chave estrangeira com AjaxFKWidget


djangoplus.widgets.AjaxFKWidget
djangoplus.widgets.AjaxFKDriver
URLs usadas
Depende do django-pagination

Campos somente-leitura
utils.read_only.ReadOnlyTextWidget
Criando uma URL customizada
Usando método get_urls

Variável 'title'

Aplicando permissão com decorator permission_required


O que esperar para o futuro?
Grande parte das customizações apresentar um dia serão
suportadas oficialmente, à medida que o Django evoluir

Usar customizações com consciência para não criar problemas

Decidir com sabedoria entre criar customizações


generalizadas ou específicas
Conclusão

Perguntas?
 
marinho@gmail.com
http://www.marinhobrandao.com
http://www.aprendendodjango.com

Potrebbero piacerti anche