【发布时间】: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。不确定这是否会导致问题。