zoukankan      html  css  js  c++  java
  • 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/
    
  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/surpass123/p/13149682.html
Copyright © 2011-2022 走看看