You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决django-rest-framework注册流程中头像无法正常上传的问题

注册环节头像无法上传问题排查及解决方案

核心错误1:序列化器取值逻辑错误

你在CustomRegisterSerializer的save方法中使用self.data获取字段值,这是错误的写法:
DRF中self.data是序列化后的输出数据,ImageField这类二进制文件对象仅会保存在经过验证的self.validated_data中,从self.data取值只能拿到空值,导致头像无法写入用户实例。

修复方法:

修改serializers.py中CustomRegisterSerializer的save方法:

@transaction.atomic
def save(self, request):
    user = super().save(request)
    # 从validated_data而非data取值
    user.gender = self.validated_data.get('gender')
    user.phone_number = self.validated_data.get('phone_number')
    user.image = self.validated_data.get('image')
    user.save()
    return user

可能的错误2:缺少文件上传所需的解析器

上传文件要求请求格式为multipart/form-data,DRF默认如果没有配置对应解析器,会无法解析请求中的文件字段。你更新接口正常是因为用户更新接口默认带了对应解析器,而dj-rest-auth的注册接口默认没有配置。

修复方法:

在settings.py的REST_FRAMEWORK配置项中添加解析器配置:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
        'dj_rest_auth.jwt_auth.JWTCookieAuthentication',
    ],
    # 新增解析器配置
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser',
    ],
}

检查点:前端请求格式要求

前端发起注册请求时,必须指定请求头Content-Type: multipart/form-data,不能使用application/json格式,JSON无法传递二进制文件数据,会导致文件字段丢失。

内容的提问来源于stack exchange,提问作者CodingRaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:27:05