boas práticas de django

Download Boas práticas de django

Post on 18-Dec-2014

1.559 views

Category:

Technology

8 download

Embed Size (px)

DESCRIPTION

Desenvolver um projeto não se trata apenas de escrever código funcional. Legibilidade, modularização, acoplamento, portabilidade, complexidade e documentação são todas métricas importantíssimas para se produzir código de qualidade. Respondendo perguntas como: Como organizar os arquivos no projeto? Quais bibliotecas podem ajudar a tormar sua aplicação mais robusta e melhorar seu código? Como organizar seu ambiente de desenvolvimento, staging e produção? O que são boas e más práticas de desenvolvimento? vamos debater como e quais ferramentas e padrões podem nos ajudar a desenvolver código de qualidade, sem que seja preciso muito esforço.

TRANSCRIPT

  • 1. Filipe Ximenes Boas prticas de Django
  • 2. Filipe Ximenes Fundador da Vinta; Desenvolvedor Web; Apaixonado por aprender; F de comunidades de Sofware Livre; Curioso de empreendedorismo.
  • 3. Boas prticas de Django
  • 4. Boas prticas Boas prticas de programao so um conjunto de regras informais que a comunidade de desenvolvimento de software tem aprendido ao longo do tempo para melhorar a qualidade das aplicaes e simplificar sua manuteno.
  • 5. Boas prticas deDjango
  • 6. Django Django o framework web para perfeccionistas com prazos.
  • 7. No mgica; No difcil; No requer mais do que conhecer Django.
  • 8. Requer vontade; Requer prtica; Os resultados so sensveis.
  • 9. 1. Mantenha seu ambiente de trabalho limpo e isolado de outros projetos
  • 10. Virtualenv pip install virtualenv virtualenv .venv source .venv/bin/activate http://www.virtualenv.org/
  • 11. Virtualenvwrapper pip install virtualenvwrapper export WORKON_HOME=~/.virtualenvs mkdir -p $WORKON_HOME echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.bash_profile mkvirtualenv my_project workon my_project deactivate http://virtualenvwrapper.readthedocs.org/
  • 12. 2. Deixe claro o que configurao de desenvolvimento e o que configurao de produo
  • 13. Settings my_project/ setting.py local_settings.py.example Como a muitos fazem: Assim ca mais claro: my_project/ settings/ base.py local.py production.py
  • 14. settings/local.py & settings/production.py from .base import *
  • 15. Guardar settings em varivel de ambiente? No deixa explicito as conguraes que esto sendo usadas; S o criador do projeto vai saber configurar os ambientes de desenvolvimento e produo; Novos desenvolvedores devem ser capazes de rodar o projeto pela primeira vez sem dificuldades.
  • 16. 3. Facilite a sua vida e a de quem est iniciando no projeto
  • 17. manage.py & wsgi.py os.environ.setdefault( "DJANGO_SETTINGS_MODULE", "my_project.settings.local" )
  • 18. Em produo export DJANGO_SETTINGS_MODULE= my_project.settings.production
  • 19. Nem sempre tudo pode ficar explicito, pelo menos grite quando houver algo errado def get_env_variable(var_name): try: return os.environ.get(var_name) except: error_msg = "Defina a varivel de ambiente %s" % var_name raise ImproperlyConfigured(error_msg) VARIAVEL = get_env_variable('VARIAVEL') settings/production.py
  • 20. Makefile clean: find . -name "*.pyc" -delete deps: pip install -r requirements/local.txt setup: clean deps rm -rf my_db_name.db python manage.py syncdb --noinput python manage.py migrate python manage.py createsuperuser --email "test@myproject.com" run: python manage.py runserver
  • 21. README.md #Meu Projeto Este um projeto exemplo para falar sobre boas prticas de Django ##Instalao Para rodar o projeto localmente voc precisa apenas executar o comando: ``` make setup ```
  • 22. 4. Sempre que puder, crie novos apps
  • 23. Apps No fcil separar de separar depois que esto em produo juntos; Quando grandes so complicados de manter; Tente isolar o mximo possvel, e reduzir dependncias.
  • 24. Onde colocar cdigo que no pertence a nenhum app especfico? Crie um app 'core' na sua aplicao para comportar esta situao.
  • 25. Correto
  • 26. Errado
  • 27. 5. No ignore o User do Django
  • 28. User do Django Facilidade; Compatibilidade: Com o Django; Com apps de terceiros.
  • 29. AbstractUser AbstractBaseUser Adicione novos campos: Adicione e remova campos: https://docs.djangoproject.com/en/dev/topics/auth/customizing/ #extending-django-s-default-user http://catherinetenajeros.blogspot.com.br/2013/03/django-15- subclass-abstractbaseuser.html
  • 30. 6. Use signals [com cautela]
  • 31. models.py class MyUser(...): ... from .signals import *
  • 32. signals.py from django.db.models.signals import pre_save from django.dispatch import receiver from django.core.mail import send_mail from .models import MyUser @receiver(pre_save, sender=MyUser) def send_email(sender, instance, **kwargs): if not instance.pk: send_mail(...)
  • 33. Todo superuser staff class MyUser(...): ... is_staff = models.BooleanField() is_supperuser = models.BooleanField() ... def save(self, *args, **kwargs): if self.is_supperuser: self.is_staff = True super(MyUser, self).save(*args, **kwargs)
  • 34. Quando usar? Enviar email uma ao secundria, no impacta no comportamento do model; Exigir que todo superuser seja staff impacta no comportamento do model.
  • 35. 7. Sobrescreva o ModelManager
  • 36. onde devem ficar as suas queries from django.db import models class ManagerUtil(models.Manager): def get_or_none(self, **kwargs): try: return self.get(**kwargs) except ObjectDoesNotExist: return None managers.py
  • 37.