如何在API中正确匹配Django中的视图

Cab*_*ose 2 django rest model-view-controller django-rest-framework

我的问题归结为Django中REST和Views的最佳实践之一.我正在为我当前的项目重新编写REST api,其中包括稍微修改我们的视图(传统MVC中的Controller).目前,所有内容都通过POST请求进行隧道传输,即使是简单的GET也是如此.

从休息的角度来看,应该返回所有作业的列表,其中包含以下URL:

API /职位/

应该检索单个作业(ID为1):

API /职位/ 1

最后,这应该返回作为工作1一部分的所有任务

API /职位/ 1 /任务/

这是我用于新系统的理念,但我对实现感到不满.如果这两个都在Django中获得自己的View,或者一个视图应该同时处理它们.

目前我正在使用一个View,其中所有相关的URL都路由到它,这样的逻辑;

def get(self, request, id=None, task_id=None):

    if id is None:
        return Job.objects.all()  # This will be the LIST'
    if task_id is not None:
        return Job.objects.get(id=id).task_set.all()
    return Job.objects.get(id=id)
Run Code Online (Sandbox Code Playgroud)

如果增加更多复杂性,这似乎会导致非常复杂和冗长的视图.如果我想为其他资源的任务逻辑添加类似的逻辑,我会继续添加到视图中,还是应该每个都获得自己的View?

Kry*_*ček 5

Django 存在Rest Framework,它提供了休息视图,路由器,序列化器等.您应该主要查看Viewsets和路由器| Rest Framework正是您所需要的.