我的
~/projects/目录中有两种Django“项目”,它们的结构略有不同:
- Stand-alone websites
- Pluggable applications
独立网站
通常是私人项目,但不一定必须如此。通常看起来像这样:
~/projects/project_name/docs/ # documentationscripts/ manage.py # installed to PATH via setup.pyproject_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.pystatic/ # site-specific static filestemplates/ # site-specific templatestests/ # site-specific tests (mostly in-browser ones)tmp/ # excluded from gitsetup.pyrequirements.txtrequirements_dev.txtpytest.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。如果你是一个全职的开发人员,独自工作或以小组形式工作,则可以创建按应用程序模板/静态目录。这实际上只是一个品味问题。
尽管有时创建单独的语言环境目录比较方便,但对于语言环境也是如此。
通常最好将测试放置在每个应用程序中,但是通常有许多集成/功能测试可以测试更多的应用程序,因此全局测试目录确实有意义。
Tmp目录
项目根目录中有一个临时目录,不包含在VCS中。它用于在开发过程中存储媒体/静态文件和sqlite数据库。tmp中的所有内容都可以随时删除,没有任何问题。
虚拟环境
我更喜欢
virtualenvwrapper将所有venv放置在
~/.venvs目录中,但是你可以将其放置在里面tmp/以使其保持在一起。
项目模板
我已经为此设置创建了项目模板django-start-template
部署方式
该项目的部署如下:
source $VENV/bin/activateexport DJANGO_SETTINGS_MODULE=project_name.settings.productiongit pullpip install -r requirements.txt# Update database, static files, localesmanage.py syncdb --noinputmanage.py migratemanage.py collectstatic --noinputmanage.py makemessages -amanage.py compilemessages# restart wsgitouch project_name/wsgi.py
你可以使用rsync代替git,但是仍然需要运行一批命令来更新环境。
最近,我制作了一个[django-deploy][2]应用程序,它允许我运行单个管理命令来更新环境,但是我仅将其用于一个项目,并且仍在尝试中。
草图和草稿
我放置在全局
templates/目录中的模板草案。我猜一个人可以
sketches/在项目根目录下创建文件夹,但是还没有使用过。
可插拔应用
这些应用通常准备以开源形式发布。我从
django-forme采取以下示例
~/projects/django-app/docs/app/tests/example_project/LICENCEMANIFEST.inREADME.mdsetup.pypytest.initox.ini.travis.yml...
目录名称很清楚(我希望如此)。我将测试文件放在应用程序目录外,但这并不重要。重要的是要提供
README和
setup.py,所以包装是很容易通过安装
pip。



