定义一个相册表
# 相册表
class Photo(db.Model):
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
photo_name = db.Column(db.String(50), nullable=False)
photo_datetime = db.Column(db.DateTime, default=datetime.now)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
def __str__(self):
return self.photo_name
使用七牛云完成相册云存储
- 安装七牛云 : pip install qiniu
把相册上传封装成一个工具类
utils.py
import random
import qiniu.config
from qiniu import Auth, put_file, etag, put_data
# 七牛上传
def upload_qiniu(filestorage):
# 需要填写你的 Access Key 和 Secret Key
access_key = ''
secret_key = ''
# 构建鉴权对象
q = Auth(access_key, secret_key)
# 要上传的空间
bucket_name = 'flaskblog-2021'
# 上传后保存的文件名
filename = filestorage.filename
# 拼接一个随机数
ran = random.randint(1, 1000)
name = filename.rsplit('.')[0] + '_' + str(ran) + '.' + filename.rsplit('.')[-1]
key = name
# 生成上传 Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
ret, info = put_data(token, key, filestorage.read())
return ret, info
完善我的相册功能
# 相册
@user_bp.route('/myphoto')
def myphoto():
# 分页
photos = Photo.query.paginate(page=1, per_page=3)
return render_template('user/myphoto.html', photos=photos)
相册删除
center.js
//相册图片的删除
$('.photo-del').click(function () {
console.log('--->');
flag = confirm('确定删除此图片吗?');
if (flag) {
//获取属性值tag,tag属性的是就是图片的主键
let pid = $(this).attr('tag');
//1.ajax, 2. location.href
location.href = '/user/photo_del?pid=' + pid;
}
});
views.py
# 相册删除
@user_bp.route('/photo_del')
def photo_del():
pid = request.args.get('pid')
photo = Photo.query.get(pid)
filename = photo.photo_name
info = delete_qiniu(filename)
if info.status_code == 200:
db.session.delete(photo)
db.session.commit()
return redirect(url_for('user.center'))
else:
return render_template('500.html', err_msg='删除照片失败')
- 相册删除工具类
utils.py
# 删除
def delete_qiniu(filename):
access_key = ''
secret_key = ''
# 初始化Auth状态
q = Auth(access_key, secret_key)
# 初始化BucketManager
bucket = BucketManager(q)
# 你要测试的空间, 并且这个key在你空间中存在
bucket_name = 'flaskblog-2021'
key = filename
# 删除bucket_name 中的文件 key
ret, info = bucket.delete(bucket_name, key)
return info