【问题标题】:Django 400: Bad Request This field is requiredDjango 400:错误请求 此字段为必填项
【发布时间】:2020-12-04 21:11:27
【问题描述】:

我正在使用 Django 和 restframework-json-api 包开发一个 REST API。 我提出以下要求

curl --location --request POST 'http://localhost:8000/api/students/' \
--header 'Content-Type: application/json' \
--data-raw '{
    "data": {
        "type": "students",
        "attributes": {
            "first_name": "First Name",
            "last_name": "Last Name"
        }
    }
}'

我得到了这个回应

{
    "errors": [
        {
            "detail": "This field is required.",
            "status": "400",
            "source": {
                "pointer": "/data/attributes/first_name"
            },
            "code": "required"
        }
    ]
}

这是我的代码: 模型.py

class Student(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

序列化器.py

class StudentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Student
        fields = ('first_name',)

views.py

class StudentsViewSet(viewsets.ModelViewSet):
    queryset = Student.objects.all()
    parser_classes = (JSONParser, FormParser, MultiPartParser)
    serializer_class = StudentSerializer

urls.py

router = routers.DefaultRouter()
router.register(r'students', views.StudentsViewSet, 'student')


urlpatterns = [
    path('', views.index, name='index'),
    path('api/', include(router.urls))
]

settings.py

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework_json_api.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser'
    )
}

如果我不使用 JSONParser 并使用普通的 django 请求格式而不是 Json API,它可以正常工作。我错过了什么?

【问题讨论】:

  • 您请求中的 Content-Type 标头错误。应该是application/vnd.api+json。不确定这是否会导致问题。

标签: python django json-api


【解决方案1】:

您使用的解析器不同于 DRF 解析器部分中提到的推荐 JSONParser:: https://www.django-rest-framework.org/api-guide/parsers/

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
    ]
}

【讨论】:

    猜你喜欢
    • 2019-12-25
    • 1970-01-01
    • 2021-12-14
    • 2020-02-03
    • 2018-12-04
    • 2016-01-02
    • 2015-03-21
    • 2022-12-30
    • 1970-01-01
    相关资源
    最近更新 更多