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

  • admin

  • Django 自带了 test 工具