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
相关产品推荐
相关产品推荐

