If you can't read please download the document
Upload
marinho-brandao
View
2.950
Download
0
Embed Size (px)
Citation preview
Django: criando aplicaes plugveis
Marinho Brando - PyCon Brasil 2008, Rio de Janeiro
Criando aplicaes plugveis
Primeira vez numa PyCon
Sem hbito de falar em pblico
No fcil falar para uma platia dessa
Todo mundo cansado
No aguento mais dormir no colchonete ( isso ou dormir na cama de casal com o Semente)
Andrews Medina sabe divertir a galera
Andrews sabe danar e cantar, eu no
O que so aplicaes plugveis?
Cada formiguinha com sua tarefa
Jos Mrio, mas sou Marinho
2+ anos com Django
O Django motiva a criao de aplicaes plugveis
Componentizao
Exemplos de aplicaes
djapian
django-diario
django-tagging
django-command-extensions
django-antivirus
django-registration
Djapian Rafael
Django-diario Semente
Cometi erros que no quero cometer mais
Existem centenas no Google Code e DjangoPlugables
Aplicao plugvel possui caractersticas que permitem que ela seja facilmente conectada a outras
Componentizao levada ao extremo
Funcionalidades extensveis
Settings da aplicao
minha_app/app_settings.py
APP_SETTING = getattr(settings, 'APP_SETTING', None)
Signals da aplicao
minha_app/app_signals.py
meu_signal = django.dispatch.Signal()
Views extensveis
app_settings.py
app_signals.py
Views extensveis podem receber um parmetro com valor default para definir uma classe de form, caminho de template ou coisas assim
Exemplo de view extensvel
class FormCidade(forms.ModelForm):
class Meta:
model = Cidade
def index(request, template_path='aplicacao/index.html', form_class=FormCidade):
form = form_class(request.GET)
return render_to_response(template_path, locals())
url(
r'^$',
'aplicacao.views.index',
{'template_path': 'outro_index.html'},
'ap_index',
)
app_settings.py
app_signals.py
Views extensveis podem receber um parmetro com valor default para definir uma classe de form, caminho de template ou coisas assim
Aplicao plugvel no adapter
Aplicao plugvel no adapter (dois trambolhos conectados atravs de um adaptador)
Evitar esse tipo de situao
A aplicao possui em sua pasta tudo que a pertence (commands, templates, templatetags, etc)
Templates da aplicao
uma boa idia ter templates da aplicao?
settings.py: TEMPLATE_LOADERS
django.template.loaders.app_directories.load_template_source
minha_app/templates/admin/minha_app
minha_app/templates/minha_app
Templates default podem gerar problemas com a estruturao de blocks e cache. Melhor ter os templates default mas permitir que o template seja informado como parmetro da view
Este template loader facilitou de vez a adoo da idia de que cada aplicao possui dentro de sua prpria pasta, tudo que lhe pertece
Index do admin ainda no extensvel
Classes de modelo
Contrib "contenttypes"
ContentType.objects.get_for_model
Generic Relations
GenericInlineModelAdmin/ GenericInlineFormSet
Evitar a definio de classe de modelo "na unha", melhor informar o caminho e carregar com get_model
Exemplo de generic foreign key
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
class ForumThread(models.Model):
title = models.CharField(max_length=50)
parent_ct = models.ForeignKey(ContentType)
parent_id = models.PositiveIntegerField()
parent = generic.GenericForeignKey('parent_ct', 'parent_id')
def exemplo(request):
produto = Produto.objects.get(id=1)
nova_thread = ForumThread.objects.create(
title='Thread sobre um produto',
parent_ct=ContentType.objects.get_for_model(Produto),
parent_id=produto.id
)
app_settings.py
app_signals.py
Views extensveis podem receber um parmetro com valor default para definir uma classe de form, caminho de template ou coisas assim
Generic Relations...
app_settings.py
app_signals.py
Views extensveis podem receber um parmetro com valor default para definir uma classe de form, caminho de template ou coisas assim
Boas prticas
Nomenclatura: ingls para distribuir, portugus para realidade nacional
import models / from minha_app import ...
Pacote "apps" um erro
Usar url() e reverse()
Verses do Python e Django / GAE
Nomenclatura
Evitar nomes que venham a conflitar com outras bibliotecas de Python
Adotar ingls sempre que possvel
Nome de modulo com template tags no deve ser o mesmoda aplicao
Pasta "apps" deve ser adotada somente para guardar as aplicaes, mas no para import-las, ela deve estar na PYTHONPATH
Boas prticas
doc strings
Usar aplicao sites
Internacionalizao
Testes
Todas as combinaes possveis
Nomenclatura
Evitar nomes que venham a conflitar com outras bibliotecas de Python
Adotar ingls sempre que possvel
Nome de modulo com template tags no deve ser o mesmoda aplicao
Pasta "apps" deve ser adotada somente para guardar as aplicaes, mas no para import-las, ela deve estar na PYTHONPATH
Coca-cola combina com tudo, e um sucesso!
Campanha publicitria da Coca-Cola sobre ela acompanhar sanduche, pizza, qualquer refeio, ao redor do mundo, etc
Moa bebendo coca-cola 2 hrs da manh, 16 graus (e me emprestou a blusa de frio)
Distribuindo aplicaes
Repositrio (Subversion, Git, Bazaar, Mercurial, etc)
distutils
PythonEggs
Licena (GPL, LGPL, BSD ou WTFPL?)
No demonstrar. No tenho experincia com formas de distribuio diferentes de repositrio
GPL mais amarrada, WTFPL totalmente liberada, LGPL e BSD so meio-termo
http://sam.zoy.org/wtfpl/
Manter em mente ao criar aplicao
Fazer uma coisa e fazer bem
No ter medo de mltiplas aplicaes
Escrever flexvel
Construir para distribuir
James Bennett, DjangoCon 2008
Bom senso em tudo
Django ainda um framework para pragmticos
No demonstrar. No tenho experincia com formas de distribuio diferentes de repositrio
GPL mais amarrada, WTFPL totalmente liberada, LGPL e BSD so meio-termo
http://sam.zoy.org/wtfpl/
Referncias
Django - Writing Reusable Applications (James Bennet)
http://media.b-list.org/presentations/2008/djangocon/reusable_apps.pdf
http://vivixvideo.com/videos/djangocon-2008-reusable-apps/
Reusable Django apps
http://www.b-list.org/weblog/2007/mar/27/reusable-django-apps/
Tutorial 1 - Phylosophy
http://docs.djangoproject.com/en/dev/intro/tutorial01/#activating-models
DjangoPlugables.com
http://djangoplugables.com/
James Bennet o cara, mas tambm no perfeito
Idias do "I want a pony"
Concluso
Vamos embora?
http://marinhobrandao.com