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

Django POST请求中如何将图片保存至media文件夹并写入模型字段?

解决方法

1. 配置Django媒体文件路径

先在项目的settings.py里添加媒体文件的根目录和访问URL配置:

import os

# 媒体文件存储的根目录,对应项目下的media文件夹
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# 前端访问媒体文件的URL前缀
MEDIA_URL = '/media/'

接着在项目根目录的urls.py中添加媒体文件的路由映射,让Django能正确返回媒体文件:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # 你的其他路由配置...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

2. 修改视图代码处理文件上传

DRF处理文件上传时,文件数据会存在request.FILES里,需要调整视图逻辑,并添加支持文件上传的解析器:

from rest_framework.decorators import api_view, parser_classes
from rest_framework.parsers import MultiPartParser, FormParser

@api_view(['POST'])
# 声明支持multipart/form-data类型的请求解析
@parser_classes([MultiPartParser, FormParser])
def CreateAcc(request):
    if request.method == 'POST':
        data = request.data
        password = make_password(data["password"])
        mail = data['mail']
        name = data['name']
        phone = data['phone']
        # 从FILES中获取上传的图片文件
        image = request.FILES.get('image')
        
        CustomUser.objects.create(
            email=mail, 
            username=name,
            phone=phone, 
            password=password,
            userimage=image 
        )
        return Response(True)

补充说明

  • 配置完成后,图片会自动存在media/profile/目录下(模型里upload_to='profile/'会和MEDIA_ROOT拼接)
  • 模型的userimage字段会存储图片的相对路径(比如profile/avatar.jpg),前端访问时拼接MEDIA_URL就能拿到完整地址(/media/profile/avatar.jpg)
  • 测试上传时,必须用multipart/form-data格式的请求,不能用普通JSON请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 05:15:05