python - Django Rest 框架字段是必填错误

标签 python django django-rest-framework

我的模型.py:

from django.db import models

# Create your models here.
class Email(models.Model):
    id = models.AutoField(primary_key=True)
    sender = models.CharField(max_length=100)
    receiver = models.CharField(max_length=100)
    message = models.TextField()

我的序列化器.py:

from django.forms import widgets
from rest_framework import serializers
from email_app.models import Email

class EmailSerializer(serializers.ModelSerializer):
    class Meta:
        model = Email
        fields = ('id', 'sender', 'receiver', 'message')

我的观点.py:

@api_view(['POST'])
def email_list(request):
    serializer = EmailSerializer(data=request.DATA)
    if serializer.is_valid():
        serializer.save()
        return Response(serializer.data, status=status.HTTP_201_CREATED)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

当我发送这样的 POST 请求时:

 curl -X POST http://127.0.0.1:8000/email/new/ -d "{'sender': 'a@b', 'receiver':'c@d', 'message':''yolo'}"

我收到这个错误:

{"message": ["This field is required."], "sender": ["This field is required."], "receiver": ["This field is required."]}

我做错了什么?

最佳答案

DRF 需要 Content-Type header 来为您的数据找到正确的解析器。

尝试将 -H "Content-Type:application/json" 添加到您的 curl 调用中。

另请注意,您使用的单引号 (') 不是有效的 JSON。 JSON 只允许双引号 (")。

所以你正确的 curl-call 应该是

curl -X POST http://127.0.0.1:8000/email/new/-H "Content-Type: application/json"-d '{"sender": "a@b", "receiver":"c@d", "message":"yolo"}'

关于python - Django Rest 框架字段是必填错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24074089/

相关文章:

python - 估计在 Python 中编码为 B64 字符串的二进制数据的大小

django - 如何迭代 Django 模板中的嵌套字典

python - 通过 curl POST 将 csv 文件发送到 Django REST Framework 端点

python - 如何通过可变数量增加对象属性

python - 在 Elasticsearch 中搜索句点和连字符分隔的字段

python - 如何在 python 中使用网址下载文件?通过浏览器下载可以,但不能通过python的请求下载

python - @ 之前的 django EmailField 点

django - 复数形式表达可能很危险

python - 使用python social auth通过访问 token 注册用户

django - 在序列化器方法字段中返回嵌套序列化器