update: 2020-03-04
7. Django¶
Django框架是使用非常广泛的优秀框架(源自国外一个新闻系统,自带后台),无论其架构设计及构建系统的便利,我们都有必要去学习研究,对于基于其开发系统或者自己设计项目架构都有借鉴意义!
这是我大学时的一门课程,在这里再回顾下,将笔记记录于此,与大家一起学习探讨。
7.1. 设计哲学(理念)¶
- 基本目标
- 低耦合高内聚。Django本身也是一个技术栈,其构建目标就是各模块,如视图、数据库、模板等部分最大化相互解耦,这就增加了框架的灵活性和可扩展性。
- 基本原则
- 精简。借助Python语言自身的特性:动态性,如自身机制使框架代码尽可能地精简。
- 构建快。能够让开发者快速基于框架进行web开发,把一些通用的、复用的功能代码抽象,使我们专注业务实现。
- 不重复造轮子。各功能模块各就其位,减少冗余,提供扩展性强的接口。
- 遵循PEP20(翻译为:Python之禅)的原则。
- 一致性。
各组件设计原则¶
模型(Model)¶
明确优于隐式
字段不应该仅仅根据字段的名称来假定某些行为
多使用关键字参数
什么是关键字参数?如: *args, **kwargs。使用关键字参数可增加函数的灵活性,健壮性。
包括所有相关领域逻辑
遵循Active Record模式
表现为类似ORM的作用
在模型中将数据库表定义为一个object,并尽可能全面的定义表的所需信息
数据库API¶
- 简洁数据操作代码
- 避免再写一些繁琐的数据库操作代码,快速实现业务逻辑。
- 可选择原始SQL
- 框架支持自定义纯SQL语句,可根据实际业务需求实现。
URL设计¶
- 松耦合
- URL不用实际的处理函数名耦合
- 灵活性
- 鼓励
- 在URL中应避免出现文件后缀名。
模板系统¶
- 逻辑分类方案
- view层和Control层分离
- 避免冗余
- 把一些的通用的视图放在一起。
- 从HTML中解耦
- 模板系统不应该被设计成只能输出 HTML。它应该同样擅长生成其他基于文本的格式,或者仅仅是纯文本。
- 设计能力交给开发
- 开发直接编辑相应HTML
- 更加直接的处理空格
- 安全机制
- 内置了开箱即用的模板系统禁止包含恶意代码
- 可扩展性
- 自定义的模板标签和过滤器背后的理念.
视图¶
- 简洁
- 传承Python的优良风格
- 使用请求对象
- 存储当前请求的元数据的对象,直接传给视图函数,避免从全局访问请求数据的视图函数
- 松耦合
- 不受开发人员使用任意模板的影响
- GET 方法和 POST 方法的区别
- 框架是的GET和POST数据很容器区分
缓存框架¶
目的:减少请求系统的资源开销
given a URL, try finding that page in the cache
if the page is in the cache:
return the cached page
else:
generate the page
save the generated page in the cache (for next time)
return the generated page
- 更少的代码
- 一致性
- 缓存 API 应该为不同的缓存后端提供一致的接口。
- 可扩展性
- 我不想用自带的缓存,我想用第三方的缓存框架