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

如何在django restframework中反转ViewSet的自定义操作的URL

在Django Rest Framework中,可以通过自定义ViewSet的操作来实现URL的反转。URL反转是指根据视图函数或视图类的名称,生成对应的URL。

要在Django Rest Framework中反转ViewSet的自定义操作的URL,可以按照以下步骤进行操作:

  1. 首先,在ViewSet中定义自定义操作。例如,我们定义一个名为"custom_action"的自定义操作:
代码语言:python
复制
from rest_framework.decorators import action
from rest_framework.response import Response

class MyViewSet(viewsets.ViewSet):
    # 其他默认操作...

    @action(detail=False, methods=['get'])
    def custom_action(self, request):
        # 自定义操作的逻辑...
        return Response({'message': 'Custom action executed'})
  1. 在urls.py文件中配置URL路由。使用router.register()方法注册ViewSet,并使用@action装饰器为自定义操作生成URL。注意,这里的basename参数需要设置为ViewSet的名称:
代码语言:python
复制
from django.urls import include, path
from rest_framework import routers

router = routers.DefaultRouter()
router.register(r'myviewset', MyViewSet, basename='myviewset')

urlpatterns = [
    path('', include(router.urls)),
]
  1. 现在,可以使用reverse()函数来反转自定义操作的URL。在视图函数或视图类中,通过调用reverse()函数并传递自定义操作的名称和ViewSet的名称,可以获取到对应的URL:
代码语言:python
复制
from django.urls import reverse

# 在视图函数或视图类中使用reverse()函数反转URL
url = reverse('myviewset-custom_action')

以上就是在Django Rest Framework中反转ViewSet自定义操作URL的方法。通过定义自定义操作,并在URL路由中注册和配置,然后使用reverse()函数进行URL反转,可以方便地生成自定义操作的URL。

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

相关·内容

Rest_framework Route

SimpleRouter类源码 总结 Rest_framework Router 路由器 虽说django rest_framework是基于djangourl路由到视图主要还是利用django...dispatcher路由系统(可以参考我另一篇关于django url dispatcher详解),但是rest_framework还在django路由基础上,提供了基于restful风格更高等级路由方式...下面就结合一条route就定义了产生实际url路由和相应url操作映射。 ViewSet结合Router,自动生成url。...# 关键:遍历路由,处理每条路由中方法,是否viewset定义,只有viewset定义了才会放入新mapping。...通过源码解析,我们就懂得了怎么利用Router路由器类来定制化和简化我们一些经常要做工作,也提供了可自定义接口给我们。 认识Router就要清晰认识 4路由类型 和 其设计原理模式。

1.1K10

RESTful源码笔记之RESTful FrameworkAPIview, Viewset总结分析

APIView对django本身View进行封装,从上述代码,这样分析,两者差别看起来不是很大,但实际APIView做了很多东西,它定义了很多属性与方法,举几个例子 # 这三个是常用属性...,课程名字,老师,封面等等,但当获取课程具体信息,我们还要将他们章节以及相关下载资料(很明显,章节是另外一个model,有一个外键指向course),这些信息会很多,在获取课程列表,将这些传回去显然是不理智...# 只需要加入一次 url(r'^', include(router.urls)),] route中使用一定要是ViewSet,用router.register方法注册url不仅可以很好管理...url,不会导致url过多而混乱,而且还能实现http方法与mixins相关方法进行连接。...在viewset,还提供了两个以及与mixins绑定好ViewSet,当然,这两个ViewSet完全可以自己实现: class ReadOnlyModelViewSet(mixins.RetrieveModelMixin

1K10

django rest framework通用view

APIView对django本身View进行封装,从上述代码,这样分析,两者差别看起来不是很大,但实际APIView做了很多东西,它定义了很多属性与方法,举几个例子 # 这三个是常用属性...,课程名字,老师,封面等等,但当获取课程具体信息,我们还要将他们章节以及相关下载资料(很明显,章节是另外一个model,有一个外键指向course),这些信息会很多,在获取课程列表,将这些传回去显然是不理智...# 只需要 url(r'^', include(router.urls)),] route中使用一定要是ViewSet,用router.register方法注册url不仅可以很好管理url...,不会导致url过多而混乱,而且还能实现http方法与mixins相关方法进行连接。   ...在viewset,还提供了两个以及与mixins绑定好ViewSet,当然,这两个ViewSet完全可以自己实现: class ReadOnlyModelViewSet(mixins.RetrieveModelMixin

1K20

测试开发进阶(二十九)

/put/delete等请求方法,而只支持action动作 但是 ViewSet没有提供 get_object(), get_serializer等方法 继承 viewsets.GenericViewSet... View DRF APIView GenericAPIView mixins扩展类 CreateAPIView(合并拓展类) 视图集 action和请求方法映射 ViewSet GenericViewSet...为视图集「不要加as_view」 将自动生成路由添加到列表 from django.urls import path, includefrom projects import viewsfrom rest_framework...参数用于指定该动作支持请求方法,默认为get detail用于指定该动作要处理是否为详情资源对象「url是否需要传递pk值」 在 url.py添加 path('project/names/', views.ProjectsViewSet.as_view...urlpath url路径名 urlname url别名「应用名称-url_name」 测试 $ http :8000/projects/names/ ?

63810

浅谈django不使用restframework自定义接口与使用区别

django可以使用restframework快速开发接口,返回前端所需要json数据,但是有时候利用restframework开发接口并不能满足所有的需求,这时候就需要自己手动开发接口,也就是将需要用到某些对象转化为需要使用...一张问卷包含不同问题,一个问题可以设置不同选项,自定义接口可以实现查看所有或单个问卷标题与id,可以查看所有或单个问题所属问卷,问题标题,问卷选项。...1.定义我们需要模型类,并且在对应模型类定义对应将对象转化为字典函数 from django.db import models class Questionnaire(models.Model...获取单个问卷对象通过传递id查看到指定问卷对象,再通过自定义函数将对象转化为字典数据,最后返回单个问卷对象json数据。...以上这篇浅谈django不使用restframework自定义接口与使用区别就是小编分享给大家全部内容了,希望能给大家一个参考。

76730

django-rest-framewor

DRF(Django RestFramework)是一套基于Django开发、帮助我们更好设计符合REST规范Web应用一个Django App,所以,本质上,它是一个Django App。...2 解析器组件 (用来解析数据请求组件)   Django并不能处理请求协议为application/json编码协议数据   注意: DRF解析器会封装到Viewparsers内,在视图函数被调用时...定义:需要为post新增url,因为根据规范,url定位资源,http请求方式定义用户行为 定义post方法:在视图类定义post方法 开始序列化:通过我们上面定义序列化类,创建一个序列化对象,传入参数...进行接口逻辑优化     导入模块 from rest_framework.viewset import ModelViewSet     设计url re_path(r'books/$, views.BookView.as_view...程序启动,开始初始化,获取配置信息,获取视图类并加载到内存,获取url及视图类对应关系 开始绑定视图类和url对应关系,执行as_view()方法 as_view()方法被执行时候传递了参数,为字典形式

1.5K10

Flask框架在Python面试应用与实战

一、常见面试问题核心组件与工作流程视图(Views):解释视图在DRF作用,介绍基于类视图(ViewSet、GenericViewSet)与视图集(ViewSets)概念,以及如何关联到URL。...路由与URL配置路由器(Router):说明路由器如何根据ViewSet自动创建API路由,以及如何自定义路由命名和视图动作。...版本控制:讨论DRF实现API版本控制方法,URL路径版本、请求头版本等。...权限控制与认证权限(Permissions):概述DRF权限系统,列举常用权限类(IsAuthenticated、IsAdminUser等),并展示如何自定义权限。...异常处理:介绍如何使用DRF异常体系(PermissionDenied、NotAuthenticated、ValidationError等)处理错误情况,并自定义异常响应。

10010

Python进阶42-drf框架(四)

:基于auth认证规则 Django框架采用是RBAC认证规则,RBAC认证规则通常分为三表规则、五表规则,Django采用是六表规则 三表规则: 1.用户表 2.角色表 3.权限表 五表规则...6.用户权限关联表 ---- 自定义权限六表 settings.py ## 配置自定义user表 AUTH_USER_MODEL = 'api.User' models.py from django.db...,代表有权限,返回True ii.不满足设置用户条件,代表有权限,返回False """ 频率组件 ---- 频率类源码 入口 # 1)APIViewdispath方法 self.initial...# 3) 在settings配置文件,配置drfDEFAULT_THROTTLE_RATES,格式为 {scope字符串: '次数/时间'} # 4) 在自定义频率类重写 get_cache_key...,作为操作缓存key return 'throttle_%(scope)s_%(ident)s' % {'scope': self.scope, 'ident': mobile} --

1.6K20

Django Serializer HiddenField隐藏字段实例

Django rest_framework serializer.HiddenField(default=serializer.CurrentUser()) 在用Dajngo RestFramework...时, 有时候需要这么一个场景,前端不需要传一个或多个字段,这些字是直接根据用户登录信息判断自动赋值,如果用mixin和viewset进行搭配写接口,要么重写create, update等方法,要么就是在...elif self.action == 'retrieve': return GameReadSerializer else: return GameSerializer 补充知识:drf serializers.HiddenField...serializer_field): self.object_flow = serializer_field.context['request'].data.get('object_flow') # 这里需要在views传进去呀...(default=0) # 默认新增时给status赋初值 class Meta: model = Holiday exclude = ('deleted',) 以上这篇Django Serializer

1.2K20

Django DRF路由与扩展功能实现

视图集与路由使用 使用视图集ViewSet,可以将一系列逻辑相关动作放到一个类: list() 提供一组数据 retrieve() 提供单个数据 create() 创建数据 update() 保存数据...destory() 删除数据 ViewSet视图集类不再实现get()、post()等方法,而是实现动作 action list() 、create() 等。...ViewSet主要通过继承ViewSetMixin来实现在调用as_view()时传入字典({‘get’:’list’})映射处理工作。...扩展功能 为了方便接下来学习,我们创建一个新子应用 opt python3 manage.py startapp opt 因为接下来功能需要使用到登录功能,所以我们使用django内置admin...可以在配置文件全局设置默认权限管理类,: REST_FRAMEWORK = { ....

3K30

Django rest-framework视图家族

基础上额外提供了三个方法和三个类属性,如果不配合视图工具类,则体现不出来优势所在 使用它好处:视图中增删改查逻辑其实大差不差,但操作资源不一致(操作资源指的是models模型类和序列化类),将资源形成配置...删除是真正删除 # 删除接口一般是自己实现重写到,因为真正业务不需要真正删除 pass # django源代码是真的删除 return...): pass 视图集 viewsets 重写as_view方法,增加action参数(可以完成路由层请求方法映射关系) 可以在路由层自定义请求方法映射关系 使用viewsets视图集类实现接口...配置对哪个表进行操作 配置使用哪个序列化类 可自定义路由层请求方法映射关系来实现接口 路由层 url(r'^v5/cars/$', views.ViewViewsetsAPIView.as_view...ViewSet视图类都可以注册,会产生'^v5/cars/$' 和 '^v5/cars/(?

74220

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

View:Django默认视图基类,负责将视图连接到URL,HTTP请求方法基本调度,之前写类视图一般都用这个。...GenericAPIView:对APIView更高层次封装,例如增加分页、过滤器 GenericViewSet:继承GenericAPIView和ViewSet ViewSet:继承APIView...,实现以下功能: 增加queryset属性,指定操作数据,不用再将数据传给序列化器,会自动实现。...,删除,查看 ViewSet类 GenericAPIView已经完成了许多功能,但会有一个问题,获取所有用户列表和单个用户需要分别定义两个视图和URL路由,使用ViewSet可以很好解决这个问题,并且实现了路由自动映射...migrate 全局urls.py配置认证接口URL: django_drf/urls.py from django.contrib import admin from django.urls import

4.3K10

【愚公系列】2022年04月 Python教学课程 71-DRF框架之内置路由

文章目录 一、路由 1.SimpleRouter 1.1 基本使用 1.2 合并使用 1.3 额外操作路由 2.DefaultRouter 一、路由 对于视图集ViewSet,我们除了可以自己手动指明请求方式与视图方法...viewset- 视图集类。 (可选)您还可以指定一个附加参数: basename- 用于所创建 URL名称基础。如果未设置,则将根据视图集属性(如果有)自动生成基名。...这些额外操作将包含在生成路由中。...例如,如果要将自定义操作 URL 更改为 ,则可以编写:^users/{pk}/change-password/$ from myapp.permissions import IsAdminOrIsSelf...例如: router = SimpleRouter(trailing_slash=False) 尾随斜杠在 Django 是约定俗成,但在其他一些框架( Rails)默认不使用。

92620

drf框架中所有视图及用法

0909自我总结 drf框架中所有视图及用法 一.drf框架所有视图类 from django.views import View from rest_framework import views,...generics, mixins, viewsets 最基础:django自带views类 drf框架中最基础视图类:views.APIView drf框架工具视图:generics GenericAPIView...({'get': 'retrieve', 'delete': 'remove_obj'}) GenericViewSet:与模型类有关接口视图集 - 可以从mixins那继承功能,也可以自定义功能 ViewSet...:与模型类无关或不是标准模型类接口 - 一般都是自定义功能 三.genericsGenericAPIView使用 将 queryset 和 serializer_class 封装成类属性,提供了三个方法...居然有什么方法看源码即可ctrl+左键看源码 六自定制视图 本来get他就只会找类get方法我们可以对其设置让他找我们对于名称 路由层 from django.conf.urls import url

1.8K30
领券