我目前有用户使用ModelViewSet进行CRUD操作的路由。
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer但是,我希望有类似于Instagram用户的端点:https://www.instagram.com/developer/endpoints/users/
两者都有相同的CRUD操作,除了一个是使用request.user (如果登录)。
我该怎么做呢?使用ModelViewSet和SimpleRouter?
谢谢。
发布于 2015-12-24 05:41:27
它更好地使用不同的视图集
/users/{user-id} - PublicProfileViewset
/users/self - MyProfileViewSet原因是两种视图都处理不同的权限和不同的查询集。例如,任何人都可以在不登录的情况下访问PublicProfileViewset。但是,只有登录用户才能访问MyprofileViewset。它类似于公众档案和你自己的github简介。
对于PublicProfileViewset,,您可以简单地使用路由器。不幸的是,我不知道如何为MyProfileViewset使用简单的路由器,因为这里的用户对象是从request对象本身获取的,就像request.user一样
views.py
class PublicUserProfileViewSet(viewsets.ReadOnlyModelViewSet):
"""
Public end-points to get information about any user
NOTE: All end-points provided here is read-only
"""
queryset = User.objects.public()
serializer_class = UserSerializer
permission_classes = (permissions.AllowAny,)
lookup_field = 'user_id'
lookup_url_kwarg = 'pk'
class MyProfileViewSet(viewsets.ModelViewSet):
"""
End-points to get all details about logged in user
and update the profile of logged in user
"""
queryset = User.objects.all()
permission_classes = (permissions.IsAuthenticated,)
serializer_class = UserSerializerurls.py
router = routers.SimpleRouter()
router.register(r'users', PublicProfileViewSet)
urlpatterns = router.urls
urlpatterns += [
url(r'^users/me/$', MyProfileViewSet.as_view(
{'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'delete'}),
name='myprofile'),
]https://stackoverflow.com/questions/34445763
复制相似问题