mic*_*mut 1 python django rest django-rest-framework
我是Python Django的新手 - 我的问题更进一步.
我创建了一个REST Web服务,但我对我的代码完全不满意,但我找不到更好的解决方案.是否真的有必要为每个新的URL部分创建新类?如果没有,我怎样才能找到更好的方法解决这个问题?
urls.py
URL模式
= [
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)
Run Code Online (Sandbox Code Playgroud)
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")
...
Run Code Online (Sandbox Code Playgroud)
不,您不必为新网址创建新类,您需要的是视图集中的新操作.
url(r'^movements/$', views.MovementDirection.as_view()),
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
有关@detail_route vs @list_route的更多信息,请查看此问题
然后你可以通过请求来调用它 movements/register