• 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/
    
  • 相关阅读:
    ext之Windows
    多个DIV显示/隐藏
    asp.net 得到上一页地址
    人们的文化和素质
    gridview 删除问题
    RSS of the Day: 新闻类Feeds
    每日英语:Taiwan Tech Firms Bring Jobs Home Quietly
    每日英语:Freedom and America's gun culture
    matlab学习:图像频域分析之Gabor滤波
    每日英语:The End Of The World Is (Not) Nigh
  • 原文地址:https://www.cnblogs.com/surpass123/p/13149682.html
Copyright © 2020-2023  润新知