在我的~/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 中指定要求。只有那些需要
我在requirements_dev.txt 的开发/测试环境。
某些服务(例如 heroku)要求在根目录中有 requirements.txt。
setup.py
在使用setuptools 部署项目时很有用。它将manage.py 添加到PATH,所以我可以直接(在任何地方)运行manage.py。
项目特定应用
我以前把这些应用放到project_name/apps/目录下并导入
使用相对导入。
模板/静态/语言环境/测试文件
我将这些模板和静态文件放在全局模板/静态目录中,而不是在每个应用程序中。
这些文件通常由不关心项目代码的人编辑
结构或python。如果您是独自工作的全栈开发人员或
在一个小团队中,您可以创建每个应用程序的模板/静态目录。这真的只是一个品味问题。
这同样适用于语言环境,尽管有时创建单独的语言环境目录很方便。
测试通常最好放在每个应用程序中,但通常有很多
集成/功能测试,测试更多应用程序协同工作,因此是全球性的
测试目录确实有意义。
临时目录
项目根目录中有临时目录,已从 VCS 中排除。它习惯于
在开发过程中存储媒体/静态文件和 sqlite 数据库。一切都在
tmp 可以随时删除,没有任何问题。
虚拟环境
我更喜欢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 应用程序,它允许我运行单个管理命令来更新环境,但我只将它用于一个项目,我仍在尝试它。
草图和草稿
我放置在全局templates/ 目录中的模板草稿。我想有人可以在项目根目录中创建文件夹sketches/,但还没有使用它。
可插拔应用程序
这些应用程序通常准备作为开源发布。我举了例子
以下来自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很容易安装包。