认证,权限,节流,解析器

通过as_view方法,执行dispatch函数,在dispatch函数中通过request的method方法,调用视图类的不同函数
as_view方法, 执行dispatch方法
继承rest framework 的APIView类APIView

继承了Django的View,并且重写了dispatch方法

认证,权限,节流,解析器_第1张图片
微信截图_20190507192303.png

封装request

request = self.initialize_request(request, *args, **kwargs)
self.request = request

执行initial方法

self.initial(request, *args, **kwargs)

封装的request返回一个Request类的实例对象

认证,权限,节流,解析器_第2张图片
图片.png

get_authenticators方法authentication_classes是一个放置认证类的列表,那么get_authenticators方法返回的就是认证类的实例化对象列表,传入到重写的request对象中

图片.png

执行initial方法perform_authentication函数

认证,权限,节流,解析器_第3张图片
图片.png

perform_authentication函数调用封装后的requestd对象的user

认证,权限,节流,解析器_第4张图片
图片.png

request.user方法调用了_authenticate方法

认证,权限,节流,解析器_第5张图片
图片.png

_authenticate方法self.authenticators其中self指的是封装后的request对象

认证,权限,节流,解析器_第6张图片
图片.png

权限控制可以限制用户对于视图的访问和对于具体数据对象的访问。在执行视图的dispatch()方法前,会先进行视图访问权限的判断在通过get_object()获取具体对象时,会进行对象访问权限的判断

可以在配置文件中设置默认的权限管理类,如
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
也可以在具体的视图中通过permission_classes属性来设置,如
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView
class ExampleView(APIView):
permission_classes = (IsAuthenticated,)

提供的权限

AllowAny 允许所有用户
IsAuthenticated 仅通过认证的用户
IsAuthenticatedOrReadOnly 认证的用户可以完全操作,否则只能get读取
设立一个全局变量字典,对于匿名用户,将用户的IP作为字典的键;对于登陆用户,将用户的用户名作为字典的键。设置字典的值为一个列表,列表中存储了用户访问的时间,可以通过对列表中的时间进行操作来控制访问频率


认证,权限,节流,解析器_第7张图片
图片.png

setting中的配置

认证,权限,节流,解析器_第8张图片
图片.png

如果使用URLPathVersioning,路由格式如下

url(r"^(?P[v1|v2]+)/version/",VersionView.as_view(),name='vvvv')

进行全局设置后,用的时候只需要用request.data就可以自动解析数据为Json格式

作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程


认证,权限,节流,解析器_第9张图片
图片.png

解析器的作用

根据请求头 content-type 选择对应的解析器对请求体内容进行处理。
有application/json,x-www-form-urlencoded,form-data等格式

settings.py 文件配置

认证,权限,节流,解析器_第10张图片
图片.png

局部使用

在view.py中设置


图片.png

在视图类加上

图片.png

你可能感兴趣的:(认证,权限,节流,解析器)