有没有更好的方法来创建Django REST Web服务?

时间:2017-05-24 19:47:58

标签: python django rest django-rest-framework

我是Python Django的新手 - 我的问题更进一步。

我创建了一个REST Web服务,但我对我的代码完全不满意,但我找不到更好的解决方案。是否真的有必要为每个新的URL部分创建新类?如果没有,我怎样才能找到解决这个问题的更好方法?

urls.py

urlpatterns的

 = [
    url(r'^admin/', admin.site.urls),
    url(r'^movement/$', views.MovementDirection.as_view()),
    url(r'^movement/on/$', views.On.as_view()),
    url(r'^movement/off/$', views.Off.as_view()),
    url(r'^movement/stop/$', views.Stop.as_view()),
    url(r'^movement/forward/$', views.Forward.as_view()),
    url(r'^movement/backwards/$', views.Backward.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)

views.py

...
#movement/forward
class Forward(APIView):
    def get(self, request):
        print("FORWARD")
        # engine control
        return Response("Forward")

#movement/backwards
class Backward(APIView):
    def get(self, request):
        print("BACKWARD")
        # engine control
        return Response("Backward")
...

1 个答案:

答案 0 :(得分:5)

不,您不必为新网址创建新类,您需要的是视图集中的新操作。

url(r'^movements/$', views.MovementDirection.as_view()),

views.py

class MovementDirection(ModelViewSet): # please notice the class
    @list_route
    def register(self, request):
        # you can make it on a whole endpoint
        # or on a single instance by using @detail_route

检查this question以获取有关@detail_route vs @list_route

的更多信息

然后,您可以通过movements/register

的请求来调用它