django - noonecare/python GitHub Wiki
django Concept
Overview
django 沿用 MVC 设计模式,但是和 MVC 略有不同,django 的设计也被称为 MTV
-
M, Model 表示数据
- 与 tornado 非常不同的就是 Model, Model 通过对数据的抽象,使得程序可以很方便的在多种类型多个不同的数据库上进行切换(只需要改 settings.py 即可)。
-
V, View 处理数据的逻辑
- view, viewset。和 MVC 中的 V 表达的含义略有不同。django 的 view 似乎属于 MVC 中的 C(controller), 连接 数据 和 前端展现。
- 除此之外, middleware 也属于 Controller。 请求发送给 django 服务器是先通过 middleware 的处理,再交给 view 去处理的。如果 middleware 在处理时,return httpresponse, 那么就不再需要 view 来处理,而是直接反馈给 client。常见的 middleware 一般跟安全有关,比如实现反爬虫的功能,统计一段时间,一个ip 最多能访问多少次。
- url 路径与view 的 router 关系,写在 settings.py 中。app 中有 settings.py, 主 application 中有 settings.py 。application 的 settings.py 如何重用 app 中的 settings.py 配置, 一种方式是用 include 函数,一种方式是让 app 自己去 register。
-
T, Templates 展现在前端的页面
- 其实 templates 本身就可以实现简单的处理逻辑(for 循环, if 等)
- 联合功能强大的前端工具(比如 angular 和 backbone) 实现逻辑。特别的, 前端工具是在 client 执行了,可以分担服务器的压力。
django 比tornado 方便重用代码
- django 应用是由多个 app 组成的,app 是可复用的 django 应用。正是通过发布 app 使得 django 应用可以复用,进而使得 django 相对于 tornado 提供了大量的现成的应用。要写一个 app 也非常简单,通过执行
django-admin startapp app_name
来新建 app。
Django 中有功能丰富的 app
-
rest_framework
- 实现 rest api 接口, 我对于 rest api 的理解是,发出 requst 得到的 response 是 json; 在request 中有个 [op 参数](类似 WebHDFS 的 API)。
- Serialiazer Class, 应该是实现 response data 序列化为 json 的功能。
- ViewSet & Router, ViewSet 就是指明数据的字段,以及序列化用的类,即可。Router 主要是为了简写 URL CONF。
-
django-filter
-
session
-
django-compressor
-
Django 自带了 test 工具