首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DRF自定义权限:允许'retrieve',拒绝'list‘

DRF自定义权限是指在Django REST Framework(DRF)中,开发者可以根据自己的需求自定义权限来控制API的访问权限。在这个问题中,我们需要实现一个自定义权限,允许用户执行'retrieve'操作,但拒绝执行'list'操作。

首先,我们需要创建一个自定义权限类,继承自DRF的BasePermission类。然后,我们可以重写该类的has_permission方法来实现我们的权限逻辑。具体代码如下:

代码语言:txt
复制
from rest_framework.permissions import BasePermission

class CustomPermission(BasePermission):
    def has_permission(self, request, view):
        if view.action == 'retrieve':
            return True
        elif view.action == 'list':
            return False
        else:
            return True

在上述代码中,我们通过判断view的action属性来确定请求的操作类型。如果操作是'retrieve',则返回True,允许访问。如果操作是'list',则返回False,拒绝访问。对于其他操作类型,我们返回True,表示允许访问。

接下来,我们需要在视图中应用这个自定义权限。假设我们有一个名为MyModel的模型,并且有一个名为MyModelViewSet的视图集。我们可以在视图集中添加permission_classes属性,将自定义权限类添加到其中。具体代码如下:

代码语言:txt
复制
from rest_framework.viewsets import ModelViewSet

class MyModelViewSet(ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
    permission_classes = [CustomPermission]

在上述代码中,我们将CustomPermission添加到permission_classes列表中,以应用自定义权限。

至此,我们已经完成了DRF自定义权限的实现。当用户发送请求时,DRF会根据自定义权限类的逻辑来判断是否允许访问。

关于腾讯云相关产品,推荐使用腾讯云的云服务器(CVM)来部署和运行Django REST Framework应用。腾讯云的云服务器提供高性能、可靠稳定的计算资源,适合承载Web应用和API服务。您可以通过以下链接了解更多关于腾讯云云服务器的信息:

腾讯云云服务器产品介绍:https://cloud.tencent.com/product/cvm

希望以上信息能对您有所帮助!如有更多问题,请随时提问。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

DRF进阶之DRF视图和常用功能

APIView:DRF提供的所有视图的基类,继承View并扩展,具备了身份认证、权限检查、流量控制等功能。...APIView类 APIView:DRF提供的所有视图的基类,继承View并扩展,具备了身份认证、权限检查、流量控制等功能 创建项目 创建app并加入settings.py E:\workspace\...ViewSet视图集不再实现get()、post()等方法,而是实现以下请求方法动作: list():获取所有数据 retrieve():获取单个数据 create():创建数据 update(...,create http://127.0.0.1:8000/myapp/api/user6/ #update, delete, retrieve DRF常用功能 主流认证方式 Session认证 HTTP...:基于Token的认证 RemoteUserAuthentication:基于远程用户的认证 DRF支持权限: IsAuthenticated:只有登录用户才能访问所有API AllowAny:允许所有用户

4.5K10

Django DRF路由与扩展功能的实现

视图集与路由的使用 使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() 保存数据...2.GenericViewSet 使用ViewSet通常并不方便,因为listretrieve、create、update、destory等方法都需要自己编写,而这些方法与前面讲过的Mixin扩展类提供的方法同名...在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object()获取具体对象时,会进行模型对象访问权限的判断 内置提供的权限: AllowAny 允许所有用户 IsAuthenticated...urlpatterns = [ path('auth1/', views.Demo1APIView.as_view()), path('auth2/', views.Demo2APIView.as_view()), # 自定义权限...path('auth3/', views.Demo3APIView.as_view()), ] opt下的views.py # 自定义权限 from rest_framework.permissions

3K30
  • DRF框架学习(四)

    def get_serializer_class(self): if self.action == 'list': # 返回list操作对应的序列化器类 elif self.action...在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object()获取具体对象时,会进行对象访问权限的判断 DRF框架提供了四个权限控制类: AllowAny允许所有用户...框架的默认权限控制如下: 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.AllowAny', # 允许所有人 ) 可以在配置文件中设置权限管理类...', # 仅仅允许认证用户进行访问 ) } 也可以在具体的视图中通过 permission_classes属性来指定某个视图所使用的权限控制类,如: from rest_framework.permissions...10.2自定义异常处理 10.2.1自定义DRF框架异常处理函数 1.自定义异常处理函数 2.设置EXCEPTION_HANDLER配置项 10.2.2详解 可以在DRF框架异常处理函数的基础上,补充一些其他的异常处理

    2.7K40

    重点内容回顾-DRF

    仅仅在该字段null=True,允许为null时可用。 2. related_name related_name是在定义模型类时,外键的一个选项。它的功能下面慢慢给大家分析一下。.../update/retrieve/destroy 2.在进行url配置的时候,要指明请求地址的请求方式和视图集中处理函数之间的对应关系。...如果视图集中只想提供listretrieve接口的时候,可以继承此父类。...page=&page_size= 视图关闭分页pagination_class = None 6.2异常处理 可以设置DRF框架的默认异常处理,也可以自定义异常处理函数。...权限:区分的是认证与未认证的用户。可以进行DRF框架默认全局权限设置,也可对其进行修改,还可以指定某个视图的权限控制设置,甚至可以自定义权限控制类。权限和认证通常是一起使用的。

    2.4K20

    Django REST framework+Vue 打造生鲜超市(八) 九、个人中心功能开发

    九、个人中心功能开发 9.1.drf的api文档自动生成和 (1) url #drf文档,title自定义 path('docs',include_docs_urls(title='仙剑奇侠传'...(2)drf文档的优点: 自动生成 文档里可以做交互和测试 可以生成js,shel和python代码段 (3)代码中注释的格式: ViewSet的格式,更多请看官方文档 class GoodsListViewSet...商品列表,分页,搜索,过滤,排序 retrieve: 获取商品详情 ''' (4)Description 添加字段的描述有三种方式: model的字段中加 serializer...#1.用户注册的时候不应该有权限限制 #2.当想获取用户详情信息的时候,必须登录才行 def get_permissions(self): if self.action...== "retrieve": return [permissions.IsAuthenticated()] elif self.action == "create

    96180

    drf的接口文档生成与管理

    class HostInfoViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet): """ list...: 返回主机列表数据 retrieve: 返回主机详情数据 latest: 返回最新的主机数据 read: 修改主机的访问记录 ""...2.5 补充说明 1、上面访问到的接口文档,可以按照右边的指引通过安装coreapi-cli,通过命令行操作访问接口文档 2、对于视图集ViewSet中的retrieve名称,在接口文档中叫做read...'rest_framework:login', 'LOGOUT_URL': 'rest_framework:logout', # 控制API列表的显示方式 None 所有操作均已折叠 list...cache_page 实现开箱即用的缓存功能, 只需要配置对应的参数即可启用, 对应参数解释如下: cache_timeout: 用于指定缓存的生存时间 cache_kwargs: 用于传递 cache_page 允许接受的非位置参数

    4.7K10

    DRF框架学习(三)

    DRF框架学习(三) 1.视图 1.1作用 1.控制序列化器的执行(数据检验、数据保存、转换数据(序列化操作)) 2.控制数据库的查询操作。...# 自定义一个GenericAPIView class MyGenericAPIView(APIView): queryset = None serializer_class = None...1.3.1扩展类5个详解 DRF框架提供了5个扩展类,封装了通用增删改查的流程。...(重要) 2.2注意点 1、视图集中的处理方法不再是以请求方式命名,而是以对应的操作名称(list、create、update、retrieve、destroy) 2、在进行url配置的时候,要指明请求地址的请求方式和视图集中处理函数之间的对应关系...2.3视图集父类 ViewSet: 继承自ViewSetMixin和APIView GenericViewSet: 使用ViewSet通常并不方便,因为listretrieve、create、update

    1.2K20

    Django REST Framework

    URL应该包含版本信息,版本信息也可以放在HTTP协议中 过滤信息,使用URL的参数代表过滤 返回值: 每一个返回代码都有具体特定含义 返回格式:推荐固定具体格式 DjangoRestFramework(DRF...:反序列化时必须输入,默认是True allow_null: 允许传入None validators: 使用验证器创建serializer对象/使用 构造方法 Serializer(instance...的请求和反馈类会引发并处理APIException在dispatch之前,会进行身份验证,权限检查,流量控制支持的属性有authentication_classes: 列表或者元祖,身份验证类 permisson_classes...: 进行权限验证throttle_classes:流量控制类对API的访问提供了一些方便HTTP-Method + 名词默认对HttpMethod常用方法提供了支持案例: views - StudentAPIView...ViewSet 把一系列操作打包放入一个类中 list:GET retrieve:GET + id destroy:DELETE update:UPDATE create:POST

    2.2K63

    Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发

    drf-extensions配置缓存 2.配置Redis缓存 四、DRF通过throttling设置api的访问速率 青,取之于蓝而青于蓝;冰,水为之而寒于水。...method='top_category_filter') def top_category_filter(self, queryset, name, value): '''自定义过滤...(DRF扩展),对DRF进行了很多方面的功能扩展,其中就包括缓存功能,Github地址为https://github.com/chibisov/drf-extensions,缓存caching的文档说明地址为...retrievelist方法,这主要是查询操作,对于新建、修改等操作一般是不能使用缓存的。...DRF自带了限速功能,直接使用throttling进行限速即可实现,throttling与权限类似,它决定是否应授权请求。

    2.2K10

    8.寻光集后台管理系统-用户管理(增删改查)

    然后权限之类的限制策略才可以使用这些凭证来确定是否应该允许请求。 身份验证始终在视图的最开始运行,在权限和限制检查发生之前,在任何其他代码被允许继续之前。...权限验证 与身份验证,限流一起,权限决定是否应该授予或拒绝访问请求。 权限检查总是在视图的最开始运行,在任何其他代码被允许继续之前。...权限检查通常会使用request.user和request.auth属性中的身份验证信息来确定是否应允许传入请求。 权限用于授予或拒绝不同类别的用户访问 API 的不同部分。...最简单的权限样式是允许任何经过身份验证的用户访问,而拒绝任何未经身份验证的用户访问。 如何确定权限 DRF权限始终定义为权限列表。在运行视图的主体之前,检查列表中的每个权限。...当权限检查失败时,将根据以下规则返回“403 Forbidden”或“401 Unauthorized”响应: 请求已成功验证,但权限拒绝。— 将返回 HTTP 403 Forbidden 响应。

    1.8K30

    django-rest-framewor

    DRF(Django RestFramework)是一套基于Django开发的、帮助我们更好的设计符合REST规范的Web应用的一个Django App,所以,本质上,它是一个Django App。...DRF APIView请求流程: ?   DRF对django视图配置流程图(个人画) ?...2 解析器组件 (用来解析数据的请求的组件)   Django并不能处理请求协议为application/json编码协议的数据   注意: DRF解析器会封装到View中的parsers内,在视图函数被调用时...,以为已经被重定向了 开始执行retrieve,有一行instance = self.get_object(), 该方法在GenericAPIView中 至关重要的是拿到self.kwargs中的pk关键字...  定义权限类: class UserPerms(): message = "您没有权限访问该数据" def has_permission(self, request, view):

    1.6K10
    领券