不支持的媒体类型 Django API

12

我刚接触Django,我的项目是REST。当我使用postman检查URL时,出现了以下错误:

"detail": "请求中的媒体类型不受支持 "multipart/form-data; boundary=----WebKitFormBoundaryAU1ShXHTHrfcQr61"。

而在使用curl时,出现了以下错误:

{"detail":"JSON解析错误 - 预期值:第1行第1列(char 0)"}

这是我用于示例URL的视图:

@api_view(["POST"])
def register(request):
    user_data = request.data
    if user_data:
        serializer = UserSerializers(data=user_data)

        if serializer.is_valid():
            registerInfo = {
                'name': serializer.validated_data['name'],
                'degImage': serializer.validated_data['degImage'],
            }

             serializer.save(registerInfo)
             return Response({
                "code": 200,
                "status": "successful",
                "message": "code was sent try to validate code"
                })
        else:
            return Response({
                "status": "error",
                "error": "Bad request"
            })
    else:
        return Response({
            "status": "error",
            "error": "Empty request"
        })

这是序列化器类:

class UserSerializers(serializers.Serializer):
    name = serializers.CharField(required=True)
    degImage = serializers.ImageField(required=True)

    def save(self, validated_data):
        user = Users(
            name=validated_data['name'],
            degImage=validated_data['degImage']
        )
        user.save()
        return user

以及模型:

class Users(models.Model):
    name = models.CharField(max_length=20, null=True)
    degImage = models.ImageField(null=False, blank=False, default='detImage')

2
请发布处理请求的代码。仅根据错误消息无法猜测出问题所在。 - manassehkatz-Moving 2 Codidact
@manassehkatz 我做到了。 - Negar Moshtaghi
2个回答

23
在Postman设置中,将请求体(body)设为“Raw”,并从下拉菜单中选择“JSON”,然后发送请求。
或者,在Django Rest Framework中更改解析器。
settings.py
 REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser'
     )
 }

谢谢你的提示!我从错误的基本解析器类派生了! - Ron
我一直觉得这很麻烦。后端开发总是需要尝试“form-data”、“form-urlencoded”、“raw”等方式来确定哪种方式可行。现在不仅需要使用原始方式,还需要设置语言... - Bersan

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接