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 应该为不同的缓存后端提供一致的接口。
-
-
可扩展性
-
我不想用自带的缓存,我想用第三方的缓存框架
-