【发布时间】: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,以便保存我的数据。谢谢
【问题讨论】:
-
创建新实例时
node和mapAPI 的状态码是什么?仅供参考:DRF 通常在创建新实例时返回201 -
一样。我收到状态码 200,而不是 201
-
您可能发送的是带有请求参数而不是正文的 post 请求,这是 postman 中的常见错误
-
不,我使用的是正文
标签: python django rest django-rest-framework