【问题标题】:Django Rest Framework API POST receiving status code 200 instead 201Django Rest Framework API POST 接收状态码 200 而不是 201
【发布时间】:2020-08-22 05:52:42
【问题描述】:

我是 Django 和 python 的新手。我有一个使用 docker 已经投入生产的网站。 API URL 开启:http://gmlews.com/api/data。当我想使用邮递员测试 API 时,GET 方法工作正常,但 POST 方法返回响应 200 OK 而不是 201 创建。因此,我的数据无法保存在 API 中。

这是我的 API 代码:

restapi/serializers.py:

from .models import Data,Node
from rest_framework import serializers


class DataSerializer(serializers.ModelSerializer):
   class Meta:
    model = Data
    fields = '__all__'


class NodeSerializer(serializers.ModelSerializer):
   class Meta :
    model = Node
    fields = '__all__'

restapi/views.py:

import json
from django.views.generic import View
from django.shortcuts import render
from rest_framework import routers, serializers, viewsets
from rest_framework.response import Response
from restapi.serializers import DataSerializer, NodeSerializer
from restapi.models import Data, Node
from django_filters.rest_framework import DjangoFilterBackend
from django.http import HttpResponse
from rest_framework.views import APIView
# Create your views here.


class DataViewSet(viewsets.ModelViewSet):
    queryset = Data.objects.all()
    serializer_class = DataSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_fields = ['node_id']


class MapViewSet(viewsets.ModelViewSet):
    queryset = Data.objects.filter(node_id=1).order_by('-id')[:1]
    serializer_class = DataSerializer


class NodeViewSet(viewsets.ModelViewSet):
    queryset = Node.objects.all()
    serializer_class = NodeSerializer

urls.py:

from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import include, path
from restapi import views
""" for routers api root"""
from restapi.models import Data, Node
from rest_framework import routers
from restapi.views import DataViewSet, NodeViewSet, MapViewSet

router = routers.DefaultRouter()

router.register(r'data', DataViewSet, 'data')

router.register(r'node', NodeViewSet, 'node')

router.register(r'map', MapViewSet, 'map')


urlpatterns = [
path('admin/', admin.site.urls),
path(r'api/', include(router.urls)),
path(r'', include('rest_framework.urls', namespace='rest_framework')),

]

有人可以帮我解决这个问题吗?我真的不知道为什么 POST 方法会收到状态 200。我希望它收到状态 201,以便保存我的数据。谢谢

【问题讨论】:

  • 创建新实例时nodemap API 的状态码是什么?仅供参考:DRF 通常在创建新实例时返回 201
  • 一样。我收到状态码 200,而不是 201
  • 您可能发送的是带有请求参数而不是正文的 post 请求,这是 postman 中的常见错误
  • 不,我使用的是正文

标签: python django rest django-rest-framework


【解决方案1】:

访问您的网站并发布了帖子。它返回了 201。 以下是证据:

如果您访问您的数据,则 ID 为 15 的项目是由我创建的,而该 POST 的当前响应是 201。

【讨论】:

  • 哦,对不起。我正在使用 cloudflare,但 cloudflare 有问题,我必须使用 https 而不是 http
猜你喜欢
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 2021-08-23
相关资源
最近更新 更多