我创建了一个小型任务应用程序并定义了一些终点,如所有任务、到期任务、已完成任务。
这是我的 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 路由窗口时,所有端点都将打开指向同一链接。
请建议这里出了什么问题。
谢谢
最佳答案
您可能需要指定可选的 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 aqueryset
attribute then you must setbase_name
when registering the viewset.
关于django rest API 路由显示所有端点的相同 api 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35848133/