我知道没有唯一正确的方法。然而,我发现很难为每个开发人员和管理员创建一个工作良好并保持干净的目录结构。在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/目录,但通常我把它们放在静态/文件夹中。

根据Django Project Skeleton,正确的目录结构如下:

[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

请参考https://django-project-skeleton.readthedocs.io/en/latest/structure.html获取最新的目录结构。

这是我在我的系统上遵循的。

All Projects: There is a projects directory in my home folder i.e. ~/projects. All the projects rest inside it. Individual Project: I follow a standardized structure template used by many developers called django-skel for individual projects. It basically takes care of all your static file and media files and all. Virtual environment: I have a virtualenvs folder inside my home to store all virtual environments in the system i.e. ~/virtualenvs . This gives me flexibility that I know what all virtual environments I have and can look use easily

以上3个分区是My工作环境的主要分区。

你提到的所有其他部分主要依赖于项目对项目的基础(即你可能会为不同的项目使用不同的数据库)。所以它们应该存在于各自的项目中。