django之上传文件media配置
django之上传文件media配置
静态文件的配置
前文已经提到,网站所用到的静态资源(js文件,css文件,image文件)等,是存储在static
文件夹下的。如何配置django的静态文件了?
开发环境的配置
开发环境即设DEBUG=True
确保INSTALLED_APPS安装了django.contrib.staticfiles模块
定义STATIC_URL:如STATIC_URL = ‘/static/‘
在模板中访问可以有三种方式:
(1)直接硬编码像/static/lxx.jpg这样;
(2)或是使用static标签,如:
{% load staticfiles %} <img src="{% static "my_app/myexample.jpg" %}" alt="My image"/>
? (3)在/static/目录下存放静态文件。
总结起来,基本配置就是这几点。
settings.py
STATIC_URL = ‘/static/‘ STATICFILES_DIRS = [ os.path.join(BASE_DIR, ‘static‘) ]
用户上传文件配置media
与网站所使用的的静态文件夹存储静态资源相对应的是,用户上传的一些静态资源(如,头像,视频等)也需要一个专门的文件夹来存放他们。一般而言,这些用户上传的文件,是存储在一个media的文件夹下。为了前端页面能使用到这些资源,需要走以下的步骤:
(1)配置项目文件settings.py
settings.py # 配置url映射的路径 MEDIA_URL = ‘/media/‘ # 配置上传文件的存储路径 MEDIA_ROOT = os.path.join(BASE_DIR, ‘media‘)
(2)配置url
from django.views.static import serve from Project.settings import MEDIA_ROOT # 暴露后端指定的文件夹资源 url(r‘^media/(?P<path>.*)$‘, serve, {‘document_root‘: ‘MEDIA_ROOT‘})
这样设置以后,用户上传的文件都会存储在media文件夹中。
如果用户上传文件时,指定了上传的路径,如下:、
def path_and_rename(instance, filename): """ uplaod_to: 上传文件的路径 ext: 文件的后缀名,如‘jpg‘ """ upload_to = ‘avatar‘ ext = filename.split(‘.‘)[-1] filename = f‘{uuid.uuid4().hex[:16]}.{ext}‘ # 截取16位的uuid码作为文件名称 return os.path.join(upload_to, filename) avatar = models.FileField(upload_to=path_and_rename, default=‘avatar/default.png‘, verbose_name=‘用户头像‘)
那么用户上传的avatar文件将会被保存在/media/avatar/
文件夹中。
通过配置url暴露文件的访问接口,用户端轻松的访问这些可以资源
<li class="text-center"><img src="/media/{{ request.user.avatar }}" alt=""/></li> # 在浏览器中输入文件的url http://127.0.0.1:8001/media/avatar/0ce4b17ba22c4886.jpg
这种方式虽然为访问特定资源提供了便利,但是对于一些敏感数据(用户数据,源代码),切记不能开设资源访问接口。
补充:图片防盗链技术
图片防盗链技术的原理
# 请求来的时候,判断请求是从哪个网站过来的, - 如果从自己网站过来则放行 - 如果从别的网站过来则禁止 # 判断的标准,http协议请求头中的参数Referer - 该参数用于记录请求来自于哪个网址 - 如:Referer: http://127.0.0.1:8000/xxx/