首页 > 解决方案 > 我的 django api view.py 没有显示列表并创建新列表

问题描述

开发人员您好,我是 django 的初学者,我正在遵循一个教程,在该教程中他创建了具体的视图类并将它们转换为 viewset.ModelViewSet 类。他在 urls.py 中使用默认路由器

我的应用程序显示带有视图集的文章列表,但不执行 post 方法,ArticleViewSet(viewset.ModelViewSet) 所以我对它使用感到困惑viewset 这是我的 api/view.py 文件,我使用具体视图类,其中我使用具体视图类**

class ArticleListView(ListAPIView):
       queryset = Articles.objects.all()
       serializer_class = ArticleSerializer

class ArticleDetailView(RetrieveAPIView):
      queryset = Articles.objects.all()
      serializer_class = ArticleSerializer


class ArticleUpdateView(UpdateAPIView):
      queryset = Articles.objects.all()
      serializer_class = ArticleSerializer

class ArticleDeleteView(DestroyAPIView):
      queryset = Articles.objects.all()
      serializer_class = ArticleSerializer
   
class ArticleCreateView(CreateAPIView):
    permission_classes = []
    #parser_classes = (FormParser,MultiPartParser, FileUploadParser )
    serializer_class = ArticleSerializer
    queryset = Articles.objects.all()
    #serializer = ArticleSerializer(queryset, many=True)

    def post(self, request):
        serializer = ArticleSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)
        serializer.save()
        return Response(True, status=200)


# class ArticleViewSet(viewsets.ModelViewSet):
#     parser_classes = (FormParser,MultiPartParser, FileUploadParser )
#     serializer_class = ArticleSerializer
#     queryset = Articles.objects.all()
    

**这是我在文章应用程序中的网址模式 api/url.py **

urlpatterns = [
       path('articles', ArticleListView.as_view() name=""),
       path('xyz', ArticleCreateView.as_view()),
       path('<pk>', ArticleDetailView.as_view()),
       path('<pk>/update/', ArticleUpdateView.as_view()),
       path('<pk>/delete/', ArticleDeleteView.as_view())
    ]
#from articles.api.views import  *
# from rest_framework.routers import DefaultRouter

# router = DefaultRouter()
# router.register(r'', ArticleViewSet, basename='articles')
# urlpatterns = router.urls

**这些是我在设置文件夹中 urls.py 的 url 模式 **

urlpatterns = [
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    path('rest-auth/', include('rest_auth.urls')),
    path('rest-auth/registration/', include('rest_auth.registration.urls')),
    path('admin/', admin.site.urls),
    path('accounts/', include('allauth.urls')),
    path('api/', include('articles.api.urls')),

    
    

]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

标签: pythondjangodjango-rest-frameworkdjango-rest-viewsets

解决方案


我不确定,我只进行了快速搜索,您给定的信息并不完整,但我认为您应该定义以下函数来为您的viewSet.

    """
    Example empty viewset demonstrating the standard
    actions that will be handled by a router class.

    If you're using format suffixes, make sure to also include
    the `format=None` keyword argument for each action.
    """

    def list(self, request):
        pass

    def create(self, request):
        pass

    def retrieve(self, request, pk=None):
        pass

    def update(self, request, pk=None):
        pass

    def partial_update(self, request, pk=None):
        pass

    def destroy(self, request, pk=None):
        pass

或者您可以编写自己的视图集而不是覆盖它们

class UserViewSet(viewsets.ViewSet):
    """
    A simple ViewSet for listing or retrieving users.
    """
    def list(self, request):
        queryset = User.objects.all()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)

    def retrieve(self, request, pk=None):
        queryset = User.objects.all()
        user = get_object_or_404(queryset, pk=pk)
        serializer = UserSerializer(user)
        return Response(serializer.data)

从更准确的细节,你可以看到文档


推荐阅读