【发布时间】:2019-04-22 19:02:22
【问题描述】:
我在 DRF 中有以下 4 个基于类的视图,用于对名为 Trips 的模型执行 CRUD 操作。
from rest_framework import generics
class TripCreateView(CreateAPIView):
#code that creates a Trip
class TripListView(ListAPIView):
#code that lists Trips
class TripDetailView(RetrieveAPIView):
#code that gives details of a Trip
class TripUpdateView(UpdateAPIView):
#code that updates a particular trip details
class TripDeleteView(DestroyAPIView):
#code that deletes an instance
现在为了将 url 连接到每个视图,我的 urls.py 看起来像这样:
urlpatterns = [
url(r'^trip/$', TripCreateView.as_view()),
url(r'^trip/list/$',TripListView.as_view()),
url(r'^trip/(?P<pk>[0-9]+)/detail/$', TripDetailView.as_view()),
url(r'^trip/(?P<pk>[0-9]+)/update/$', TripUpdateView.as_view()),
url(r'^trip/(?P<pk>[0-9]+)/delete/$', TripDeleteView.as_view())
]
这按预期工作。但是,很明显,这些 API 端点设计不佳,因为 URI 中也包含 http 方法。 RESTFUL API 端点在 URI 中没有 HTTP 方法,如下所示:
Endpoint HTTP METHOD Result
trips GET Gets all Trips
trips/:id GET Gets details of a Trip
trips POST Creates a Trip
trips/:id PUT Updates a Trip
trips:/id DELETE Deletes a Trip
我知道 Viewsets 可以帮助实现这一点,但由于某些其他限制,我无法使用它们。这可以通过使用我正在使用的基于类的视图来实现吗?
【问题讨论】:
-
但这正是视图集的用途。什么“其他限制”?
-
@Daniel Roseman..如何在视图集中为不同的方法(如列表、创建等)使用不同的权限类?
-
您可以创建一个custom permissions class,或者您可以在您的子类中定义这些方法并在调用超级方法之前检查权限。
标签: python django django-rest-framework django-urls django-rest-viewsets