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.
4. Boas práticas
Boas práticas de programação são um
conjunto de regras informais que a
comunidade de desenvolvimento de
software tem aprendido ao longo do tempo
para melhorar a qualidade das aplicações e
simplificar sua manutenção.
15. Guardar settings em variável
de ambiente?
• Não deixa explicito as configurações que
estão sendo usadas;
• Só o criador do projeto vai saber configurar os
ambientes de desenvolvimento e produção;
• 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
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 variável de ambiente %s"
% var_name
raise ImproperlyConfigured(error_msg)
VARIAVEL = get_env_variable('VARIAVEL')
settings/production.py
21. README.md
#Meu Projeto
Este é um projeto exemplo para falar sobre
boas práticas de Django
##Instalação
Para rodar o projeto localmente você
precisa apenas executar o comando:
```
make setup
```
23. Apps
• Não é fácil separar de separar depois
que estão em produção juntos;
• Quando grandes são complicados de
manter;
• Tente isolar o máximo possível, e reduzir
dependências.
24. Onde colocar código que não
pertence a nenhum app
específico?
• Crie um app 'core' na sua aplicação para
comportar esta situação.
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 ação secundária,
não impacta no comportamento do
model;
• Exigir que todo superuser seja staff
impacta no comportamento do model.
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
46. Um arquivo de teste para
cada arquivo do app
app/
tests/
test_models.py
test_managers.py
test_views.py
https://github.com/jezdez/django-discover-runner
47. Model Mommy
# para instalar
pip install model_mommy
# No seu arquivo de testes
kid = mommy.make('family.Kid')
https://github.com/vandersonmota/model_mommy
48. 1. Mantenha seu ambiente de trabalho limpo e isolado
de outros projetos;
2. Deixe claro o que é configuração de desenvolvimento
e o que é configuração de produção;
3. Facilite a sua vida e a de quem está iniciando no
projeto;
4. Sempre que puder, crie novos apps;
5. Não ignore o User do Django.
49. 6. Use signals [com cautela];
7. Sobrescreva o ModelManager;
8. Não repita-se (don't repeat yourself);
9. Teste TUDO.