我知道没有唯一正确的方法。然而,我发现很难为每个开发人员和管理员创建一个工作良好并保持干净的目录结构。在github上的大多数项目中都有一些标准的结构。但它没有显示一个方法来组织另一个文件和所有的项目在pc上。
在开发机器上组织所有这些目录最方便的方法是什么?如何命名它们,如何将其连接并部署到服务器?
项目(你正在做的所有项目)
源文件(应用程序本身)
仓库的工作副本(我使用git)
虚拟环境(我更喜欢把它放在项目附近)
静态根目录(用于编译的静态文件)
媒体根目录(用于上传的媒体文件)
自述
许可证
文档
草图
示例(使用该项目提供的应用程序的示例项目)
数据库(如果使用sqlite)
你在一个项目上成功工作通常需要的其他东西
我想解决的问题是:
目录的好名字,这样它们的目的就明确了。
保持所有项目文件(包括virtualenv)在一个地方,所以我可以很容易地复制,移动,存档,删除整个项目或估计磁盘空间的使用情况。
为一些选定的文件集(如整个应用程序、存储库或virtualenv)创建多个副本,同时保留另一个我不想克隆的文件的单个副本。
通过对选定的一个目录进行rsync,将正确的文件集部署到服务器。
我的答案来自于我自己的工作经验,主要是在我强烈推荐的《Two Scoops of 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
存储库
Git或Mercurial似乎是Django开发人员中最流行的版本控制系统。以及最流行的备份托管服务GitHub和Bitbucket。
虚拟环境
我使用virtualenv和virtualenvwrapper。安装第二个之后,您需要设置您的工作目录。我的在我的/home/envs目录下,这是virtualenvwrapper安装指南中推荐的。但我认为最重要的不是放在哪里。在使用虚拟环境时,最重要的事情是保持requirements.txt文件是最新的。
pip freeze -l > requirements.txt
静态的根
项目文件夹
媒体根
项目文件夹
自述
库根
许可证
库根
文档
库根。这些python包可以帮助你更容易地维护你的文档:
reStructuredText
斯芬克斯
草图
例子
数据库
我的答案来自于我自己的工作经验,主要是在我强烈推荐的《Two Scoops of 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
存储库
Git或Mercurial似乎是Django开发人员中最流行的版本控制系统。以及最流行的备份托管服务GitHub和Bitbucket。
虚拟环境
我使用virtualenv和virtualenvwrapper。安装第二个之后,您需要设置您的工作目录。我的在我的/home/envs目录下,这是virtualenvwrapper安装指南中推荐的。但我认为最重要的不是放在哪里。在使用虚拟环境时,最重要的事情是保持requirements.txt文件是最新的。
pip freeze -l > requirements.txt
静态的根
项目文件夹
媒体根
项目文件夹
自述
库根
许可证
库根
文档
库根。这些python包可以帮助你更容易地维护你的文档:
reStructuredText
斯芬克斯
草图
例子
数据库
您可以使用https://github.com/Mischback/django-project-skeleton存储库。
执行如下命令:
$ django-admin startproject --template=https://github.com/Mischback/django-project-skeleton/archive/development.zip [projectname]
结构是这样的:
[projectname]/ <- project root
├── [projectname]/ <- Django root
│ ├── __init__.py
│ ├── settings/
│ │ ├── common.py
│ │ ├── development.py
│ │ ├── i18n.py
│ │ ├── __init__.py
│ │ └── production.py
│ ├── urls.py
│ └── wsgi.py
├── apps/
│ └── __init__.py
├── configs/
│ ├── apache2_vhost.sample
│ └── README
├── doc/
│ ├── Makefile
│ └── source/
│ └── *snap*
├── manage.py
├── README.rst
├── run/
│ ├── media/
│ │ └── README
│ ├── README
│ └── static/
│ └── README
├── static/
│ └── README
└── templates/
├── base.html
├── core
│ └── login.html
└── README
我不喜欢创建一个新的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
我认为:
settings.py
settings_dev.py
settings_production.py
比这个好:
settings/__init__.py
settings/base.py
settings/dev.py
settings/production.py
这个概念也适用于其他文件。
我通常将node_modules/和bower_components/放在默认的静态/文件夹的项目目录中。
有时候Git子模块有一个vendor/目录,但通常我把它们放在静态/文件夹中。