我正在尝试从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”并提交表单时,它没有加载到数据库中。
更新和删除视图工作正常。
感谢您的帮助!
答案 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来创建对象。
视图集中的操作。
如果要使用CreateAPIView(如上面的代码),则必须像这样更改urls.py。
urlpatterns = [
url("/api/create/", views.ArticleViewSet.as_view())
]