当前位置: 首页 > news >正文

rest_framework学习之认证 权限

权限

DRF提供如下几种常见权限:

IsAuthenticated, 认证通过

IsAdminUser, 管理员权限

IsAuthenticatedOrReadOnly, 登录用户增删改 非登录用户只能查询

AllowAny,无需认证(默认)

在rest_framework的APIView基础类中,对认证与权限做了更高级的封装,如下:

class APIView(View):# The following policies may be set at either globally, or per-view.authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSESpermission_classes = api_settings.DEFAULT_PERMISSION_CLASSES

如果需要单独设置

from django.conf import settings
from rest_framework.authtoken.models import Token
from rest_framework.decorators import api_view,authentication_classes,permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework import status,generics,viewsets
#from rest_framework import permissions
from rest_framework.authentication import BasicAuthentication,SessionAuthentication,TokenAuthentication
from .models import Course
from .serializers import CourseSerializer
from rest_framework.views import APIView

fbv 方式

##函数式编程
@api_view(['GET','POST'])
@authentication_classes((BasicAuthentication,SessionAuthentication,TokenAuthentication))
@permission_classes((IsAuthenticated,))
def course_list(request):

cbv  gcbv viewsets 方式

# 类视图 Class Based View
class CourseList(APIView):authentication_classes = 
(BasicAuthentication,SessionAuthentication,TokenAuthentication)
permission_classes = ((IsAuthenticated))def get(self,request):print(self.request.user,self.request.auth)

自定义权限

 新建文件permissions.py

from rest_framework import permissionsclass IsOwnerReadOnly(permissions.BasePermission):#只允许对象的所有者能编辑def has_object_permission(self, request, view, obj):"""所有的request 都有读权限:param request::param view::param obj::return:"""#if request.method in ("GET","HEAD","OPTIONS"):if request.method in permissions.SAFE_METHODS:return True#对象的所有这才有写权限return obj.teacher == request.user   #gcbv

加入到views.py 文件

class GCourseDetail(generics.RetrieveUpdateDestroyAPIView):queryset = Course.objects.all()serializer_class = CourseSerializerpermission_classes = (IsAuthenticated,IsOwnerReadOnly)# DRF 视图集 viewsets
class CourseViewSet(viewsets.ModelViewSet):queryset = Course.objects.all()serializer_class = CourseSerializerpermission_classes = (IsAuthenticated, IsOwnerReadOnly)def perform_create(self, serializer):serializer.save(teacher= self.request.user)

相关文章:

  • 重定向及基础实验
  • Python变量作用域
  • [学习]RTKLib详解:ephemeris.c与rinex.c
  • 如何修复WordPress数据库
  • Vscode (Windows端)免密登录linux集群服务器
  • Linux中的防火墙
  • 【Linux学习笔记】基础IO之理解文件
  • 学成在线之缓存
  • 【金仓数据库征文】金仓数据库 KES:MySQL 迁移实用指南
  • 服务器数据恢复—Linux操作系统服务器意外断电导致部分文件丢失的数据恢复
  • 《运维那些事儿》专栏总目录(持续更新)
  • 如何解决 Linux 系统文件描述符耗尽的问题
  • vue2 结合后端预览pdf 跨域的话就得需要后端来返回 然后前端呈现
  • vue中scss使用js的变量
  • uniapp上架苹果APP Store踩雷和部分流程注意事项(非完整流程)
  • uniapp|实现多终端聊天对话组件、表情选择、消息发送
  • CSS3 过渡与动画
  • XML简单介绍
  • 2.2 点云数据存储格式——通用型点云存储格式
  • DUNE 开源项目介绍与使用指南
  • 中华人民共和国和俄罗斯联邦在纪念中国人民抗日战争、苏联伟大卫国战争胜利和联合国成立80周年之际关于进一步深化中俄新时代全面战略协作伙伴关系的联合声明
  • 迪拜金融市场CEO:2024年市场表现出色,超八成新投资者来自海外
  • 商务部再回应中美经贸高层会谈:美方要拿出诚意、拿出行动
  • 保利发展前4个月销售额约876亿元,单月斥资128亿元获4个项目
  • 首家股份行旗下AIC来了,兴银金融资产投资有限公司获批筹建
  • 外交部:应美方请求举行贸易代表会谈,中方反对美滥施关税立场没有变化