5:Django-DRF-权限
权限
好比如普通用户和会员的区别,会员可以访问更多的内容,因为会员的权限是比普通用户的多
登录成功以后,超级用户可以做什么事,普通用户可以做什么事
超级用户可以查看某些接口,普通用户不能查看等
一、表模型
from django.db import models
from django.contrib.auth.models import AbstractUser # django的用户表
class User(models.Model):
username = models.CharField(max_length=16)
password = models.CharField(max_length=16)
user_type = models.IntegerField(choices=((1, '超级用户'), (2, '普通用户')))
二、自定义权限类
自定义一个类,并继承BasePermission
重写has_permission方法
在方法内些权限认证条件
# 自定义权限
from rest_framework.permissions import BasePermission # 权限
from rest_framework.exceptions import AuthenticationFailed # 错误信息
class SuperPermission(BasePermission): # 自定义权限类需要继承BasePermission
def has_permission(self, request, view): # 重写has_permission方法,在方法内写限制条件
print(request.user)
if request.user.user_type == 1: # 权限条件
return True # 权限通过返回True
else:
return False # 否则返回false
三、使用
局部
# 查询所有数据
class BookView(APIView):
authentication_classes = [Auth_login.authlogin, ] # 局部启用认证功能
permission_classes = [Auth_login.SuperPermission,] # 局部启用权限功能
def get(self,request):
return Response('获取数据成功')
全局
在settings.py文件配置
REST_FRAMEWORK = {
"DEFAULT_PERMISSION_CLASSES": ["app01.Auth_login.SuperPermission", ]
}
局部禁用
在想禁用的视图类上
permission_classes = []