【问题标题】:Django REST framework api root emptyDjango REST framework api root 为空
【发布时间】:2020-11-24 16:00:43
【问题描述】:

我已经设置了一个 Django REST 框架项目,但是 api 根目录没有填充任何东西,例如用户 ViewSet,我无法使用用户列表访问预期的 url。

有一个应用用户,具有自定义用户模型。 (而django项目名为api)

主 urls.py

from django.contrib import admin
from django.urls import path, include
from rest_framework.routers import DefaultRouter

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('users.urls')),
]

用户应用 urls.py

from django.contrib import admin
from django.urls import include, path
from rest_framework.routers import DefaultRouter

from users.views import CustomUserViewSet

router = DefaultRouter()
router.register("users", CustomUserViewSet, 'users')

urlpatterns = [
]

urlpatterns += router.urls

用户模型.py

from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    pass

    def __str__(self):
        return self.username

用户序列化器.py

from rest_framework.serializers import ModelSerializer
from .models import CustomUser


class CustomUserSerializer(ModelSerializer):
    class Meta:
        model = CustomUser
        fields = '__all__'

用户应用views.py

from django.shortcuts import render
from rest_framework.viewsets import ViewSet
from .serializers import CustomUserSerializer
from .models import CustomUser


class CustomUserViewSet(ViewSet):
    serializer_class = CustomUserSerializer
    queryset = CustomUser.objects.all(

localhost:8000/api/ 处清空api root

localhost:8000/api/users/ 出现 404 错误

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    如果您只使用Viewset,则需要实施这些操作。

    来自docs

    ViewSet 类不提供任何操作实现。在 为了使用 ViewSet 类,您将覆盖该类并定义 明确的动作实现

    您可以像在example 中一样添加list 操作:

    from rest_framework.response import Response
    class CustomUserViewSet(ViewSet):
        serializer_class = CustomUserSerializer
        queryset = CustomUser.objects.all()
    
        def list(self, request):
            queryset = CustomUser.objects.all()
            serializer = CustomUserSerializer(queryset, many=True)
            return Response(serializer.data)
    

    或者(也许您正在寻找)使用类似 ModelViewSet 的东西,它已经包含各种操作的实现:

    class CustomUserViewSet(viewsets.ModelViewSet):
        serializer_class = CustomUserSerializer
        queryset = CustomUser.objects.all()
    

    【讨论】:

    • 感谢我打算放入的 ModelViewSet 是多么愚蠢的错误。谢谢。
    【解决方案2】:

    在你的情况下,你必须简单地替换

    class CustomUserViewSet(ViewSet):

    class CustomUserViewSet(viewsets.ModelViewSet):

    【讨论】:

      猜你喜欢
      • 2016-10-31
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      • 2017-04-04
      • 2019-08-19
      • 2020-10-28
      • 2020-02-10
      • 2019-03-11
      相关资源
      最近更新 更多