如何解决Django REST Framework上传图片后URL无法访问的问题
问题根源
Django默认不会自动处理media目录下的资源请求,即便你在settings中配置了MEDIA相关参数,也需要额外补充路由规则才能正常访问图片。
分步解决
1. 确认settings配置完整
首先检查settings.py中已经正确配置media相关参数:
import os # 其他配置省略 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
2. 补充media路由规则
打开项目根目录的urls.py,添加如下配置:
from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), # 你自己的其他路由,比如DRF接口路由 path('api/', include('你的应用名.urls')), ] # 开发模式下开启media资源访问 if settings.DEBUG: urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
3. 跨域配置排查(React前端必看)
如果React前端运行端口和Django不一致(比如React默认3000端口,Django默认8000端口),需要配置跨域规则,否则前端无法加载图片:
- 先安装跨域依赖:
pip install django-cors-headers - 修改
settings.py配置:
INSTALLED_APPS = [ # 原有其他应用 'corsheaders', ] MIDDLEWARE = [ # 放在中间件列表最顶部 'corsheaders.middleware.CorsMiddleware', # 原有其他中间件 ] # 开发环境使用,生产环境请替换为实际前端域名 CORS_ALLOW_ALL_ORIGINS = True
4. 生产环境注意事项
如果是上线部署,不要用Django本身提供media资源服务,效率极低,需要配置Nginx/Apache直接指向media文件夹对外提供访问。
配置完成后重启Django服务即可正常访问图片链接。
内容的提问来源于stack exchange,提问作者dahko37
相关产品推荐
相关产品推荐

