Académique Documents
Professionnel Documents
Culture Documents
Filipe Ximenes
Filipe Ximenes
Fundador da Vinta; Desenvolvedor Web; Apaixonado por aprender; F de comunidades de Sofware Livre; Curioso de empreendedorismo.
Boas prticas
de Django
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.
Boas prticas de
Django
Django
Django o framework web para perfeccionistas com prazos.
Virtualenv
pip install virtualenv virtualenv .venv source .venv/bin/activate
http://www.virtualenv.org/
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/
Settings
Como a muitos fazem:
my_project/ setting.py local_settings.py.example
Em produo
Nem sempre tudo pode ficar explicito, pelo menos grite quando houver algo errado settings/production.py
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')
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
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 ```
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.
Correto
Errado
User do Django
Facilidade; Compatibilidade:
AbstractUser
Adicione novos campos:
https://docs.djangoproject.com/en/dev/topics/auth/customizing/ #extending-django-s-default-user
AbstractBaseUser
Adicione e remova campos:
http://catherinetenajeros.blogspot.com.br/2013/03/django-15subclass-abstractbaseuser.html
models.py
class MyUser(...): ... from .signals import *
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(...)
Quando usar?
Enviar email uma ao secundria, no impacta no comportamento do model; Exigir que todo superuser seja staff impacta no comportamento do model.
7. Sobrescreva o ModelManager
Templates
home.html
<htlm> <head> <title>Home</title> ... <head> <header> ... </header> <div> ... </div> <footer> ... </footer> </html>
Templates
contato.html
<htlm> <head> <title>Contato</title> ... <head> <header> ... </header> <div> ... </div> <footer> ... </footer> </html>
Templates Blocks
base.html
<htlm> <head> <title> {% block title %}My Project{% endblock %} </title> ... <head> <header> ... </header> <div> {% block content %} {% endblock %} </div> <footer> ... </footer> </html>
Templates Blocks
home.html
{% extends 'base.html' %} {% block title %}Home{% endblock %} {% block content %} ... {% endblock %}
contato.html
{% extends 'base.html' %} {% block title %}Contato{% endblock %} {% block content %} ... {% endblock %}
Mixins
class MeuUser(...): ... is_deleted = models.BooleanField(default=False) ... def delete(self): self.is_deleted = True self.save() class OutroModel(...): ... is_deleted = models.BooleanField(default=False) ... def delete(self): self.is_deleted = True self.save()
Mixins
class SoftDeleteMixin(models.Model): class Meta: abstract = True is_deleted = models.BooleanField( \ default=False) def delete(self): self.is_deleted = True self.save()
Mixins
class MeuUser(SoftDeleteMixin): ... class OutroModel(SoftDeleteMixin): ...
9. Teste TUDO
https://github.com/jezdez/django-discover-runner
Model Mommy
# para instalar pip install model_mommy # No seu arquivo de testes kid = mommy.make('family.Kid')
https://github.com/vandersonmota/model_mommy
1. Mantenha seu ambiente de trabalho limpo e isolado de outros projetos; 2. Deixe claro o que configurao de desenvolvimento e o que configurao de produo; 3. Facilite a sua vida e a de quem est iniciando no projeto; 4. Sempre que puder, crie novos apps; 5. No ignore o User do Django.
6. Use signals [com cautela]; 7. Sobrescreva o ModelManager; 8. No repita-se (don't repeat yourself); 9. Teste TUDO.