DRF知识点总结

DRF知识点总结

  • 说明
  • 一、View类解释(as_view,view,dispatch)
  • 二、getatter反射函数使用及解释
  • 三、super()父类函数
  • 四、类的初始化(js、python)
  • 五、APIView源码解释

说明

  1. View类解释(as_view,view,dispatch)
  2. getatter反射函数使用及解释
  3. super()父类函数
  4. 类的初始化(js、python)
  5. APIView源码解释

一、View类解释(as_view,view,dispatch)

  1. View流程结构
    View类—>as_view—>view—>dispatch
from django.views import View
class 类名(View):
	def method(request):
		return template
  1. as_view—>view函数
    路由中引入的是函数,path(str_path,自定义类名.as_view())
    其中as_view()返回的是view函数
def view(cls,request,*args,**kwargs):
	self = cls(*args,**kwargs)
	#cls是谁调用就是谁
	return self.dispatch(request,*args,**kwargs)
  1. 分发(dispatch)
def dispatch(self,request,*args,**kwargs):
	if(request.method.lower() in self.http_method_names):
		hander = getattr(self,request,request.method.lower(),self.http_method_not_allowed)
	else:
		hander = self.http_method_not_allowed #错误页面
	return hander(request,*args,**kwargs)

二、getatter反射函数使用及解释

  1. getatter功能
    是将字符串转化为属性、函数
  2. 使用方法
var = getattr(对象,属性字符串 | 函数字符串,找不到时调用它)
#等价于:对象.属性 | 函数

三、super()父类函数

  1. 功能:是调用父类
  2. 方法
super().父类属性

四、类的初始化(js、python)

作用是为类传值

  1. python
def __init__(self,var,....):
	self.var = var
	...
  1. js
constructor(var,...){
	thsi.var = var
}

五、APIView源码解释

APIView继承了View(django中的view),但重构了dispatch函数
APIView(view)—>as_view()—>view—>dispatch
重构了dispatch函数,做了三件事,

  1. 重写了request
request = initialize_request(self,*args,**kwargs)
self.request = request
self.initail(request,*args,**kwargs)#包含认证、权限、限流

在djagno中contentType

  • urlencode(x-www-form-urlencode)—>a=1&b=2—>request.POST能获取
  • JSON—>{a:1,b:2}—>request.POST不能获取

但重构后的request.data两种都能获取
在django获取url路由中的值是用request.GET,但在重构的request中用request.query_params获取
使用request._request获取原来的request

  1. 认证、权限、限流—initail
    认证—>ferform_authentication
    权限—>check_permisions
    限流—>check_throttles
  2. 重写反射分发(但与view的一样)

你可能感兴趣的:(Django2,python,python,django,开发语言)