Eu tenho um "produto" bastante complexo que estou me preparando para construir usando o Django. Vou evitar o uso dos termos "projeto" e "aplicativo" neste contexto, porque não sou claro sobre o significado específico deles no Django.
Os projetos podem ter muitos aplicativos. Os aplicativos podem ser compartilhados entre muitos projetos. Bem.
Não estou reinventando o blog ou fórum - não vejo parte do meu produto reutilizável em nenhum contexto. Intuitivamente, eu chamaria esse de "aplicativo". Eu faço todo o meu trabalho em uma única pasta "app"?
Se sim ... em termos de project.app
namespace do Django , minha inclinação é usar myproduct.myproduct
, mas é claro que isso não é permitido (mas o aplicativo que estou construindo é o meu projeto, e meu projeto é um aplicativo!). Portanto, sou levado a acreditar que talvez eu deva abordar o Django criando um aplicativo por modelo "significativo", mas não sei onde traçar os limites do meu esquema para separá-lo em aplicativos - tenho muitas de modelos com relações relativamente complexas.
Espero que exista uma solução comum para isso ...
Respostas:
O que é para você parar de usar
myproduct.myproduct
? O que você precisa para conseguir isso consiste basicamente em fazer isso:e assim por diante. Ajudaria se eu dissesse
views.py
que não precisa ser chamadoviews.py
? Desde que você possa nomear, no caminho do python, uma função (geralmente package.package.views.function_name) será manipulada. Simples assim. Todo esse material de "projeto" / "aplicativo" são apenas pacotes python.Agora, como você deve fazer isso? Ou melhor, como posso fazer isso? Bem, se você criar uma peça significativa de funcionalidade reutilizável, como diria um editor de marcação, que é quando você cria um "app nível superior", que pode conter
widgets.py
,fields.py
,context_processors.py
etc - todas as coisas que você pode querer importação.Da mesma forma, se você pode criar algo como um blog em um formato bastante genérico nas instalações, pode agrupá-lo em um aplicativo, com seu próprio modelo, pasta de conteúdo estático etc., e configurar uma instância de um projeto django para usar esse conteúdo do aplicativo.
Não há regras rígidas e rápidas dizendo que você deve fazer isso, mas esse é um dos objetivos da estrutura. O fato de tudo, incluindo os modelos, permitir que você inclua a partir de alguma base comum significa que seu blog deve se encaixar perfeitamente em qualquer outra configuração, simplesmente cuidando de sua própria parte.
No entanto, para abordar sua preocupação real, sim, nada indica que você não pode trabalhar com a pasta do projeto de nível superior. É o que os aplicativos fazem e você pode fazê-lo se realmente quiser. Eu costumo não fazer isso, por várias razões:
website
. No entanto, em uma data posterior, talvez eu queira desenvolver funcionalidades originais apenas para este site. Com o objetivo de torná-lo removível (mesmo que nunca o faça), costumo criar um diretório separado. Isso também significa que posso descartar a funcionalidade apenas desvinculando esse pacote da configuração e removendo a pasta, em vez de excluir um complexo as URLs corretas de uma pasta global urls.py.Em resumo, o motivo pelo qual existe uma convenção é o mesmo que qualquer outra convenção - ajuda quando se trata de outras pessoas que trabalham com o seu projeto. Se eu vejo
fields.py
, imediatamente espero que o código contenha a subclasse do campo do django, enquanto que se eu verinputtypes.py
, talvez não seja tão claro o que isso significa sem olhar para ele.fonte
manage.py
, impedindo a importação correta das configurações do projeto. Isso aconteceu comigo e eu o resolvi refatorando o aplicativo para o efeito demyproduct_app
.Depois de se graduar de usar
startproject
estartapp
, não há nada para impedi-lo de combinar um "projeto" e "aplicativo" no mesmo pacote Python. Um projeto nada mais é do que umsettings
módulo e um aplicativo nada mais é do que ummodels
módulo - todo o resto é opcional.Para sites pequenos, é totalmente razoável ter algo como:
fonte
INSTALLED_APPS
lista. Aqui está um exemplo: stackoverflow.com/a/59739912/399435Li esse pensamento em algum lugar logo depois que comecei a trabalhar com o django e acho que faço essa pergunta a mim mesmo com bastante frequência e isso me ajuda.
Seus aplicativos não precisam ser reutilizáveis, eles podem depender um do outro, mas devem fazer uma coisa.
fonte
Eu achei as seguintes postagens no blog muito úteis sobre aplicativos e projetos django:
Em princípio, você tem muita liberdade com o django para organizar o código fonte do seu produto.
fonte
Não há nada como não permitido. É seu projeto, ninguém está te restringindo. É aconselhável manter um nome razoável.
Em um projeto geral do django, existem muitos aplicativos (aplicativos de contribuição) que são realmente usados em todos os projetos.
Digamos que seu projeto
main
execute apenas uma tarefa e tenha apenas um aplicativo (o nomeio como o projeto gira em torno dele e dificilmente pode ser conectado). Este projeto também ainda usa alguns outros aplicativos em geral.Agora, se você disser que seu projeto está usando apenas o app (
INSTALLED_APPS='myproduct'
), então, para que serveproject
defini-loproject.app
, acho que você deve considerar alguns pontos:No que diz respeito à maior parte do trabalho que está sendo feito no aplicativo, acho que é o caso da maioria dos projetos de django.
fonte
main
convenção - isso faz muito sentido para mim para um projeto original como este. Eu pretendo adicionar aplicativos "reutilizáveis" posteriormente, mas isso está muito além do meu foco no momento.Aqui os criadores do Django apontam essa diferença eles mesmos . Eu acho que é bom pensar nos aplicativos, pois eles devem ser reutilizáveis em outros projetos . Também uma boa maneira de pensar sobre os aplicativos no Django fornece aplicativos da web modernos.
Imagine que você está criando um grande aplicativo dinâmico da Web com base em JavaScript .
Você pode criar então no django App chamado, por exemplo, "FrontEnd" <- no aplicativo fino, você exibirá o conteúdo.
Em seguida, você cria alguns aplicativos de back-end. Por exemplo, o aplicativo chamado "Comentários" que armazenará os comentários do usuário. E o aplicativo "Comentários" não exibirá nada em si. Será apenas uma API para solicitações AJAX do seu site JS dinâmico .
Dessa forma, você sempre pode reutilizar o aplicativo "Comentários". Você pode torná-lo de código aberto sem abrir o código-fonte do projeto inteiro. E você mantém a lógica limpa do seu projeto.
fonte