方法一 系统: 1)AllowAny:允许所有用户,校验方法直接返回True 2)IsAuthenticated:只允许登录用户 必须request.user和request.user.is_authenticated都通过 3)IsAuthenticatedOrReadOnly:游客只读,登录用户无限制 get、option、head 请求无限制 前台请求必须校验 request.user和request.user.is_authenticated 4)IsAdminUser:是否是后台用户 校验 request.user和request.user.is_staff is_staff(可以登录后台管理系统的用户) 方法二 自定义:基于auth的Group与Permission表 1)自定义权限类,继承BasePermission,重写has_permission 2)has_permission中完成 拿到登录用户 user <= request.user 校验user的分组或是权限 前两步操作失败 返回False => 无权限 前两步操作成功 返回True => 有权限
# 以上是drf源码内容,下面为自定义方法
必须继承BasePermission,必须实现has_permission
utils/permission.py
from rest_framework.permissions import BasePermission
class MyPermission(BasePermission):
message = ‘必须是管理员才能访问‘
def has_permission(self, request, view):
if request.user.user_type != 1:
return False
return True
models.py
from django.db import models
class UserInfo(models.Model):
user_type_choices = [
(1, ‘普通用户‘),
(2, ‘VIP用户‘),
(3, ‘SVIP用户‘),
]
username = models.CharField(max_length=32)
password = models.CharField(max_length=32)
user_type = models.IntegerField(choices=user_type_choices, default=0)
# settings.py
‘DEFAULT_PERMISSION_CLASSES‘: [‘apps.api.utils.permisson.MyPermission‘]
class UserInfoView(APIView):
"""
用户信息
"""
permission_classes = [MyPermisson, ]
def get(self, request, *args, **kwargs):
print(request.user)
return HttpResponse(‘用户相关信息‘)
原文:https://www.cnblogs.com/SunshineKimi/p/14186011.html