Skip to main content
 首页 » 编程设计

python之坚持创建 Django REST Framework ViewSet

2025年05月04日32lyhabc

我一直在努力弄清楚如何创建 Django REST Framework ViewSet。

我继承的 API 调用如下所示:

/api/v1/user/<user_id>/like_count 
/api/v1/user/<user_id>/friends/ 
/api/v1/user/login 
/api/v1/user/logout/ 

在我的基本 urls.py 中,我有以下内容:

urlpatterns = patterns('', 
    url(r'^api/v1/', include('api.urls')),  
    url(r'^$', TemplateView.as_view(template_name='base.html'), name='home'), 
    url(r'^docs/', include('rest_framework_swagger.urls')) 
) 

我有一个名为 api 的应用程序。在 api urls.py 中我有:

from django.conf.urls import url, include 
from rest_framework import routers 
from api import views 
 
router = routers.DefaultRouter() 
router.register(r'user', views.UserViewSet)  
 
urlpatterns = [ 
    url(r'^', include(router.urls)), 
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) 
] 

在我的 api/views.py 文件中,我想创建一个 UserViewSet 类来处理 url 调用的所有可能变体。

首先我不知道我是否应该使用:

class UserViewSet(viewsets.ModelViewSet): 

或者...

class UserViewSet(APIView): 

如果我理解正确我可以满足

/api/v1/user/login 
/api/v1/user/logout  

使用类似的方式调用:

class UserViewSet(viewsets.APIView): 
    def login(self, request, format=None): 
        ... 
    def logout(self,request, format=None): 

但我不知道如何满足具有 <user-id> 的其他变体在网址中。

有推荐的方法吗?

有些 API 调用有尾随“/”,有些则没有。这是我得到的(以适应现有的移动应用程序)。

编辑:顺便说一下,我已经完成了两次 DRF 教程,但仍然看不出如何做到这一点。

EDIT2:我真的很难理解这方面的 DRF 文档。谁能提供一些处理我的用例的示例代码?

请您参考如下方法:

使用 ViewSet或 View s 将取决于除了 url 中的那些操作之外,您还需要对用户资源执行哪些其他操作。 ModelViewSet 由用于列表、更新等的 mixins 构建。您可以将它们组合起来以实现您想要的,或者您可以只使用 View 的组合。

当然,如果需要,您可以将 View 集与 View 结合起来。

对于 /api/v1/user/<user_id>/friends/端点你可以看看DRF docs或在 DRF Nested Routers .

like_count可以使用仅返回单个值的 View 来实现。

Auth 完全是一个不同的话题---你可以看看this .