Django 静态文件与媒体文件配置详解
本文详细解析Django项目中静态文件(STATIC)与用户上传文件(MEDIA)的配置方法。涵盖开发环境下的settings设置、urls路由配置,以及生产环境中Nginx服务器的处理逻辑,帮助开发者理清两者区别并实现正确部署。
Django 静态文件与媒体文件配置详解
静态文件配置
概述:
静态文件处理流程概述
在Web架构中,静态文件通常由专门的Web服务器处理,Django框架本身并不直接负责静态文件的传输。其基本处理流程如下(以Nginx为例):
当收到URI请求时,首先依据Web服务器中的配置规则进行判断。以Nginx为例,主要依据nginx.conf文件中定义的location规则进行匹配。
若请求的是静态文件,则直接由Nginx响应并返回文件内容。
若请求非静态文件,则将其转发给Django处理。Django根据urls.py中定义的路由规则进行匹配和处理。
上述流程适用于部署到Web服务器后的生产环境。为了简化开发过程,Django提供了开发环境下静态文件的自动处理机制,具体配置方法如下:
STATIC 配置详解
STATIC配置:
STATIC主要涵盖CSS、JavaScript、图片等前端资源文件:
STATIC_URL = '/static/' # 别名
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"), # 实际名,即实际文件夹的名字
]
# 注意:django对引用名和实际名进行映射,引用时,只能按照引用名来,不能按实际名去找
MEDIA 配置与开发环境处理
media配置:
MEDIA_URL = "/media/"
# 用户上传的文件(针对models.py中的FileField、ImageField字段)保存到哪
MEDIA_ROOT = os.path.join(BASE_DIR, "app名字", "media")
# 配合settings.py里的MEDIA_URL = "/media/"配置,即对外开放了这个接口的权限
from django.conf.urls import url
from django.views.static import serve
from . import settings
urlpatterns = [
url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
]
注意:
静态文件的处理在Django中分为STATIC和MEDIA两类,初学者容易混淆。Django对两者的定义如下:
MEDIA:指代用户上传的文件,例如在Model中通过FileField或ImageField字段上传的文件。
例如,若定义MEDIA_ROOT = c:\temp\media,当执行models.FileField(upload_to="abc/")时,上传的文件将被保存到指定路径下。
c:\temp\media\abc
eg:
class blog(models.Model):
Photo = models.ImageField(upload_to="photo")
若上传图片至c:\temp\media\photo,需在settings.py中设置MEDIA_ROOT(必须为本地路径的绝对路径),通常配置如下:
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/').replace('\\','/')
MEDIA_URL是指访问这些文件时的URL前缀。例如:
MEDIA_ROOT = c:\temp\media\photo
MEDIA_URL = "/data/"
在开发阶段,Django会自动处理media文件的请求。
此时访问http://localhost/data/abc/a.png,实际上对应访问本地路径c:\temp\media\photo\abc\a.png。
在HTML模板中,引用图片的代码应写为<img src="/media/abc/a.png">。
生产环境 Nginx 部署配置
在生产部署阶段,最大的区别在于必须配置Web服务器来处理media文件。因此,需要在Web服务器中进行相应配置。
以确保Web服务器能够正确访问并返回media文件。
以Nginx为例,可在nginx.conf中配置如下:
location ~/media/{
root/temp/
break;
}
具体部署细节可参考关于如何在Nginx中部署Django的相关资料。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









