类型错误:parse() 缺少 1 个必需的位置参数:'stream'

问题描述 投票:0回答:2
from django.shortcuts import render
from django.http import HttpResponse,JsonResponse
from rest_framework import serializers
from rest_framework import parsers
from rest_framework.parsers import JSONParser
from .models import Article
from .serializer import Articleserializer
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
# Create your views here.
def artical_list(request):
    if request.method=='GET':
        article= Article.objects.all()
        serializer=Articleserializer(article,many=True)
        return JsonResponse(serializer.data,safe=False)
    elif request.method=='POST':
        data=JSONParser.parse(request)
        serializer=Articleserializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data,status=201)
        return JsonResponse(serializer.errors, status=400)

这是我的序列化器类 从 django.db.models 导入字段 从rest_framework导入序列化器 从 .models 导入文章

class Articleserializer(serializers.ModelSerializer):
    class Meta:
        model=Article
        fields= ['id','title','author']  

这是我的模型课

from django.db import models

# Create your models here.
class Article(models.Model):
    title=models.CharField(max_length=50)
    author=models.CharField(max_length=100)
    email=models.EmailField(max_length=100)
    date=models.DateTimeField(auto_now_add=True)

    
   

def __str__(self):
    return self.title 

当我使用邮递员发布数据时出现此错误,请帮助我 django Rest freamwork 是

python-3.x django-models django-rest-framework django-forms django-templates
2个回答
0
投票

JSONParser
应该被实例化。
parse
方法是一个 normal 方法,而不是类方法。所以你需要一个实例才能工作:

JSONParser().parse(request)  # Instead of JSONParser.parse(request)

0
投票

解析 JSON 数据,这不是正确的方法。您应该使用 JSONParser() 代替。

from django.shortcuts import render
from django.http import JsonResponse
from rest_framework.parsers import JSONParser
from .models import Article
from .serializers import ArticleSerializer
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def article_list(request):
    if request.method == 'GET':
        articles = Article.objects.all()
        serializer = ArticleSerializer(articles, many=True)
        return JsonResponse(serializer.data, safe=False)
    
    elif request.method == 'POST':
        data = JSONParser().parse(request)
        serializer = ArticleSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)

使用 Postman 进行测试时,请确保在 POST 请求正文中提供合法的 JSON 负载。

© www.soinside.com 2019 - 2024. All rights reserved.