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

Django REST Framework头像上传接口Postman调用报错如何解决

问题原因及解决方案

1. CSRF校验失败(最高发原因)

DRF自带的测试UI会自动携带当前站点的CSRF令牌,Postman默认不会携带,如果你的接口用了Session认证就会触发校验失败。
两种修复方案二选一即可:

  • 测试时在Postman请求头新增X-CSRFToken字段,值从站点Cookie的csrftoken字段中获取;
  • 更建议切换为Token认证,无需处理CSRF,在settings.py中配置:
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
    ]
}

配置完成后Postman请求头新增Authorization: Token <对应用户的Token值>即可完成认证。

2. Postman请求格式配置错误

文件上传必须用form-data格式,按以下步骤配置:

  • 请求方法选POST,Body标签页选中form-data
  • Key列新增两个参数:user(值为对应用户ID)、profile_pic_path,注意profile_pic_path对应的Key类型要切换为File(默认是Text,鼠标hover到Key输入框右侧会出现下拉选项),Value列选择本地要上传的图片即可。

3. 序列化器要求传user字段,请求未携带

你当前用fields = '__all__'会把user字段暴露为必填参数,DRF自带UI登录状态下会自动关联当前用户,Postman如果没传user就会报错。
优化方案:后端直接从登录态取用户,不需要前端传参:

  1. 修改序列化器,把user设为只读字段:
class ProfilePictureSerializer(serializers.ModelSerializer):
  class Meta:
    model = ProfilePicture
    fields = '__all__'
    read_only_fields = ['user']
  1. 修改视图的create方法,自动绑定当前登录用户:
def create(self, request, *args, **kwargs):
    serializer = self.get_serializer(data=request.data)
    if serializer.is_valid():
        # 新增user参数,从请求中取当前登录用户
        serializer.save(user=request.user)
        custom_data = {
            "status": True,
            "message": 'Successfully uploaded your profile picture.',
            "data": serializer.data
        }
        return Response(custom_data, status=status.HTTP_201_CREATED)
    else:
        custom_data = {
            "status": False,
            "message": serializer.errors,
        }
        return Response(custom_data, status=status.HTTP_200_OK)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 18:24:06