update: 2020-03-04

7. Django

Django框架是使用非常广泛的优秀框架(源自国外一个新闻系统,自带后台),无论其架构设计及构建系统的便利,我们都有必要去学习研究,对于基于其开发系统或者自己设计项目架构都有借鉴意义!
这是我大学时的一门课程,在这里再回顾下,将笔记记录于此,与大家一起学习探讨。

7.1. 设计哲学(理念)

  1. 基本目标
    • 低耦合高内聚。Django本身也是一个技术栈,其构建目标就是各模块,如视图、数据库、模板等部分最大化相互解耦,这就增加了框架的灵活性和可扩展性。
  2. 基本原则
    • 精简。借助Python语言自身的特性:动态性,如自身机制使框架代码尽可能地精简。
    • 构建快。能够让开发者快速基于框架进行web开发,把一些通用的、复用的功能代码抽象,使我们专注业务实现。
    • 不重复造轮子。各功能模块各就其位,减少冗余,提供扩展性强的接口。
    • 遵循PEP20(翻译为:Python之禅)的原则。
    • 一致性。

各组件设计原则

模型(Model)

  1. 明确优于隐式

    • 字段不应该仅仅根据字段的名称来假定某些行为

    • 多使用关键字参数

      什么是关键字参数?如: *args, **kwargs。使用关键字参数可增加函数的灵活性,健壮性。

  2. 包括所有相关领域逻辑

    • 遵循Active Record模式

      表现为类似ORM的作用

    • 在模型中将数据库表定义为一个object,并尽可能全面的定义表的所需信息

数据库API

  1. 简洁数据操作代码
    • 避免再写一些繁琐的数据库操作代码,快速实现业务逻辑。
  2. 可选择原始SQL
    • 框架支持自定义纯SQL语句,可根据实际业务需求实现。

URL设计

  1. 松耦合
    • URL不用实际的处理函数名耦合
  2. 灵活性
  3. 鼓励
    • 在URL中应避免出现文件后缀名。

模板系统

  1. 逻辑分类方案
    • view层和Control层分离
  2. 避免冗余
    • 把一些的通用的视图放在一起。
  3. 从HTML中解耦
    • 模板系统不应该被设计成只能输出 HTML。它应该同样擅长生成其他基于文本的格式,或者仅仅是纯文本。
  4. 设计能力交给开发
    • 开发直接编辑相应HTML
  5. 更加直接的处理空格
  6. 安全机制
    • 内置了开箱即用的模板系统禁止包含恶意代码
  7. 可扩展性
    • 自定义的模板标签和过滤器背后的理念.

视图

  1. 简洁
    • 传承Python的优良风格
  2. 使用请求对象
    • 存储当前请求的元数据的对象,直接传给视图函数,避免从全局访问请求数据的视图函数
  3. 松耦合
    • 不受开发人员使用任意模板的影响
  4. 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
  1. 更少的代码
  2. 一致性
    • 缓存 API 应该为不同的缓存后端提供一致的接口。
  3. 可扩展性
    • 我不想用自带的缓存,我想用第三方的缓存框架