Skip to content

Estilo de codificação

elyezer edited this page Oct 2, 2011 · 2 revisions

Estilo de Codificação

Seguimos o estilo de codificação do Django Project. Você pode conferí-la em Coding style.

Abaixo segue a tradução de alguns padrões. Por favor siga esses padrões de codificação quando for escrever código para ser incluído no djangobrasil.org.

Estilo do código Python

  • Quando algo for omitido, siga a PEP 8 (tradução).
    Você pode usar o pep8 como ferramenta para verificar algum problema quanto a conformidade do seu código com o PEP 8. Lembre-se o PEP 8 é somente um guia, dessa forma, o estilo do código já escrito deve ser respeitado em primeiro lugar.
  • Sempre utilize espaços para a indentação.
  • Utilize underscores, em vez de camelCase, para os nomes de variáveis, funções e métodos. Exemplo: poll.get_unique_voters(), not poll.getUniqueVoters.
  • Utilize InitialCaps para os nomes de classes (ou para funções factory que retornam classes).

Nas docstrings, utilize “action words” como:

def foo():
    """
    Calcula alguma coisa e retorna o resultado.
    """
    pass

Abaixo um exemplo do que não deve ser feito:

def foo():
    """
    Calcular alguma coisa e retornar o resultado.
    """
    pass

Estilo dos templates

No código dos templates, utilize um (e somente um) espaço entre as chaves e o conteúdo da tag.

Correto:

{{ foo }}

Errado:

{{foo}}

Estilo das views

Quando for escrever um view, o primeiro parâmetro da função deve ser nomeado request.

Correto:

def my_view(request, foo):
    # ...

Errado:

def my_view(req, foo):
    # ...

Estilo dos models

Os nomes dos atributos devem ser todos em caixa baixa (lowercase), utilizando underscores ao invés de camelCase.

Correto:

class Pessoa(models.Model):
    primeiro_nome = models.CharField(max_length=20)
    ultimo_nome = models.CharField(max_length=40)

Errado:

class Pessoa(models.Model):
    PrimeiroNome = models.CharField(max_length=20)
    Ultimo_Nome = models.CharField(max_length=40)

A classe Meta deve ser declarada depois da declaração dos atributos, com uma linha em branco separando os atributos e a definição da classe.

Correto:

class Pessoa(models.Model):
    primeiro_nome = models.CharField(max_length=20)
    ultimo_nome = models.CharField(max_length=40)

    class Meta:
        verbose_name_plural = 'pessoas'

Errado:

class Pessoa(models.Model):
    primeiro_nome = models.CharField(max_length=20)
    ultimo_nome = models.CharField(max_length=40)
    class Meta:
        verbose_name_plural = 'pessoas'

Errado:

class Pessoa(models.Model):
    class Meta:
        verbose_name_plural = 'pessoas'

    primeiro_nome = models.CharField(max_length=20)
    ultimo_nome = models.CharField(max_length=40)

A ordem das classes internas e os métodos padrões deve ser como o seguinte (perceba que nem todos são obrigatórios):

  • Todos os campos do banco de dados
  • Atributos do custom manager
  • class Meta
  • def unicode()
  • def str()
  • def save()
  • def get_absolute_url()
  • Qualquer método personalizado

Se for definido algumas escolhas para um certo atributo do model, defina as escolhas como um tupla de tuplas, com o nome todo em caixa alta (uppercase). As escolhas devem ser definidas próximo ao início do módulo do model ou logo acima da classe do model. Exemplo:

GENDER_CHOICES = (
    ('M', 'Male'),
    ('F', 'Female'),
)