认证,权限,节流,解析器
通过as_view方法,执行dispatch函数,在dispatch函数中通过request的method方法,调用视图类的不同函数
as_view方法, 执行dispatch方法
继承rest framework 的APIView类APIView
继承了Django的View,并且重写了dispatch方法
微信截图_20190507192303.png封装request
request = self.initialize_request(request, *args, **kwargs)
self.request = request
执行initial方法
self.initial(request, *args, **kwargs)
封装的request返回一个Request类的实例对象
图片.pngget_authenticators方法authentication_classes是一个放置认证类的列表,那么get_authenticators方法返回的就是认证类的实例化对象列表,传入到重写的request对象中
图片.png执行initial方法perform_authentication函数
图片.pngperform_authentication函数调用封装后的requestd对象的user
图片.pngrequest.user方法调用了_authenticate方法
图片.png_authenticate方法self.authenticators其中self指的是封装后的request对象
图片.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作为字典的键;对于登陆用户,将用户的用户名作为字典的键。设置字典的值为一个列表,列表中存储了用户访问的时间,可以通过对列表中的时间进行操作来控制访问频率
图片.png
setting中的配置
图片.png如果使用URLPathVersioning,路由格式如下
url(r"^(?P<version>[v1|v2]+)/version/",VersionView.as_view(),name='vvvv')
进行全局设置后,用的时候只需要用request.data就可以自动解析数据为Json格式
作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程
图片.png
解析器的作用
根据请求头 content-type 选择对应的解析器对请求体内容进行处理。
有application/json,x-www-form-urlencoded,form-data等格式
settings.py 文件配置
图片.png局部使用
在view.py中设置
图片.png