Download - Django - criando aplicações plugáveis
Criando aplicaes plugveisMarinho Brando - PyCon Brasil 2008, Rio de Janeiro
O que so aplicaes plugveis?
Exemplos de aplicaes djapian django-diario django-tagging django-command-extensions django-antivirus django-registration
Funcionalidades extensveis Settings da aplicao minha_app/app_settings.py APP_SETTING = getattr(settings, 'APP_SETTING', None)
Signals da aplicaominha_app/app_signals.py meu_signal = django.dispatch.Signal()
Views extensveis
Exemplo de view extensvelclass 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', )
Templates da aplicao uma boa idia ter templates da aplicao? settings.py: TEMPLATE_LOADERSo
django.template.loaders.app_directories.load_template_source
minha_app/templates/admin/minha_app minha_app/templates/minha_app
Classes de modelo Contrib "contenttypes"o
ContentType.objects.get_for_model
Generic Relations GenericInlineModelAdmin/ GenericInlineFormSet
Exemplo de generic foreign keyfrom 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 )
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
Boas prticas doc strings Usar aplicao sites Internacionalizao Testes Todas as combinaes possveis
Distribuindo aplicaes Repositrio (Subversion, Git, Bazaar, Mercurial, etc) distutils PythonEggs Licena (GPL, LGPL, BSD ou 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 Django ainda um framework para pragmticos
Bom senso em tudo
Referncias Django - Writing Reusable Applications (James Bennet)o o
http://media.b-list.org/presentations/2008/djangocon/reusable_apps.pdf http://vivixvideo.com/videos/djangocon-2008-reusable-apps/
Reusable Django appso
http://www.b-list.org/weblog/2007/mar/27/reusable-django-apps/
Tutorial 1 - Phylosophyo
http://docs.djangoproject.com/en/dev/intro/tutorial01/#activating-models
DjangoPlugables.como
http://djangoplugables.com/
ConclusoVamos embora? [email protected] http://marinhobrandao.com