在我的~/projects/目录中有两种Django“项目”,它们的结构都有点不同:
独立的网站
可插入应用程序
独立的网站
大部分是私人项目,但也不一定。它通常是这样的:
~/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
...
设置
主要设置是生产设置。其他文件(例如:staging.py,
Development.py)只是从production.py导入所有内容,只覆盖必要的变量。
对于每个环境,都有单独的设置文件,例如。生产,
发展。我有一些项目我也测试(测试运行),分期
(作为最终部署前的检查)和heroku(用于部署到heroku)设置。
需求
我宁愿直接在setup.py中指定需求。只需要这些
我在requients_dev .txt中有开发/测试环境。
一些服务(如;Heroku)要求根目录下有requirements.txt。
setup . py
在使用setuptools部署项目时非常有用。它将manage.py添加到PATH,因此我可以直接(在任何地方)运行manage.py。
具体项目的应用
我曾经把这些应用程序放入project_name/apps/目录并导入它们
使用相对导入。
模板/静态/地区/测试文件
我把这些模板和静态文件放入全局模板/静态目录,而不是在每个应用程序中。
这些文件通常是由不关心项目代码的人编辑的
结构或python。如果你是一个单独工作的全栈开发人员
在小型团队中,你可以创建每个应用的模板/静态目录。这只是个人口味的问题。
这同样适用于区域设置,尽管有时创建单独的区域设置目录更方便。
测试通常最好放在每个应用程序中,但通常有很多测试
集成/功能测试,测试更多的应用程序一起工作,所以是全局的
测试目录有意义。
Tmp目录
在项目根目录下有临时目录,VCS不允许。已经习惯了
在开发过程中存储媒体/静态文件和sqlite数据库。的一切
TMP可以随时删除,没有任何问题。
Virtualenv
我更喜欢virtualenvwrapper和地方所有的venvs到~/。venvs目录,
但是您可以将它放在tmp/中以使其保持一致。
项目模板
我已经为这个设置创建了项目模板,django-start-template
部署
本项目部署如下:
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
您可以使用rsync而不是git,但是仍然需要运行一批命令来更新环境。
最近,我做了一个django-deploy应用程序,它允许我运行一个管理命令来更新环境,但我只在一个项目中使用它,我还在试验中。
草图和草稿
模板的草稿我放在全局模板/目录。我猜一个人可以创建文件夹草图/在项目根,但还没有使用它。
可插入应用程序
这些应用程序通常以开源的形式发布。我举了个例子
下面摘自django-forme
~/projects/django-app/
docs/
app/
tests/
example_project/
LICENCE
MANIFEST.in
README.md
setup.py
pytest.ini
tox.ini
.travis.yml
...
目录名称是清楚的(我希望)。我把测试文件放在应用程序目录外,
但这真的不重要。提供README和setup.py非常重要,因此可以通过pip轻松安装包。