Django-Rest-Framework CreateAPIView不起作用

时间:2019-06-19 15:10:50

标签: django django-rest-framework

我正在尝试从django-rest-framework实现一个简单的视图集,除了Create视图之外,其他所有东西都正常运行。 ulr(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 /

我正在关注此tutorial,以学习整合Django并做出反应。 我以前曾尝试过单独实现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 views.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 个答案:

答案 0 :(得分:1)

如果要创建对象,则只需POST到/ api / URL。不是/ api / create /。因为您的ArticleViewSet包含CreateAPIView。如果您这样使用:

from rest_framework import generics
class ArticleViewSet(generics.CreateAPIView):
    serializer_class = ArticleSerializer
    queryset = Article.objects.all()

如果您使用CreateAPIView,则urls.py中的路由器不起作用。 Your tutorial对此进行了解释。

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

  • 用于创建的POST方法
  • 用于编辑的PUT方法
  • 获取列表或详细信息的方法
  • 删除以删除

视图集中的操作。

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

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