• 【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)
    

    "

  • 相关阅读:
    問題集リンク(DEV I)
    認定Platformデベロッパー 試験範囲
    React 学习资源
    IIS
    小学校
    リストに項番をつける
    七、JavaScript函数
    六、JavaScript数组
    五、JavaScript流程控制
    四、JavaScript操作符
  • 原文地址:https://www.cnblogs.com/zyk01/p/11376401.html
Copyright © 2020-2023  润新知