0
<ul><ul><li>Marinho Brandão - PyCon Brasil 2008, Rio de Janeiro </li></ul></ul>Criando aplicações plugáveis
<ul><ul><li>Andrews Medina sabe divertir a galera </li></ul></ul>
O que são aplicações plugáveis? <ul><ul><li>Cada formiguinha com sua tarefa </li></ul></ul>
Exemplos de aplicações <ul><ul><li>djapian </li></ul></ul><ul><li>  </li></ul><ul><ul><li>django-diario </li></ul></ul><ul...
Funcionalidades extensíveis <ul><ul><li>Settings da aplicação </li></ul></ul><ul><ul><ul><li>minha_app/app_settings.py </l...
Exemplo de view extensível <ul><li>class FormCidade(forms.ModelForm): </li></ul><ul><li>class Meta: </li></ul><ul><li>mode...
<ul><ul><li>Aplicação plugável não é adapter </li></ul></ul>
Templates da aplicação <ul><ul><li>É uma boa idéia ter templates da aplicação? </li></ul></ul><ul><li>  </li></ul><ul><ul>...
Classes de modelo <ul><ul><li>Contrib &quot;contenttypes&quot; </li></ul></ul><ul><ul><ul><li>ContentType.objects.get_for_...
Exemplo de generic foreign key <ul><li>from django.contrib.contenttypes.models import ContentType </li></ul><ul><li>from d...
<ul><ul><li>“ Generic Relations”... </li></ul></ul>
Boas práticas <ul><ul><li>Nomenclatura: inglês para distribuir, português para realidade nacional </li></ul></ul><ul><li> ...
Boas práticas <ul><ul><li>doc strings  </li></ul></ul><ul><ul><li>Usar aplicação “sites” </li></ul></ul><ul><ul><li>Intern...
<ul><ul><li>Coca-cola combina com tudo, e é um sucesso! </li></ul></ul>
Distribuindo aplicações <ul><ul><li>Repositório (Subversion, Git, Bazaar, Mercurial, etc) </li></ul></ul><ul><ul><li>distu...
Manter em mente ao criar aplicação <ul><ul><li>Fazer  uma  coisa e fazer  bem </li></ul></ul><ul><li>  </li></ul><ul><ul><...
Referências <ul><ul><li>Django - Writing Reusable Applications (James Bennet) </li></ul></ul><ul><ul><ul><li>http://media....
Conclusão <ul><ul><li>Vamos embora? </li></ul></ul><ul><ul><li>  </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul...
Upcoming SlideShare
Loading in...5
×

Django - Criando Aplicacoes Plugaveis

2,572

Published on

Slides da palestra sobre Django na PyCon Brasil 2008

Published in: Technology, Business
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total Views
2,572
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
137
Comments
1
Likes
4
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)
  • Transcript of "Django - Criando Aplicacoes Plugaveis"

    1. 1. <ul><ul><li>Marinho Brandão - PyCon Brasil 2008, Rio de Janeiro </li></ul></ul>Criando aplicações plugáveis
    2. 2. <ul><ul><li>Andrews Medina sabe divertir a galera </li></ul></ul>
    3. 3. O que são aplicações plugáveis? <ul><ul><li>Cada formiguinha com sua tarefa </li></ul></ul>
    4. 4. Exemplos de aplicações <ul><ul><li>djapian </li></ul></ul><ul><li>  </li></ul><ul><ul><li>django-diario </li></ul></ul><ul><li>  </li></ul><ul><ul><li>django-tagging </li></ul></ul><ul><li>  </li></ul><ul><ul><li>django-command-extensions </li></ul></ul><ul><li>  </li></ul><ul><ul><li>django-antivirus </li></ul></ul><ul><li>  </li></ul><ul><ul><li>django-registration </li></ul></ul>
    5. 5. Funcionalidades extensíveis <ul><ul><li>Settings da aplicação </li></ul></ul><ul><ul><ul><li>minha_app/app_settings.py </li></ul></ul></ul><ul><ul><ul><li>APP_SETTING = getattr(settings, 'APP_SETTING', None) </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>Signals da aplicação </li></ul></ul><ul><ul><ul><li>minha_app/app_signals.py </li></ul></ul></ul><ul><ul><ul><li>meu_signal = django.dispatch.Signal() </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>Views extensíveis </li></ul></ul>
    6. 6. Exemplo de view extensível <ul><li>class FormCidade(forms.ModelForm): </li></ul><ul><li>class Meta: </li></ul><ul><li>model = Cidade </li></ul><ul><li>def index(request, template_path='aplicacao/index.html', form_class=FormCidade): </li></ul><ul><li>form = form_class(request.GET) </li></ul><ul><li>return render_to_response(template_path, locals()) </li></ul><ul><li>url( </li></ul><ul><li>r'^$', </li></ul><ul><li>'aplicacao.views.index', </li></ul><ul><li>{'template_path': 'outro_index.html'}, </li></ul><ul><li>'ap_index', </li></ul><ul><li>) </li></ul>
    7. 7. <ul><ul><li>Aplicação plugável não é adapter </li></ul></ul>
    8. 8. Templates da aplicação <ul><ul><li>É uma boa idéia ter templates da aplicação? </li></ul></ul><ul><li>  </li></ul><ul><ul><li>settings.py: TEMPLATE_LOADERS </li></ul></ul><ul><ul><ul><li>django.template.loaders.app_directories.load_template_source </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>minha_app/templates/admin/minha_app </li></ul></ul><ul><li>  </li></ul><ul><ul><li>minha_app/templates/minha_app </li></ul></ul>
    9. 9. Classes de modelo <ul><ul><li>Contrib &quot;contenttypes&quot; </li></ul></ul><ul><ul><ul><li>ContentType.objects.get_for_model </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>Generic Relations </li></ul></ul><ul><li>  </li></ul><ul><ul><li>GenericInlineModelAdmin/ GenericInlineFormSet </li></ul></ul>
    10. 10. Exemplo de generic foreign key <ul><li>from django.contrib.contenttypes.models import ContentType </li></ul><ul><li>from django.contrib.contenttypes import generic </li></ul><ul><li>class ForumThread(models.Model): </li></ul><ul><li>title = models.CharField(max_length=50) </li></ul><ul><li>parent_ct = models.ForeignKey(ContentType) </li></ul><ul><li>parent_id = models.PositiveIntegerField() </li></ul><ul><li>parent = generic.GenericForeignKey('parent_ct', 'parent_id') </li></ul><ul><li>def exemplo(request): </li></ul><ul><li>produto = Produto.objects.get(id=1) </li></ul><ul><li>nova_thread = ForumThread.objects.create( </li></ul><ul><li>title='Thread sobre um produto', </li></ul><ul><li>parent_ct=ContentType.objects.get_for_model(Produto), </li></ul><ul><li>parent_id=produto.id </li></ul><ul><li>) </li></ul>
    11. 11. <ul><ul><li>“ Generic Relations”... </li></ul></ul>
    12. 12. Boas práticas <ul><ul><li>Nomenclatura: inglês para distribuir, português para realidade nacional </li></ul></ul><ul><li>  </li></ul><ul><ul><li>import models / from minha_app import ... </li></ul></ul><ul><li>  </li></ul><ul><ul><li>Pacote &quot;apps&quot; é um erro </li></ul></ul><ul><li>  </li></ul><ul><ul><li>Usar url() e reverse() </li></ul></ul><ul><ul><li>Versões do Python e Django / GAE </li></ul></ul>
    13. 13. Boas práticas <ul><ul><li>doc strings </li></ul></ul><ul><ul><li>Usar aplicação “sites” </li></ul></ul><ul><ul><li>Internacionalização </li></ul></ul><ul><ul><li>Testes </li></ul></ul><ul><ul><li>Todas as combinações possíveis </li></ul></ul>
    14. 14. <ul><ul><li>Coca-cola combina com tudo, e é um sucesso! </li></ul></ul>
    15. 15. Distribuindo aplicações <ul><ul><li>Repositório (Subversion, Git, Bazaar, Mercurial, etc) </li></ul></ul><ul><ul><li>distutils </li></ul></ul><ul><ul><li>PythonEggs </li></ul></ul><ul><ul><li>Licença (GPL, LGPL, BSD ou WTFPL?) </li></ul></ul>
    16. 16. Manter em mente ao criar aplicação <ul><ul><li>Fazer uma coisa e fazer bem </li></ul></ul><ul><li>  </li></ul><ul><ul><li>Não ter medo de múltiplas aplicações </li></ul></ul><ul><li>  </li></ul><ul><ul><li>Escrever flexível </li></ul></ul><ul><li>  </li></ul><ul><ul><li>Construir para distribuir </li></ul></ul><ul><li>  </li></ul><ul><li>James Bennett, DjangoCon 2008 </li></ul><ul><li>Bom senso em tudo </li></ul><ul><ul><li>Django ainda é um framework para pragmáticos </li></ul></ul>
    17. 17. Referências <ul><ul><li>Django - Writing Reusable Applications (James Bennet) </li></ul></ul><ul><ul><ul><li>http://media.b-list.org/presentations/2008/djangocon/reusable_apps.pdf  </li></ul></ul></ul><ul><ul><ul><li>http://vivixvideo.com/videos/djangocon-2008-reusable-apps/  </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>Reusable Django apps </li></ul></ul><ul><ul><ul><li>http://www.b-list.org/weblog/2007/mar/27/reusable-django-apps/ </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>Tutorial 1 - Phylosophy </li></ul></ul><ul><ul><ul><li>http://docs.djangoproject.com/en/dev/intro/tutorial01/#activating-models  </li></ul></ul></ul><ul><li>  </li></ul><ul><ul><li>DjangoPlugables.com </li></ul></ul><ul><ul><ul><li>http://djangoplugables.com/ </li></ul></ul></ul>
    18. 18. Conclusão <ul><ul><li>Vamos embora? </li></ul></ul><ul><ul><li>  </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul><ul><ul><li>http://marinhobrandao.com </li></ul></ul>
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×