Django-Rest-Framework的CreateAPIView不起作用。

3
我正在尝试使用django-rest-framework实现一个简单的视图集,除了“创建”视图之外,一切都正常。当我访问链接(http://127.0.0.1:8000/api/create/)并输入数据后,当我点击PUT时,数据没有被载入数据库中。 终端显示以下错误: [19/Jun/2019 14:15:29] "GET /api/create/ HTTP/1.1" 404 10318 未找到:/api/create/

我正在遵循这个教程学习如何将django和react集成。 我之前尝试分别实现CRUD视图,但出现了循环引用错误。我想可能是url定义方面出了一些问题,但我就是找不出错在哪里。

API urls.py:

from articles.api.views import ArticleViewSet
from rest_framework.routers import DefaultRouter

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

API视图.py:

from rest_framework import viewsets
from articles.models import Article
from .serializers import ArticleSerializer

class ArticleViewSet(viewsets.ModelViewSet):
    serializer_class = ArticleSerializer
    queryset = Article.objects.all()

API序列化器:

from rest_framework import serializers
from articles.models import Article

class ArticleSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ('id', 'title', 'content')

项目 urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [

    path('admin/', admin.site.urls),
    path('api-auth/', include('rest_framework.urls')),
    path('api/', include('articles.api.urls')),

]

使用此代码,当我访问列表视图时,在下面会出现添加新记录的表单,如果我在那里输入数据,则记录将添加到数据库中。但是当我转到“api/create”并提交表单时,它不会加载到数据库中。更新和删除视图工作正常。
感谢您的帮助!
1个回答

5
如果您要创建一个对象,只需将其POST到/api/ URL,而不是/api/create/。这是因为您的ArticleViewSet包含CreateAPIView。如果您使用类似于以下方式:
from rest_framework import generics
class ArticleViewSet(generics.CreateAPIView):
    serializer_class = ArticleSerializer
    queryset = Article.objects.all()

如果你在urls.py中使用CreateAPIView,路由将无法工作。 这个教程 解释了这个问题。

你需要发送POST数据到/api/ URL来创建对象。

  • 使用POST方法进行创建
  • 使用PUT方法进行编辑
  • 使用GET方法进行列表或详情
  • 使用DELETE方法进行删除

可以在视图集中使用这些操作。

如果你想要使用CreateAPIView(如上述代码),你必须像下面这样更改urls.py。

urlpatterns = [
    url("/api/create/", views.ArticleViewSet.as_view())
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接