Ald*_*und 8 python django django-rest-framework
如何创建一个资源,其中/ user/me url端点将指向当前用户并且行为与/ user/<userid>完全相同(例如,对/ user/me执行的所有post,put,delete请求应该以相同的方式工作as/user/<userid>).我看到有一个@detail_route装饰器用于自定义路由,但似乎在其中我将需要在那里复制代码,对于每个单独的请求方法,这似乎不是一个好的选择.我只需要为当前用户创建一个别名.我在谈论ModelViewSet
我还没有测试过,因为我自己没有使用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)),
]
Run Code Online (Sandbox Code Playgroud)
在您的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()
Run Code Online (Sandbox Code Playgroud)
同样,这完全未经测试,也完全是理论上的,但是这种方法应该可以工作。
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |