zoukankan      html  css  js  c++  java
  • 【Django】MEDIA的配置及用法

    "如果需要在数据库中存储图片或视频类的数据,我们可以配置MEDIA.

    下面的示例将以上传一张图片的形式来说明MEDIA的配置及用法.

    第一步 settings.py

    # media配置
    MEDIA_URL = 'media/'  # 用于指定url路径
    MEDIA_ROOT = os.path.join(BASE_DIR, "媒体库")  # 用于指定上传文件的存储路径
    

    第二步 urls.py

    from django.conf.urls import url
    from django.contrib import admin
    from django.views.static import serve  # !
    from blog097.settings import MEDIA_ROOT  # !
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # media路径配置
        url(r'media/(?P<path>.*)/$', serve, {'document_root': MEDIA_ROOT}),
    ]
    

    第三步 models.py

    from django.db import models
    
    # 用于测试MEDIA的表
    class Test(models.Model):
        # 该字段将存储上传的图片路径
        image = models.ImageField(upload_to="图片/%Y-%m")
    

    第四步 启动Django并访问admin页面, 开始上传图片
    在这里插入图片描述

    在这里插入图片描述
    可见,上传后,我们的项目根目录下生成了"媒体库"文件夹,且数据库中存储的是图片路径.

    这样,便可以拿到图片或视频了:
    在这里插入图片描述

    补充

    视图中相关的用法(项目摘):

    # 部分代码如下:
    
    def post(self, request):
        img, user = request.FILES.get('file'), request.user
    
        # 判断文件大小是否被允许
        if len(img) > MAX_UPLOAD_FILE_SIZE:
            return self.set_response_data(f'File size not exceeding {ALLOW_UPLOAD_FILE_SUFFIX_RE}M', 0)
    
        # 判断文件后缀是否被允许
        suffix = re.findall(ALLOW_UPLOAD_FILE_SUFFIX_RE, img.name, re.I)  # re.I:忽略大小写匹配
    
        # 如果被允许,则存储图片数据
        if suffix:
            img.name = f'{str(uuid.uuid4())}.{suffix[0].lower()}'  # 一定要改img.name,下一行的image=img会用到img.name的值
            img_obj = models.ArticleImg.objects.create(user=user, image=img)
            return self.set_response_data(f'/{MEDIA_URL}{img_obj.image}')
    
        # 否则的:
        return self.set_response_data('A suffix that is not allowed!', 0)
    

    "

  • 相关阅读:
    Java核心技术
    浏览器地址栏输入url回车之后发生了些什么
    Java相关面试题总结+答案(十)
    Java相关面试题总结+答案(九)
    Java相关面试题总结+答案(八)
    Java相关面试题总结+答案(七)
    input type=‘file’方法
    禁止用户复制网页内容
    js添加背景水印
    angular双向绑定
  • 原文地址:https://www.cnblogs.com/zyk01/p/11376401.html
Copyright © 2011-2022 走看看