DRF - 为当前用户创建资源别名/我

时间:2016-03-15 14:17:04

标签: python django django-rest-framework

如何创建一个资源,该资源将具有指向当前用户的/ user / me url端点,其行为与/ user /<完全相同userid> (例如,对/ user / me执行的所有发布,放置,删除请求应与/ user /< userid>相同)。我看到有一个@detail_route装饰器用于自定义路由,但似乎在其中我将需要在那里复制代码,对于每个单独的请求方法,这似乎不是一个好的选择。我只需要为当前用户创建一个别名。 我在谈论ModelViewSet

1 个答案:

答案 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()

同样,这完全没有经过测试,而且完全是理论上的,但这类事情应该有效。