【Django】基于Django架构网站代码的目录结构

 

 经典的Django项目源码目录结构css

 Django在一个项目的目录结构划分方面缺少必要的规范。在Django的官方文档中并无给出大型项目的代码建议目录结构,网上的文章也是根据项目的不一样结构也有适当的变化。html

样式一 :强调模块化设计  参见参考文章二python

··管理项目的依赖文件requirements文件夹,列出项目中须要的依赖的文件,好比项目使用的全部python包。django

··分离应用文件和库文件(apps ,libs)新建apps和libs用来保存application和libraryapp

··建立完善的setting模块框架

优点:模块化设计适合规模较大的项目模块化

 缺点:这种布局结构没有说明static文件的放置路径。布局

$ tree .
.
├── djangolicious
│ ├── apps
│   │   ├── blog
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   └── views.py
│   │   ├── __init__.py
│   │   ├── news
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   └── views.py
│   │   └── reader
│   │       ├── __init__.py
│   │       ├── models.py
│   │       ├── tests.py
│   │       └── views.py
│   ├── __init__.py
│ ├── libs
│   │   ├── display
│   │   │   ├── __init__.py
│   │   │   ├── models.py
│   │   │   ├── tests.py
│   │   │   └── views.py
│   │   ├── __init__.py
│   │   └── management
│   │       ├── __init__.py
│   │       ├── models.py
│   │       ├── tests.py
│   │       └── views.py
│ ├── settings
│   │   ├── common.py
│   │   ├── dev.py
│   │   ├── __init__.py
│   │   ├── prod.py
│   │   └── test.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
├── requirements
│   ├── common.txt
│   ├── dev.txt
│   ├── prod.txt
│   └── test.txt
└── requirements.txt

10 directories, 36 files

 

样式二,大型开源Django框架项目的 参见参考文章5

 此模板是开源项目经常使用的结构,适合大型Django项目开发。测试

Project的目录结构,PROJ_NAME指的是项目名ui

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

 

 个人总结

 ···样式一中强调的“Think Modular”思想十分适合大型的项目,大部分大型的项目也是遵循模块化目录结构的原则的。

以下图所示: 

-project
 ---app1
   --templates
     --statics
   views models tests
   urls
 ---app2
 ---appn
 statics
   --css
   --js
 settings 

 

 

···我在开源项目上看到的小型Project的目录结构差别较大,没有清晰的体系结构,规律不是很明显。

 

参考文章

Large Django application layout

2 重要Django project structure  基于Django 1.4 project

Project design / FS layout for large django projects [closed]

4 Django官网提供的大型开源项目

重要 Django最佳实践:项目布局   |   python开源项目目录结构

AN UPDATED GENERAL DJANGO PROJECT (>= 1.5) STRUCTURE OR FOLDER LAYOUT

Google小组上关于目录结构的讨论

相关文章
相关标签/搜索