如何创建一个资源,该资源将具有指向当前用户的/ user / me url端点,其行为与/ user /<完全相同userid> (例如,对/ user / me执行的所有发布,放置,删除请求应与/ user /< userid>相同)。我看到有一个@detail_route装饰器用于自定义路由,但似乎在其中我将需要在那里复制代码,对于每个单独的请求方法,这似乎不是一个好的选择。我只需要为当前用户创建一个别名。 我在谈论ModelViewSet
答案 0 :(得分:5)
我没有对此进行过测试,因为我自己并没有使用ViewSets,但我相信你可以这样做:
在urls.py
:
from django.conf.urls import url
from rest_framework import routers
from . import views
router = routers.SimpleRouter()
router.register(r'users', views.UserViewSet)
urlpatterns = [
url(r'^users/me/$', views.UserViewSet.as_view(), kwargs={'pk': 'me'}),
url(r'^', include(router.urls)),
]
在views.py
:
from rest_framework import viewsets
from .models import User
from .serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
def get_object(self):
if self.kwargs.get('pk', None) == 'me':
self.kwargs['pk'] = self.request.user.pk
return super(UserViewSet, self).get_object()
同样,这完全没有经过测试,而且完全是理论上的,但这类事情应该有效。