django rest API 路由显示所有端点的相同 api 链接

标签 django django-rest-framework

我创建了一个小型任务应用程序并定义了一些终点,如所有任务、到期任务、已完成任务。

这是我的 url.py

#Define API Routes
router = routers.DefaultRouter()
#router = routers.SimpleRouter()
router.register(r'task', views.TaskViewSet)
router.register(r'due_task', views.DueTaskViewSet)
router.register(r'completed_task', views.CompletedTaskViewSet)

urlpatterns = [
    # Examples:
    # url(r'^$', 'TaskAPI.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^',include(router.urls)),
    url(r'^admin/', include(admin.site.urls)),
]

序列化器.py
class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model =  Task
        fields = ('id','task_name','task_desc','completed','date_created')

查看.py
class TaskViewSet(viewsets.ModelViewSet):

    queryset = Task.objects.all().order_by('-date_created')
    serializer_class = TaskSerializer

class DueTaskViewSet(viewsets.ModelViewSet):
    queryset = Task.objects.all().order_by('-date_created').filter(completed=False)
    serializer_class = TaskSerializer

class CompletedTaskViewSet(viewsets.ModelViewSet):
    queryset = Task.objects.all().order_by('-date_created').filter(completed=True)
    serializer_class = TaskSerializer

模型.py
class Task(models.Model):
    task_name = models.CharField(max_length=20)
    task_desc = models.TextField(max_length=200)
    completed = models.BooleanField(default=False)
    date_created = models.DateTimeField(auto_now=True)

当我运行服务器并点击 127.0.0.1:8080 API 路由窗口时,所有端点都将打开指向同一链接。

enter image description here

请建议这里出了什么问题。
谢谢

最佳答案

您可能需要指定可选的 base_name register() 中的参数方法。它通常是自动生成的。但是,相同的序列化程序和相对相似的查询集可能是您获得相同端点的原因。我想你想要这样的东西。

router.register(r'task', views.TaskViewSet, 'task')
router.register(r'due_task', views.DueTaskViewSet, 'due_task')
router.register(r'completed_task', views.CompletedTaskViewSet, 'completed_task')

根据docs :

If unset the basename will be automatically generated based on the queryset attribute of the viewset, if it has one. Note that if the viewset does not include a queryset attribute then you must set base_name when registering the viewset.

关于django rest API 路由显示所有端点的相同 api 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35848133/

相关文章:

django - 使用 Django Rest Framework 按降序忽略空值

django-rest-framework - django rest框架嵌套关系

python - 预期的 str、bytes 或 os.PathLike 对象,而不是 InMemoryUploadedFile

python - Django的manage.py本地化

python - csv 上传时自定义 Django 管理页面出错(对象没有属性 'model' )

python - 带 DRF 的 Django 过滤器 - 在使用相同查找应用多个值时如何处理 'and'?

python - 如何调试仅在生产中不起作用的ajax django View 功能

python - 如果电子邮件已确认,django jwt 会生成 token

'POST' 数据到 Django 服务器后,Javascript 获取 api 没有得到响应

django - 如何调整Django textarea的大小?