Non_field_errors Django Webapi中没有提供数据

时间:2019-06-25 03:03:41

标签: python django

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

  

“ non_field_errors”:[           “未提供数据”       ]

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还是因为数据格式?

2 个答案:

答案 0 :(得分:0)

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

这意味着dataNone某个地方。

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

答案 1 :(得分:0)

def post(self,request):
        allowance = request.data

        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)})

现在尝试这个