在文档中有自定义URL的方法示例:http: //www.django-rest-framework.org/tutorial/6-viewsets-and-routers
class SnippetViewSet(viewsets.ModelViewSet): ... @link(renderer_classes=[renderers.StaticHTMLRenderer]) def highlight(self, request, *args, **kwargs): snippet = self.get_object() return Response(snippet.highlighted)
此示例添加以下路由:
url(r'^snippets/(?P[0-9]+)/highlight/$', snippet_highlight, name='snippet-highlight'),
可以添加没有pk param的url,像这样吗?
r'^snippets/highlight/$'
Rahul Gupta.. 10
是的,你可以这样做.只需使用list_route
装饰器在视图集中添加您的方法即可.
from rest_framework.decorators import list_route class SnippetViewSet(viewsets.ModelViewSet): ... @list_route(renderer_classes=[renderers.StaticHTMLRenderer]) def highlight(self, request, *args, **kwargs): ...
它将添加一个没有pk
param 的url :
r'^snippets/highlight/$'
您甚至可以使用methods
装饰器中的参数指定它支持的方法.
http://www.django-rest-framework.org/api-guide/routers/#usage
该ViewSets文档提用action
装饰:
from rest_framework.decorators import action class SnippetViewSet(viewsets.ModelViewSet): ... @action(detail=False, methods=['GET'], name='Get Highlight') def highlight(self, request, *args, **kwargs): queryset = models.Highlight.objects.all() serializer = self.get_serializer(queryset, many=True) return Response(serializer.data)
然后只需更新您的queryset即可执行所需的任何操作。
这样做的好处是保留了序列化。
如果您urls.py
看起来像这样:
from django.contrib import admin from django.urls import path, include from rest_framework import routers from snippets import viewsets router = routers.DefaultRouter() router.register('snippets', viewsets.SnippetViewSet) urlpatterns = [ path('admin/', admin.site.urls), path('snippets/', include(router.urls)), ]
然后可以通过 http://localhost:8000/snippets/highlights
要查看的用法POST
或如何更改路由,请参阅docs路由器。
是的,你可以这样做.只需使用list_route
装饰器在视图集中添加您的方法即可.
from rest_framework.decorators import list_route class SnippetViewSet(viewsets.ModelViewSet): ... @list_route(renderer_classes=[renderers.StaticHTMLRenderer]) def highlight(self, request, *args, **kwargs): ...
它将添加一个没有pk
param 的url :
r'^snippets/highlight/$'
您甚至可以使用methods
装饰器中的参数指定它支持的方法.
http://www.django-rest-framework.org/api-guide/routers/#usage