您的位置:首页 > 编程语言 > Go语言

Django项目结构布局

2016-06-27 14:28 344 查看
每个真正的程序员,可能都会梦想着能够发布开源项目,让自己的代码被别人所用。开源项目会发布到开发的版本管理系统(比如GitHub)上面,为了让大家能够方便使用你的代码,项目的目录结构应该遵循一定的规范。即使不是开源项目,项目目录结构符合一定的规范对你的项目管理也是有好处的。

下面列出python开源项目的通常目录结构及说明:

.tx/                                       如果你使用Transifex进行国际化的翻译工作,创建此目录

        config                           Transifex的配置文件

$PROJ_NAME/                    按照你实际的项目名称创建目录。如果有多个子项目,就创建多个目录

docs/                                    项目文档

wiki/                                      如果有wiki,可以创建此目录

scripts/                                 项目用到的各种脚本

tests/                                    测试代码

extras/                                  扩展,不属于项目必需的部分,但是与项目相关的sample、poc等,下面给出4个例子:

        dev_example/

        production_example/

        test1_poc/

        test2_poc/

.gitignore                             版本控制文件,现在git比较流行

AUTHORS                           作者清单

INSTALL                              安装说明

LICENSE                              版权声明

MANIFEST.in                       装箱清单文件

MAKEFILE                           编译脚本

README                              项目说明文件,其他需要的目录下也可以放一个README文件,说明该目录的内容

setup.py                               python模块的安装脚本

 

这个目录结构是针对python项目的,各种语言习惯的目录结构可能不同,但一些基本的要素还是共同的,可以举一反三。

在python开源项目目录结构的基础上,进一步定义django的目录结构。根据django的特性,分成两部分:project结构和app结构。

project结构

这里定义的是python开源项目目录结构中的$PROJ_NAME目录内的内容,需要与python开源项目目录结构结合起来。

PROJ_NAME/

     __init__.py      这几个文件是django创建project所必须的,不做过多说明

     manage.py

     settings.py

     urls.py  

     apps/               即使是“小”工程,也建议分成多个app,每个app足够简单,只解决某一个方面的问题 (注1)

         myapp1/

         myapp2/

     extra_apps/     引用的其他app。

     libs/                加载第三方模块,可以避免版本冲突,按照标准的site-packages管理(注2)

           python*.*/  指定python版本号

               site-packages/   

               requirements.pip    #pip的依赖说明文件

     tests/          project级别的测试,对于每个app,还要有自己的测试代码

     static/          静态内容

            css/

            js/

            images/

     uploads/       上传文件所在目录

     templates/    模板目录,覆盖app的模板

            flatpages/

            comments/

            example/

            app1/

            app2/

     templatetags/    tag目录

注1:指定app加载,在settings.py中设置:

sys.path.insert(0, os.path.join(PROJECT_ROOT, 'apps'))

sys.path.insert(0, os.path.join(PROJECT_ROOT, 'extras'))

sys.path.insert(0, os.path.join(PROJECT_ROOT, 'libs'))  

注2:自定义libs的加载,在settings.py中设置:

sys.path.insert(0, '/{{MY_LIB)}/site-packages/*****.egg')

sys.path.insert(0, '/{{MY_LIB}} /site-packages/')  

app目录结构

$APP_NAME/

     tests/                    app级别的测试代码

     models/                 注1

          __init__.py

          Amodels.py

          Bmodels.py

     templates/              注2

     templatetags/        tag目录

注1:如果很好的控制app的规模,Model类数量少,可以使用惯用的models.py文件中, 否则将models做成一个package

接下来可以有两种做法:

1. 在__init__.py中import所有的Model类

2. 指定Model的元类(Meta)的app_label, 参考这里

注2:如果extend 工程下的base.html, 使用 !base.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: