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/
标签:文件,media,django,文件夹,static,avatar,之上,上传 来源: https://www.cnblogs.com/surpass123/p/13149682.html