1.文件云存储
1.1 概述
在Django项目中,用户上传的文件以及项目中使用的静态文件,默认读书存储本地,保存在服务器中,但是,其实我们也可以将他们保存在云存储中,譬如七牛云存储、阿里云存储、亚马逊云存储等
本次我们将使用七牛云存储
1.2 环境搭建
首先,我们创建django项目,具体操作流程可以看本专栏的前几节内容。
然后,配置好splite数据库(默认配置好了),然后在Navicate中创建数据库
配置settings,urls和model
迁移数据库
创建后台管理用户admin
model
from django.db import models
# Create your models here.
class UploadFileImg(models.Model):
file = models.FileField(upload_to='files/')
img = models.ImageField(upload_to='imgs/')
remark = models.CharField(max_length=100)
根urls
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('cloud_app/',include('cloud_app.urls'))
]
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
settings
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
前端页面显示
views
from django.shortcuts import render
from cloud_app.models import *
# Create your views here.
def file_admin(request, pk):
# 根据pk获取模型对象
uploadFileImg = UploadFileImg.objects.get(pk=pk)
return render(request, "cloud_app/file_admin.html", {'uploadFileImg':uploadFileImg})
templates
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>admin管理的文件显示</title>
</head>
<body>
<ul>
<li>
备注:{{ uploadFileImg.remark }}
</li>
<li>
图片名:{{ uploadFileImg.img.name }}
</li>
<li>
<img src="{{uploadFileImg.img.url }}">
</li>
<li>
<a href="{{uploadFileImg.file.url }}">{{uploadFileImg.file.name }}</a>
</li>
</ul>
</body>
</html>
2.七牛云存储
2.1 注册七牛
- 注册七牛云存储https://www.qiniu.com/
- 登陆后,访问个人中心>>密钥管理,可以查到两个key:
- AK
- SK
- 进行实名认证
- 在对象存储中,创建存储空间,得到两个key,空间名(自己设置,譬如lhbstorage)、域名(譬如:日534u0ef.hb-bkt.clouddn.com)
2.2 新建存储空间
新建出空间,得到空间名、域名和上文得pk和sk即可
3. 七牛云存储存储上传文件
安装模块
pip install django-qiniu-storage == 2.3.1
settings
# 七牛云存储配置
# 对应密钥管理中的 AK
QINIU_ACCESS_KEY = 'aaA2cDcdohLREq5fLi82T-2e8pFdMnYlb4hsTsFT'
# 对应密钥管理中的 SK
QINIU_SECRET_KEY = 'xL7kJBafmZkvnh9P0cHedZAfadO8OvH0ELih6oD8'
# 对应存储空间中的空间名
QINIU_BUCKET_NAME = 'lhbstorage'
# 对应存储空间中的域名
QINIU_BUCKET_DOMAIN = 'rmo65ufwh.hn-bkt.clouddn.com'
说明:
其他的配置项都是七牛云存储私有的,和普通的本地存储的区别就
是3个参数的修改:
- MEDIA_ROOT:从普通的:os.path.join(BASE_DIR, ‘media’) 修改为 ‘/media/’ ,那么存储的默认位置就是
QINIU_BUCKET_DOMAIN + MEDIA_ROOT - MEDIA_URL: 从普通的 ‘/media/’ 修改为 PREFIX_URL +QINIU_BUCKET_DOMAIN + MEDIA_ROOT, 由于使用七牛云存储,因此和我们本身项目的域名不同,因此只能使用绝对路径,而不是普通存储那样的相对路径
- DEFAULT_FILE_STORAGE: 这个是重点,因为最终文件的存储,就是由这个类实现的,从默认的 本地存储类修改为 七牛云的存储类,七牛的存储类有3种:
- qiniustorage.backends.QiniuStorage:文件将存放在bucket的根目录下
- qiniustorage.backends.QiniuMediaStorage:文件将存放在bucket/MEDIA_ROOT目录下
- qiniustorage.backends.QiniuStaticStorage:文件将存放在bucket/STATIC_ROOT目录下
同样的方式,上传文件
此时就会保存到七牛云存储中
4. 七牛云存储静态文件
在项目中我们也可以云存储保存我们的所有静态文件,只需要几步就可以实现
settings
# 七牛云存储保存静态文件
# 在云存储中保存文件前置path
STATIC_ROOT = '/static/'
# 静态文件的url访问路径前置的path
STATIC_URL = QINIU_BUCKET_DOMAIN + STATIC_ROOT
# 静态文件存储使用的存储类
STATICFILES_STORAGE = 'qiniustorage.backends.QiniuStaticStorage'
在cmd执行命令
合并静态文件
效果展示