onde exatamente a lógica de negócios python deve ser colocada no django


26

Eu apenas comecei a aprender Django / Python / Desenvolvimento Web. Esse problema está me incomodando há um tempo.

Estou criando um aplicativo com vários modelos no Django. Eu tenho um views.py que basicamente é apenas renderizar as respostas aos respectivos modelos e eu tenho um models.py onde estruturei meu banco de dados. Em um dos meus modelos, preciso fazer upload de uma imagem (o que posso fazer) e executar uma lógica baseada nos recursos da imagem carregada (ainda não concluída). Essa lógica envolve muitos cálculos pesados. Após realizar os cálculos, a lógica deve retornar algumas informações processadas (coordenadas) ao modelo.

Consegui executar todas essas ações com êxito em um aplicativo de desktop python autônomo que chamava os arquivos python um após o outro. No entanto, como agora eu quero fazer disso uma aplicação Web, comecei a usar a estrutura do Django.

Pesquisei bastante, mas ainda não sou capaz de descobrir onde exatamente devo colocar esse arquivo Python contendo toda a lógica. Devo ter outro arquivo baseado em classe (logic.py)e chamá-lo de view.py? Pesquisei no Google e descobri que muitos desenvolvedores estão colocando sua lógica de negócios em seus models.py no Django. No entanto, acho que intuitivamente não está certo, pois o modelo deve se comunicar exclusivamente com o back-end. Qualquer ajuda seria apreciada. Agradecemos antecipadamente.



Foi encontrado um artigo que discute esse tópico extensivamente (com a pirâmide em mente, não o django). Tem algumas idéias sensatas: nando.oui.com.br/2014/04/01/…
kratenko 13/10/2015

Respostas:


16

Pesquisei bastante, mas ainda não sou capaz de descobrir onde exatamente devo colocar esse arquivo Python contendo toda a lógica.

Existem várias opções, dependendo de quais são seus requisitos:

  1. Adicione a lógica, por exemplo, ao Imagemodelo. Essa é uma opção útil se você precisar armazenar metadados por imagem no banco de dados, e cada instância do modelo (cada imagem) será processada por si mesma.

  2. Adicione a lógica como uma Imageclasse Python simples , por exemplo, em um arquivo chamado image.py. Nada no Django o impede de adicionar uma lógica diferente daquela nos módulos viewsou models. Esta é uma boa opção se a lógica da imagem for um componente central do seu aplicativo Django (por exemplo, um aplicativo de processamento de imagens).

  3. Crie um projeto Python separado que forneça a lógica e, em seguida, chame-o de seus pontos de vista. Certifique-se de instalar este projeto no ambiente Python do seu aplicativo Django. Essa opção é válida se o objetivo do seu aplicativo Django for carregar e visualizar imagens ou mostrar os resultados do processamento de imagens em resposta direta à solicitação do usuário, mas onde o processamento de imagens também pode ser usado por outros projetos.

  4. Crie um aplicativo separado que processe solicitações de forma assíncrona e seja executado separadamente do seu aplicativo Django. Essa opção é útil se você precisar dissociar o processamento de imagens do ciclo de solicitação do aplicativo, processar um grande número de imagens ou se cada cálculo demorar muito para ser resolvido dentro do tempo de um ciclo de solicitação (digamos, no máximo, 500ms a 1s) .

Eu acho que intuitivamente não está certo, pois o modelo deve se comunicar exclusivamente com o back-end.

Não há nada no Django que exija um modelo para se comunicar com o backend, ou melhor, com o banco de dados. Eu acho que você está misturando a semântica do que o Django normalmente considera um modelo (ou seja, uma abstração de uma ou várias tabelas no banco de dados) versus o termo modelo como uma construção de design (por exemplo, no Domain Driven Design).


Obrigado! Foi realmente perspicaz. Acho que a opção número 3 deve ser boa o suficiente para mim. :)
adrita

É ok para avaliar o negativo resposta, mas por favor, adicionar um comentário para que eu possa melhorá-lo
miraculixx

5

Daniel Greenfeld, co-autor de "Two Scoops of Django, recomenda que a lógica de negócios deva estar nos modelos" quando possível, ou nas formas, se necessário. "Quanto à possível duplicata de Bart, o django pode ser semelhante ao MVC, mas é Não como MVC Como explicado aqui na documentação oficial do django faq. @adrita, acho que você pode precisar revisar a documentação oficial para ajudá-lo a entender um pouco melhor o conceito de modelos, visualizações e modelos.


obrigado por suas sugestões. irá percorrer a documentação certamente :)
adrita

Fico feliz que você tenha corrigido, @miraculixx deu uma explicação sólida. Se você estiver no fb, entre no grupo de framework do django python.
Die17

2

Nos documentos oficiais do Django https://docs.djangoproject.com/en/1.11/ , ele diz:

O Django tem o conceito de "visualizações" para encapsular a lógica responsável por processar a solicitação de um usuário e retornar a resposta. Encontre tudo o que você precisa saber sobre as visualizações nos links abaixo:

O Django recomenda que a lógica esteja contida nas visualizações.


3
Isso não é necessariamente o mesmo que lógica de negócios.
FirstLastname

1
Eu não concordo com essa interpretação da documentação do Django. Em outras partes da documentação do Django (por exemplo, para Model.clean()), está implícito um pouco mais explicitamente que (se simplesmente fizermos um projeto Django do mundo real para modelos, modelos e visualizações) - a lógica de negócios (ou pelo menos a validação) pertencerá ao camada de modelo. Observe que não incluí formulários nessa simplificação, que também são aceitáveis.
Kye R
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.