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

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

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

··管理项目的依赖文件requirements文件夹,列出项目中需要的依赖的文件,比如项目使用的所有python包。

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

··创建完善的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指的是项目名

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]

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

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

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

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

【Django】基于Django架构网站代码的目录结构的更多相关文章

  1. mybatis学习笔记(六)使用generator生成mybatis基础配置代码和目录结构

    原文:http://blog.csdn.net/oh_mourinho/article/details/51463413 创建maven项目 <span style="font-siz ...

  2. 转:基于Maven管理的JavaWeb项目目录结构参考

    通常在创建JavaWeb项目时多多少少都会遵循一些既定的比较通用的目录结构,下面分享一张基于Maven管理的JavaWeb项目目录结构参考图: 上图仅是参考,不同项目不同团队都有自己的约定和规范. 个 ...

  3. (转)android系统架构及源码目录结构

    转自:http://blog.csdn.net/finewind/article/details/46324507 1. Android系统架构: android系统架构采用了分层架构的思想,如下图所 ...

  4. java代码实现目录结构

    今天用java代码来实现.像我们电脑盘符那样的目录结构.在代码开始之前首先.介绍一下.用.java代码实现目录的思想. 第一步:完成基础的.大家想.我们是如何获取文件的.是不是用File类,直接就获取 ...

  5. stm32点亮LED 测试代码及目录结构

    . main.c - 使用PB12, PB13, PB14, PB15, PB5, PB6, PB7 这七个PB口点亮LED. 注意PB3和PB4是特殊口, 直接调用无效. #include &quo ...

  6. linux运维、架构之路-linux目录结构

    1.linux重要目录 重要目录 说明 /etc 存放系统配置文件.服务启动命令的目录 /root 超级管理员的家目录 /sbin和usr/sbin 超级用户命令的目录 /boot 系统引导程序所在的 ...

  7. Django 创建 APP和目录结构介绍

    一.通过pip安装Django 以windows 系统中使用pip命令安装为例 win+r,调出cmd,运行命令:pip install django自动安装PyPi 提供的最新版本.指定版本,可使用 ...

  8. Tensorflow[目录结构]

    1 - Tensorflow源码目录结构 基于2018年5月28日github的tensorflow源码,即1.8版本 第一层: tensorflow: 核心代码目录. third_party:第三方 ...

  9. 如何简单便捷的搭建一个网站 - 基于Django

    一.所需工具以及相关环境 1. 系统:win7,win8.1,win10(亲测可用 - 本文为win7,64位) 2. 本文使用的版本是: 1)python-2.7.11[百度云盘分享:http:// ...

随机推荐

  1. hellogcc -100GDB技巧

    https://github.com/hellogcc/100-gdb-tips/blob/master/README.md

  2. Linux 学习笔记 基本的bash shell命令

    Linux 文件系统 Linux讲文件存储在单个目录结构(虚拟目录)中,虚拟目录包含了安装在PC上的所有存储设备的文件路径. Linux虚拟目录中比较复杂的部分是它如何来协调管理各个存储设备.Linu ...

  3. Android 自定义View修炼-打造完美的自定义侧滑菜单/侧滑View控件

    一.概述 在App中,经常会出现侧滑菜单,侧滑滑出View等效果,虽然说Android有很多第三方开源库,但是实际上 咱们可以自己也写一个自定义的侧滑View控件,其实不难,主要涉及到以下几个要点: ...

  4. 简单改写SQL达到优化目的

    select * from (select t.row_id, t.supplier_name, t.tel, address, t.contact, t.contact_post, t.contac ...

  5. mac mysql error You must reset your password using ALTER USER statement before executing this statement.

    安装完mysql 之后,登陆以后,不管运行任何命令,总是提示这个 step 1: SET PASSWORD = PASSWORD('your new password'); step 2: ALTER ...

  6. JS常用正则(转)

    作者:zxin出处:http://zxin.cnblogs.com/ 一.校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n ...

  7. 关于Eclipse中开发插件(二)

    原plugin.xml文件各个设置项的说明: 附上生成的文件代码: <?xml version="1.0" encoding="UTF-8"?> & ...

  8. OQL对象查询语言

    在用mat工具分析内存使用情况查询OutOfMemory原因时,OQL会有很大帮助,所以先在这里总结一下. 基本语法: select <javascript expression to sele ...

  9. highcharts 24小时显示数据,显示00:00格式的数据

    Showing 24 hours on xAxis WITHOUT a date on 00:00 格式参考PHP手册中的: strftime

  10. Burosuite抓包Sqlmap学习Sql注入

    在sqlmap中加入--proyxy参数: --proxy "http://127.0.0.1:8080" 如下图所示: 回车以后sqlmap会自动抓到数据包: 我们选择向前(fo ...