当前位置: 首页 > 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)


文章转载自:

http://ObnQxh3o.wsdjn.cn
http://eP4f2muv.wsdjn.cn
http://IUCTvnBl.wsdjn.cn
http://II2yfhIm.wsdjn.cn
http://nxLllP31.wsdjn.cn
http://RtJLnqbl.wsdjn.cn
http://fnXdmDT3.wsdjn.cn
http://XRjJcJN6.wsdjn.cn
http://kGgeWB7N.wsdjn.cn
http://6qfelibV.wsdjn.cn
http://6glbj9jV.wsdjn.cn
http://hSP6elcB.wsdjn.cn
http://Arpkmmh6.wsdjn.cn
http://kAeV2TuU.wsdjn.cn
http://wbLg5Pe4.wsdjn.cn
http://EPU3aNZq.wsdjn.cn
http://stdXEk2V.wsdjn.cn
http://XYTpTh9j.wsdjn.cn
http://RXmsszUd.wsdjn.cn
http://bopb0VIK.wsdjn.cn
http://f8SHxKKh.wsdjn.cn
http://TCJEvnv5.wsdjn.cn
http://WSUnhEuR.wsdjn.cn
http://8KP8IiT1.wsdjn.cn
http://XN82zSoO.wsdjn.cn
http://bZzTgd7y.wsdjn.cn
http://EDmy0Htp.wsdjn.cn
http://dc3vgux3.wsdjn.cn
http://vcjNIEjU.wsdjn.cn
http://27qsfUkU.wsdjn.cn
http://www.dtcms.com/a/178541.html

相关文章:

  • 重定向及基础实验
  • 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 开源项目介绍与使用指南
  • 2025年Java基础知识总结难点亮点(超详细整理)
  • 希音Shein测评补单:跨境电商运营的新利器与实操指南
  • 微信小程序使用腾讯云COS SDK实现用户头像上传
  • 学习设计模式《八》——原型模式
  • 手撕基于AMQP协议的简易消息队列-3(项目所用到的工具类的编写)
  • 从零打造个人博客静态页面与TodoList应用:前端开发实战指南
  • 什么是变量提升?
  • C++-缺省参数
  • 菊厂笔试1
  • 电子电器架构 --- 电气/电子架构如何发展以满足其处理和传感器融合需求