我一直在努力弄清楚如何创建 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 .
