首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Rest框架中的/users/self & /users/{id}路由

Django Rest框架中的/users/self & /users/{id}路由
EN

Stack Overflow用户
提问于 2015-12-24 00:36:51
回答 1查看 936关注 0票数 1

我目前有用户使用ModelViewSet进行CRUD操作的路由。

代码语言:javascript
复制
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

但是,我希望有类似于Instagram用户的端点:https://www.instagram.com/developer/endpoints/users/

  • /user/{user-id}
  • /用户/自我

两者都有相同的CRUD操作,除了一个是使用request.user (如果登录)。

我该怎么做呢?使用ModelViewSet和SimpleRouter?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-12-24 05:41:27

它更好地使用不同的视图集

代码语言:javascript
复制
/users/{user-id} - PublicProfileViewset
/users/self - MyProfileViewSet

原因是两种视图都处理不同的权限和不同的查询集。例如,任何人都可以在不登录的情况下访问PublicProfileViewset。但是,只有登录用户才能访问MyprofileViewset。它类似于公众档案和你自己的github简介。

对于PublicProfileViewset,,您可以简单地使用路由器。不幸的是,我不知道如何为MyProfileViewset使用简单的路由器,因为这里的用户对象是从request对象本身获取的,就像request.user一样

views.py

代码语言:javascript
复制
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 = UserSerializer

urls.py

代码语言:javascript
复制
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'),
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34445763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档