raa*_*cer 144 django directory-structure project-structure organization
我知道实际上没有单一的正确方法.但是我发现很难创建一个运行良好的目录结构,并为每个开发人员和管理员保持干净.github上的大多数项目都有一些标准结构.但它没有显示在pc上组织其他文件和所有项目的方法.
在开发机器上组织所有这些目录最方便的方法是什么?您如何命名它们,以及如何将其连接并部署到服务器?
我想解决的问题:
Tom*_*ich 223
我的~/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
...
Run Code Online (Sandbox Code Playgroud)
主要设置是生产设置.其他文件(例如staging.py
,
development.py
)只是从中导入所有内容production.py
并仅覆盖必要的变量.
对于每个环境,都有单独的设置文件,例如.生产,发展.我还测试了一些项目(用于测试运行器),staging(作为最终部署之前的检查)和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
Run Code Online (Sandbox Code Playgroud)
您可以使用rsync
而不是git
,但仍需要运行批处理命令来更新环境.
最近,我制作了[django-deploy][2]
应用程序,它允许我运行单一管理命令来更新环境,但我只将它用于一个项目而且我还在尝试它.
我放在全局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
...
Run Code Online (Sandbox Code Playgroud)
目录名称很清楚(我希望).我把测试文件放在app目录之外,但它确实没关系.重要的是要提供README
和setup.py
,所以包装是很容易通过安装pip
.
cor*_*cor 15
我的答案取决于我自己的工作经验,主要是在我强烈推荐的两本Django书中,你可以在哪里找到更详细的解释.我只想回答一些问题,欢迎任何改进或纠正.但也可以有更正确的方式来达到同样的目的.
项目
我的个人目录中有一个主文件夹,用于维护我正在处理的所有项目.
源文件
我个人使用django项目根目录作为我项目的存储库根目录.但是在本书中建议将两者分开.我认为这是一种更好的方法,所以我希望我的项目能够逐步改变.
project_repository_folder/
.gitignore
Makefile
LICENSE.rst
docs/
README.rst
requirements.txt
project_folder/
manage.py
media/
app-1/
app-2/
...
app-n/
static/
templates/
project/
__init__.py
settings/
__init__.py
base.py
dev.py
local.py
test.py
production.py
ulrs.py
wsgi.py
Run Code Online (Sandbox Code Playgroud)
Repository
Git或Mercurial似乎是Django开发人员中最受欢迎的版本控制系统.备份GitHub和Bitbucket最受欢迎的托管服务.
虚拟环境
我使用virtualenv和virtualenvwrapper.安装第二个后,您需要设置工作目录.我在/ home/envs目录下,因为它建议在virtualenvwrapper安装指南中使用.但我认为最重要的是它放在哪里.使用虚拟环境时最重要的事情是使requirements.txt文件保持最新.
pip freeze -l > requirements.txt
Run Code Online (Sandbox Code Playgroud)
静态根
项目文件夹
Media Root
Project文件夹
README
存储库根目录
LICENSE
存储库根目录
Documents
Repository root.这个python包可以帮助您更轻松地保存文档:
草图
例子
数据库
我不喜欢创建一个新settings/
目录.我只是添加名为的文件settings_dev.py
,settings_production.py
所以我不必编辑BASE_DIR
.下面的方法增加了默认结构而不是更改它.
mysite/ # Project
conf/
locale/
en_US/
fr_FR/
it_IT/
mysite/
__init__.py
settings.py
settings_dev.py
settings_production.py
urls.py
wsgi.py
static/
admin/
css/ # Custom back end styles
css/ # Project front end styles
fonts/
images/
js/
sass/
staticfiles/
templates/ # Project templates
includes/
footer.html
header.html
index.html
myapp/ # Application
core/
migrations/
__init__.py
templates/ # Application templates
myapp/
index.html
static/
myapp/
js/
css/
images/
__init__.py
admin.py
apps.py
forms.py
models.py
models_foo.py
models_bar.py
views.py
templatetags/ # Application with custom context processors and template tags
__init__.py
context_processors.py
templatetags/
__init__.py
templatetag_extras.py
gulpfile.js
manage.py
requirements.txt
Run Code Online (Sandbox Code Playgroud)
我认为这:
settings.py
settings_dev.py
settings_production.py
Run Code Online (Sandbox Code Playgroud)
比这更好:
settings/__init__.py
settings/base.py
settings/dev.py
settings/production.py
Run Code Online (Sandbox Code Playgroud)
此概念也适用于其他文件.
我通常把node_modules/
与bower_components/
默认内的项目目录static/
文件夹中.
有时vendor/
Git子模块的目录,但通常我把它们放在static/
文件夹中.
根据 Django 项目骨架,可以遵循的正确目录结构是:
\n\n[projectname]/ <- project root\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 [projectname]/ <- Django root\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 settings/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 common.py\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 development.py\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 i18n.py\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 production.py\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 urls.py\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 wsgi.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 apps/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 configs/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 apache2_vhost.sample\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 README\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 doc/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Makefile\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 source/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 *snap*\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 manage.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.rst\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 run/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 media/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 README\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 static/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 README\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 static/\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 README\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 templates/\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base.html\n \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 core\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 login.html\n \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 README\n
Run Code Online (Sandbox Code Playgroud)\n\n请参阅https://django-project-sculpture.readthedocs.io/en/latest/struct.html了解最新的目录结构。
\n 归档时间: |
|
查看次数: |
98648 次 |
最近记录: |