Skip to main content
 首页 » 编程设计

python之Non_field_errors 没有在 django webapi 中提供数据

2024年09月03日45haluo1

我是 Django 和 python 的新手。现在我正在尝试用 Django 和 python 做 web API。我可以得到get请求,但是当我请求post方法时,显示这个错误

"non_field_errors": [ "No data provided" ]

View.py=>

from rest_framework.generics import get_object_or_404 
from rest_framework.views import APIView 
from rest_framework.response import Response 
 
from .models import Allowance 
 
from .serializers import AllowanceSerializer 
 
# Create your views here. 
 
 
 
 
class AllowanceAPIView(APIView): 
    def get(self,request,pk=None): 
        if pk: 
            allowance=get_object_or_404(Allowance.objects.all(),pk=pk) 
            serializer = AllowanceSerializer(allowance) 
            return Response({serializer.data}) 
        allowance=Allowance.objects.all() 
        serializer = AllowanceSerializer(allowance,many=True) 
        return Response({"allowance":serializer.data}) 
 
    def post(self,request): 
        allowance = request.data.get('allowance') 
 
        serializer = AllowanceSerializer(data=allowance) 
        if serializer.is_valid(raise_exception=True): 
            allowance_saved=serializer.save() 
 
        return Response({"success":"Allowance '{}' created successfully".format(allowance_saved.AllowID)}) 
 
    def put(self,request,pk): 
        save_allowance = get_object_or_404(Allowance.objects.all(),pk=pk) 
        data = request.data.get('allowance') 
        serializer = AllowanceSerializer(instance=save_allowance,data=data,partial=True) 
 
        if serializer.is_valid(raise_exception = True): 
            allowance_saved=serializer.save() 
 
        return Response({"sucess": "Allowance '{}' updated successfully".format(allowance_saved.AllowID)}) 
 
    def delete(self,request,pk): 
        #Get object with this pk 
        allowance = get_object_or_404(Allowance.objects.all(),pk=pk) 
        allowance.delete() 
        return Response({"message":"Allowance with id '{}' has been deleted.".format(pk)},status=204) 

应用内的 urls.py =>

from django.conf.urls import url 
 
 
from .views import AllowanceAPIView 
 
urlpatterns = [ 
    url(r'^$', AllowanceAPIView.as_view(), name='post-listcreate'), 
    url(r'^(?P<pk>\d+)/$', AllowanceAPIView.as_view(), name='post-listcreate') 
]   

项目内的 urls.py =>

from django.conf.urls import url, include 
from django.contrib import admin 
from rest_framework_jwt.views import obtain_jwt_token 
 
urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    # url(r'^api/auth/login/$', obtain_jwt_token, name='api-login'), 
    url(r'^api/allowances_mas/', include('tmswebapi.urls')), 
] 

示例 API 请求=>

{ 
 
            "AllowID": "Allow1", 
            "AllowDesc": "Allow1 Description", 
            "AllowAmt": "11.00", 
            "AllowType": "MEAL", 
            "Created_DT": "2019-06-18T18:09:00Z", 
            "Created_Usr": "Admin", 
            "LastModified_Usr": "", 
            "LastModified_DT": "2019-06-18T18:09:00Z" 
        } 

序列化器=>

from rest_framework import serializers 
import datetime 
 
from .models import Allowance 
 
class AllowanceSerializer(serializers.ModelSerializer): 
    class Meta: 
        model=Allowance 
        fields = "__all__" 
 
        def create(self,validated_data): 
            return Allowance.objects.create(**validated_data) 
 
        def update(self,instance,calidated_data):             
            instance.AllowDesc = validated_data.get('AllowDesc',instance.AllowDesc) 
            instance.AllowAmt = validated_data.get('AllowAmt',instance.AllowAmt) 
            instance.AllowType = validated_data.get('AllowType',instance.AllowType) 
            instance.LastModified_Usr = "Admin" 
            instance.LastModified_DT = datetime.datetime.now() 
 
            instance.save() 
            return instance 

是因为url还是因为数据格式?

请您参考如下方法:

它从 if serializer.is_valid(raise_exception = True): 行返回错误。

这意味着 data 在某处是 None。

调试代码以确保 data 变量有数据