我知道实际上没有唯一正确的方法。但是,我发现很难创建一个可以正常工作并且对于每个开发人员和管理员而言都保持整洁的目录结构。github上的大多数项目都有一些标准结构。但是它没有显示在PC上组织另一个文件和所有项目的方法。
在开发机器上组织所有这些目录的最便捷方法是什么?您如何命名它们,以及如何连接并将其部署到服务器?
我要解决的问题:
我的~/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
将所有venv放置在~/.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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句