มีวิธีที่ดีกว่าในการสร้าง Django REST Web Service หรือไม่

ฉันยังใหม่กับ Python Django - เพิ่มเติมจากคำถามของฉัน

ฉันสร้าง REST Web Service แต่ฉันไม่พอใจกับโค้ดของฉันเลย แต่ฉันไม่พบวิธีแก้ปัญหาที่ดีกว่านี้ จำเป็นหรือไม่ที่จะต้องสร้างคลาสใหม่สำหรับแต่ละส่วน 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)

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")
...

person michael-mammut    schedule 24.05.2017    source แหล่งที่มา


คำตอบ (1)


ไม่ คุณไม่จำเป็นต้องสร้างคลาสใหม่สำหรับ URL ใหม่ สิ่งที่คุณต้องการคือการดำเนินการใหม่ในชุดวิวของคุณ

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

มุมมอง.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

ตรวจสอบคำถามนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับ @detail_route vs @list_route

จากนั้นคุณสามารถเรียกมันได้ด้วยการร้องขอไปที่ movements/register

person Taras Matsyk    schedule 24.05.2017
comment
ขอขอบคุณสำหรับการตอบกลับที่รวดเร็วมาก มีข้อผิดพลาดเกิดขึ้นและทำให้ฉันมีคำถามต่อไปนี้: ฉันได้รับข้อผิดพลาดในการเปลี่ยนรายการ urls.py เป็น ` url(r'^movements/', views.MovementDirection.as_view({'get': 'on'})),` และลบคำอธิบายประกอบ ข้อผิดพลาดคำอธิบายประกอบคือ NameError: name 'list_route' is not defined และข้อผิดพลาดอื่น ๆ คือต้องระบุอาร์กิวเมนต์ TypeError: The actions` เมื่อเรียกใช้ .as_view() บน ViewSet เช่น .as_view({'get': 'list'}) - person michael-mammut; 24.05.2017
comment
ข้อผิดพลาดคำอธิบายประกอบ --> ตรวจสอบแล้ว ;) --> การนำเข้าหายไป - person michael-mammut; 24.05.2017
comment
คุณต้องนำเข้า list_route จาก rest_framework.decorators ฉันไม่แน่ใจว่ามันใช้ได้กับ ViewSet หรือไม่ บางทีฉันอาจทำให้คุณเข้าใจผิดกับคำตอบของฉัน - person Taras Matsyk; 24.05.2017
comment
ดี .. เพื่อให้ปัญหานี้เสร็จสิ้นมีขั้นตอนของฉัน url(r'^movements/on/$', views.MovementDirection.as_view({'get':'on'})), url(r'^movements/off/$', views.MovementDirection.as_view({'get':'off'})), ฉันกำหนด URL สำหรับแต่ละ URL ย่อย และเพิ่มวิธีการให้กับคำอธิบายประกอบแต่ละรายการ @detail_route(methods=['get']) ในไฟล์ views.py - person michael-mammut; 25.05.2017