没有从 Serializer 获取数据
not getting the data from Serializer
view.py
@csrf_exempt
def blog_list(请求):
if request.method == 'GET':
post = Post.objects.all()
serializer = BlogSerializer(post, many=True)
return JsonResponse(serializer.data,safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = BlogSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
class BlogSerializer(serializers.Serializer):
class Meta:
model = Post
fields = ['author', 'title', 'text', 'published_date']
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
您应该将 request.data
传递给序列化程序。传递整个请求不会 return 任何东西,因为请求没有您在序列化程序中声明的字段。它们在 post 数据中。
首先你需要了解这段代码的一些事情
def blog_list(request):
if request.method == 'GET':
post = Post.objects.all()
serializer = BlogSerializer(post, many=True)
return JsonResponse(serializer.data,safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = BlogSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
这里的request指的是一个request对象,里面包含了request里面的所有数据(method, body, data, headers,等),而不仅仅是请求数据。所以,你想解析 request.body,而不是 request.
data = JSONParser().parse(request.body)
view.py
@csrf_exempt
def blog_list(请求):
if request.method == 'GET':
post = Post.objects.all()
serializer = BlogSerializer(post, many=True)
return JsonResponse(serializer.data,safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = BlogSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
class BlogSerializer(serializers.Serializer):
class Meta:
model = Post
fields = ['author', 'title', 'text', 'published_date']
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
您应该将 request.data
传递给序列化程序。传递整个请求不会 return 任何东西,因为请求没有您在序列化程序中声明的字段。它们在 post 数据中。
首先你需要了解这段代码的一些事情
def blog_list(request):
if request.method == 'GET':
post = Post.objects.all()
serializer = BlogSerializer(post, many=True)
return JsonResponse(serializer.data,safe=False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer = BlogSerializer(data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)
这里的request指的是一个request对象,里面包含了request里面的所有数据(method, body, data, headers,等),而不仅仅是请求数据。所以,你想解析 request.body,而不是 request.
data = JSONParser().parse(request.body)