类(Class): 用来描述具备相同的属性和方法的对象的集合。它定义了该集合中每一个对象所共有的属性和方法。对象是类的实例。html
三大特性:python
封装:数据库
-- 将内容封装到对象中django
-- 将方法疯长到类中api
实例:自定义分页,restframework的request,session
继承:框架
-- 将多个类共有的方法提取到父类中,子类仅需继承父类而没必要一一实现每一个方法iview
涉及 -- 多继承socket
-- 经典类 -- 深度优先ide
-- 新式类 -- 广度优先
实例:restframework的apiview继承django的view,django的view继承的基类obj,FORM表单继承forms,forms继承基类obj。
多态:
-- 多态指的是一类事物有多种形态
多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度) import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') class Dog(Animal): #动物的形态之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #动物的形态之三:猪 def talk(self): print('say aoao')
import abc class File(metaclass=abc.ABCMeta): #同一类事物:文件 @abc.abstractmethod def click(self): pass class Text(File): #文件的形态之一:文本文件 def click(self): print('open file') class ExeFile(File): #文件的形态之二:可执行文件 def click(self): print('execute file')
多态性:
-- 多态性是指具备不一样功能的函数能够使用相同的函数名,这样就能够用一个函数名调用不一样内容的函数。在面向对象方法中通常是这样表述多态性:向不一样的对象发送同一条消息,不一样的对象在接收时会产生不一样的行为(即方法)。也就是说,每一个对象能够用本身的方式去响应共同的消息。所谓消息,就是调用函数,不一样的行为就是指不一样的实现,即执行不一样的函数。
#多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度) import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') class Dog(Animal): #动物的形态之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #动物的形态之三:猪 def talk(self): print('say aoao') peo1=peo() pig1=pig() 多态性:一种调用方式,不一样的执行效果(多态性) 多态性依赖于:继承 多态性:定义统一的接口, def func(obj): #obj这个参数没有类型限制,能够传入不一样类型的值 obj.talk() #调用的逻辑都同样,执行的结果却不同 func(peo1) func(pig1)
涉及 -- 鸭子模型
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就能够被称为鸭子。”
在鸭子类型中,关注的不是对象的类型自己,而是它是如何使用的。例如,在不使用鸭子类型的语言中,咱们能够编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。在使用鸭子类型的语言中,这样的一个函数能够接受一个任意类型的对象,并调用它的走和叫方法。
请求--wsgi--中间件--URL路由系统--根据url匹配相应的视图函数--view视图函数--models--数据库
--将数据库返回给视图--view视图函数--要展现的数据返回给模版--template模版--渲染成html给用户
wsgi,是协议 ,不属于django,django利用wsgi写socket,请求来到wsig,协议规范wsig和django的程序规范,约束
wsgiref,python模块,是实现了wsgi协议的一个模块。模块本质:一个socket服务端(Django)性能低,测试用的
werkzeug ,是实现了wsgi协议的一个模块。模块本质:一个socket服务端(Flask框架)
tornado ,是实现了wsgi协议的一个模块。模块本质:本身写的soket,也能够用wsgi的,一个socket服务端(tornado框架)
uwsgi,是实现了wsgi协议的一个模块。模块本质:一个socket服务端 (Django)线上部署
请求--wsgi--中间件--路由--as.view内部函数view--dispatch--封装,认证,权限,节流--反射--get,post,delete函数
- process_request - process_view - process_response - process_exception - process_render_template
-- 适用于统一全部请求批量作操做
实例:
-- 角色的权限控制 rbac
-- 用户认证
-- csrf
-- 访问给你随机字符串,再来的时候给我带过来 放生在 process view 方法
-- session
-- 请求进来拿随机字符串,去数据库拿到相关数据 request.session 就是基于这个中间件
-- 黑名单
-- 日志记录
a.认证流程
dispatch--封装request--initial--perform_authticate--request.user--循环authentication对象执行authenticate方法--反射函数
authenticate方法的三种返回值,报错,元祖(user对象,token对象),None
headers方法
b.权限流程
dispatch--封装request--initial--perform_authticate--循环执行permission的has_permission方法
has_permission方法的二中返回值,true,false
has_object_permisson方法
c.节流