Existem dois tipos de "projetos" do Django que tenho no meu ~/projects/
diretório, ambos com uma estrutura um pouco diferente:
- Sites independentes
- Aplicações conectáveis
Site independente
Projetos principalmente privados, mas não precisam ser. Geralmente é assim:
~/projects/project_name/
docs/ # documentation
scripts/
manage.py # installed to PATH via setup.py
project_name/ # project dir (the one which django-admin.py creates)
apps/ # project-specific applications
accounts/ # most frequent app, with custom user model
__init__.py
...
settings/ # settings for different environments, see below
__init__.py
production.py
development.py
...
__init__.py # contains project version
urls.py
wsgi.py
static/ # site-specific static files
templates/ # site-specific templates
tests/ # site-specific tests (mostly in-browser ones)
tmp/ # excluded from git
setup.py
requirements.txt
requirements_dev.txt
pytest.ini
...
Configurações
As principais configurações são as de produção. Outros arquivos (por exemplo staging.py
,
development.py
) simplesmente importam tudo production.py
e substituem apenas as variáveis necessárias.
Para cada ambiente, existem arquivos de configurações separados, por exemplo. produção, desenvolvimento. Em alguns projetos, também tenho as configurações de teste (para test runner), teste (como uma verificação antes da implantação final) e heroku (para implantação no heroku).
Exigências
Prefiro especificar requisitos em setup.py diretamente. Somente aqueles necessários para o ambiente de desenvolvimento / teste em que eu trabalho requirements_dev.txt
.
Alguns serviços (por exemplo, heroku) precisam ter requirements.txt
no diretório raiz.
setup.py
Útil ao implantar projeto usando setuptools
. Acrescenta manage.py
a PATH
, para que eu possa executar manage.py
diretamente (em qualquer lugar).
Aplicativos específicos do projeto
Eu costumava colocar esses aplicativos no project_name/apps/
diretório e importá-los usando importações relativas.
Arquivos de templates / static / locale / tests
Coloquei esses modelos e arquivos estáticos no diretório global de modelos / estático, não dentro de cada aplicativo. Esses arquivos geralmente são editados por pessoas que não se importam com a estrutura de código do projeto ou com o python. Se você é um desenvolvedor de pilha completa trabalhando sozinho ou em uma equipe pequena, pode criar modelos / diretório estático por aplicativo. É realmente apenas uma questão de gosto.
O mesmo se aplica à localidade, embora às vezes seja conveniente criar um diretório local.
Normalmente, os testes são melhores para colocar dentro de cada aplicativo, mas geralmente há muitos testes funcionais / de integração que testam mais aplicativos trabalhando juntos, portanto o diretório global de testes faz sentido.
Diretório tmp
Há um diretório temporário na raiz do projeto, excluído do VCS. É usado para armazenar arquivos estáticos / de mídia e banco de dados sqlite durante o desenvolvimento. Tudo no tmp pode ser excluído a qualquer momento sem problemas.
Virtualenv
Eu prefiro virtualenvwrapper
e coloque todos os venvs no ~/.venvs
diretório, mas você pode colocá-los dentro tmp/
para mantê-los juntos.
Modelo de projeto
Eu criei um modelo de projeto para esta configuração, django-start-template
Desdobramento, desenvolvimento
A implantação deste projeto é a seguinte:
source $VENV/bin/activate
export DJANGO_SETTINGS_MODULE=project_name.settings.production
git pull
pip install -r requirements.txt
# Update database, static files, locales
manage.py syncdb --noinput
manage.py migrate
manage.py collectstatic --noinput
manage.py makemessages -a
manage.py compilemessages
# restart wsgi
touch project_name/wsgi.py
Você pode usar em rsync
vez de git
, mas ainda assim precisa executar lotes de comandos para atualizar seu ambiente.
Recentemente, criei o [django-deploy][2]
aplicativo, o que me permite executar um único comando de gerenciamento para atualizar o ambiente, mas eu o usei apenas para um projeto e ainda estou experimentando.
Esboços e rascunhos
Rascunho de modelos que coloco dentro do templates/
diretório global . Eu acho que se pode criar uma pasta sketches/
na raiz do projeto, mas ainda não a usou.
Aplicação plugável
Esses aplicativos geralmente são preparados para publicar como código aberto. Eu peguei o exemplo abaixo do django-forme
~/projects/django-app/
docs/
app/
tests/
example_project/
LICENCE
MANIFEST.in
README.md
setup.py
pytest.ini
tox.ini
.travis.yml
...
O nome dos diretórios é claro (espero). Coloquei os arquivos de teste fora do diretório do aplicativo, mas isso realmente não importa. É importante fornecer README
e setup.py
, portanto, o pacote é facilmente instalado pip
.
scripts
argumento da palavra-chave: github.com/elvard/django-start-template/blob/master/project/… Gostotmp
porque sugere "algo temporário" que pode ser removido a qualquer momento. Olocale
diretório de nível superior não é necessário, você pode colocá-lo em qualquer lugar. Eu apenas gosto que seja consistente com diretórios estáticos / modelos.git checkout
ou excluindo apenas um diretório 'tmp' ao clonar o diretório do projeto. Parece que sua estrutura atende a todos os requisitos e é claro o suficiente para ser usado regularmente, sem qualquer dúvida. Estou aceitando sua resposta. Obrigado.src
dentro da raiz do projeto. Esta é a cópia de trabalho dos arquivos de origem e a raiz do repositório git. Posso fazer várias cópias deste diretório -src
,src.bak
,src_tmp
e assim por diante. Outros diretórios não-repo comoenv
,tmp
,media
,backup
residir no mesmo nível. Para que eu possa, acp -r src src.bak
qualquer momento, fazer experimentos com o git ou comparar versões com ferramentas externas. Enquanto você tem arquivos locais dentro do seu repositório, eu tenho repositório dentro dos meus diretórios de arquivos locais (vice-versa). O melhor nome do meusrc
diretório érepo
.Minha resposta é inspirada em minha própria experiência de trabalho, e principalmente no livro Two Scoops of Django, que eu recomendo, e onde você pode encontrar uma explicação mais detalhada de tudo. Apenas responderei a alguns pontos e qualquer melhoria ou correção será bem-vinda. Mas também pode haver maneiras mais corretas para atingir o mesmo objetivo.
Projetos
Eu tenho uma pasta principal no meu diretório pessoal, onde mantenho todos os projetos nos quais estou trabalhando.
Arquivos de origem
Eu pessoalmente uso a raiz do projeto django como raiz do repositório dos meus projetos. Mas no livro é recomendado separar as duas coisas. Penso que esta é uma abordagem melhor, por isso espero começar a fazer alterações progressivamente nos meus projetos.
Repository
Git ou Mercurial parecem ser os sistemas de controle de versão mais populares entre os desenvolvedores do Django. E os serviços de hospedagem mais populares para backups do GitHub e Bitbucket .
Ambiente virtual
Eu uso virtualenv e virtualenvwrapper. Depois de instalar o segundo, você precisa configurar seu diretório de trabalho. O meu está no meu diretório / home / envs , como recomendado no guia de instalação do virtualenvwrapper. Mas não acho que o mais importante é onde é colocado. O mais importante ao trabalhar com ambientes virtuais é manter o arquivo requirements.txt atualizado.
Pasta Projeto de raiz estática
Pasta Projeto Raiz da Mídia
Raiz README do repositório
Raiz do repositório da LICENÇA
Raiz do Repositório de Documentos . Estes pacotes python podem ajudá-lo a facilitar a manutenção de sua documentação:
Esboços
Exemplos
Base de dados
fonte
Não gosto de criar um novo
settings/
diretório. Simplesmente adiciono arquivos nomeadossettings_dev.py
esettings_production.py
não preciso editar o arquivoBASE_DIR
. A abordagem abaixo aumenta a estrutura padrão em vez de alterá-la.Eu acho que isto:
é melhor que isso:
Este conceito também se aplica a outros arquivos.
Eu costumo colocar
node_modules/
ebower_components/
no diretório do projeto dentro dastatic/
pasta padrão .Às vezes, um
vendor/
diretório para Submodules Git, mas geralmente eu os coloco nastatic/
pasta.fonte
Aqui está o que eu sigo no Meu sistema.
Todos os Projetos : Existe um diretório de projetos em minha casa pasta ie
~/projects
. Todos os projetos ficam dentro dele.Projeto Individual : Sigo um modelo de estrutura padronizado usado por muitos desenvolvedores chamado django-skel para projetos individuais. Basicamente, ele cuida de todos os seus arquivos estáticos e de mídia e tudo.
Ambiente virtual : tenho uma pasta virtualenvs em minha casa para armazenar todos os ambientes virtuais no sistema, ou seja
~/virtualenvs
. Isso me dá uma flexibilidade de saber quais são os ambientes virtuais que tenho e que posso usar facilmenteOs três acima são as principais partições do Meu ambiente de trabalho.
Todas as outras partes mencionadas dependem principalmente do projeto para o projeto (por exemplo, você pode usar bancos de dados diferentes para projetos diferentes). Portanto, eles devem residir em seus projetos individuais.
fonte
De acordo com o Django Project Skeleton, a estrutura de diretórios apropriada que pode ser seguida é:
Consulte https://django-project-skeleton.readthedocs.io/en/latest/structure.html para obter a estrutura de diretórios mais recente.
fonte
Você pode usar o https://github.com/Mischback/django-project-skeleton repository.
Execute o comando abaixo:
A estrutura é algo como isto:
fonte