class ApplicationsList(ListView):
model = Application
template_name = "applications.html"
São três linhas. Minha ergonomia para desenvolvedores e minha vida ficaram muito mais fáceis.
Você pode pensar em modos de exibição baseados em classe como modelos que cobrem a maioria das funcionalidades que qualquer aplicativo precisa. Existem modos de exibição para exibir listas de itens, para exibir itens em detalhes e edição de vistas para executar operações CRUD (Criar, Ler, Atualizar, Excluir).
Como a implementação de uma dessas visualizações genéricas requer apenas algumas linhas de código, a lógica da minha aplicação se tornou dramaticamente sucinta. Isso me deu menos código repetido, menos lugares para que algo desse errado e um aplicativo mais gerenciável em geral.
As visualizações baseadas em classe são rápidas de implementar e usar. As visualizações genéricas baseadas em classe incorporadas podem exigir menos trabalho para serem testadas, pois você não precisa escrever testes para a exibição base que o Django fornece. (O Django faz seus próprios testes para isso; não é necessário que seu aplicativo verifique novamente.)
Para ajustar uma visão genérica às suas necessidades, você pode subclasse uma visão genérica e substituir atributos ou métodos. No meu caso, como eu só precisava escrever testes para quaisquer personalizações adicionadas, meus arquivos de teste ficaram muito mais curtos, assim como o tempo e os recursos necessários para executá-los.
Ao ponderar a escolha entre visualizações baseadas em função ou classe, considere a quantidade de personalização necessária para a visualização e o trabalho futuro necessário para testá-la e mantê-la.
Se a lógica for comum, você poderá atingir o terreno com uma visão genérica baseada em classe. Se você precisar de granularidade suficiente para que a reescrita dos métodos de uma visão básica a torne excessivamente complicada, considere uma visão baseada em funções.
Modelos Django
Modelos organize os conceitos centrais do seu aplicativo Django para ajudá-lo a ser flexível, robusto e fácil de trabalhar. Se usados com sabedoria, os modelos são uma maneira poderosa de agrupar seus dados em uma fonte definitiva de verdade.
Como as visualizações, o Django fornece alguns tipos de modelo internos para a conveniência de implementar autenticação básica, incluindo o Do utilizador e Permissão modelos. Para todo o resto, você pode criar um modelo que reflita seu conceito herdando de uma classe Model pai.
class StaffMember(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
company = models.OneToOneField(Company, on_delete=models.CASCADE)
def __str__(self):
return self.company.name + " - " + self.user.email
Quando você cria um modelo personalizado no Django, você subclassifica Classe Model do Django e tirar proveito de todo o seu poder. Cada modelo que você cria geralmente mapeia para uma tabela de banco de dados. Cada atributo é um campo de banco de dados. Isso lhe dá a capacidade de criar objetos para trabalhar com que os humanos possam entender melhor.
Você pode tornar um modelo útil definindo seus campos. Muitos tipos de campo embutidos são convenientemente fornecidos. Isso ajuda o Django a descobrir o tipo de dados, o HTML ferramenta usar ao renderizar um formulário e até validação de formulário requisitos. Se precisar, você pode escrever campos de modelo personalizado.
Base de dados relacionamentos pode ser definido usando um ForeignKey campo (muitos-para-um) ou um ManyToManyField (dê três palpites). Se isso não bastar, há também uma OneToOneField.
Juntos, eles permitem definir relações entre seus modelos com níveis de complexidade limitados apenas pela sua imaginação. (Dependendo da imaginação que você tem, isso pode ou não ser uma vantagem.)
Recuperando Objetos com Consultas
Use o gerente do seu modelo (objects por padrão) para construir um QuerySet. Essa é uma representação dos objetos em seu banco de dados que você pode refinar, usando métodos, para recuperar subconjuntos específicos. Todos os métodos disponíveis estão no API QuerySet e podem ser encadeados para ainda mais diversão.
Post.objects.filter(
type="new"
).exclude(
title__startswith="Blockchain"
)
Alguns métodos retornam novos QuerySets, como filter()ou exclude(). Encadear essas informações pode fornecer consultas poderosas sem afetar o desempenho, pois o QuerySets não é buscado no banco de dados até que sejam avaliados. Os métodos que avaliam um QuerySet incluem get(), count(), len(), list()ou bool().
A iteração sobre um QuerySet também a avalia; evite fazê-lo sempre que possível para melhorar o desempenho da consulta. Por exemplo, se você quer apenas saber se um objeto está presente, pode usar exists() para evitar a iteração sobre objetos de banco de dados.
Usar get() nos casos em que você deseja recuperar um objeto específico. Este método gera MultipleObjectsReturned se algo inesperado acontecer, bem como o DoesNotExist exceção, se, adivinhe.
Se você deseja obter um objeto que pode não existir no contexto da solicitação de um usuário, use o conveniente get_object_or_404() ou get_list_or_404() o que gera Http404 ao invés de DoesNotExist. Estes úteis atalhos são adequados apenas para esse propósito. Para criar um objeto que não existe, há também o conveniente get_or_create().
Fundamentos eficientes
Agora você tem um controle sobre essas três ferramentas essenciais para criar seu aplicativo Django eficiente – parabéns!
O Django pode fazer muito mais por você, portanto, fique atento a artigos futuros.
Se você for construir no GitHub, poderá configurar meu Ação do GitHub do django-security-check. Enquanto isso, você está no caminho certo para criar um belo projeto de software.
