上篇blog已经给大家讲述了个人头像本地存储的方法,但是一般情况下,由于本地存储的容量是有限的,基本上所有的公司的图片都会借助存储服务器,那本章我就给大家详细介绍一下七牛云存储方式
主要流程即:
--> 当用户点击【个人资料】菜单时,会链接进【个人资料】界面 --> 然后在这里,可以更改你的用户信息:姓名、手机号、头像 头像上传,存储到七牛云
主要知识点:
- 个人头像存取于【七牛云存储】
环境:
- Pycharm
- python3.6
- mysql 5.7
- django 2.0.13
一、七牛云存储使用介绍 1、七牛云注册及使用
七牛云注册地址:https://portal.qiniu.com/signup
2、七牛云上传资源文档介绍
- 七牛云表单上传:https://developer.qiniu.com/kodo/1272/form-upload
- Python SDK用法文档:https://developer.qiniu.com/kodo/1242/python
3、七牛云下载
pip install qiniu
二、新功能优化项目概览
三、user模块具体实现 1、urls.py
path('user_center1', user_center1, name='user_center1'), # 云存储
2、utils.py
- 工具类中,新增【上传图片:至七牛云存储】方法
def upload_img(store_obj, img_path):
"""
上传图片:七牛云存储
:param img_path:
:param store_obj:
:return:
"""
# 1、去七牛云后台拿到你的密钥
access_key = 'YDY-gnHSFf4sBq99JnjWEu3B9YqxeoKIYN5ssoNV'
secret_key = 'lPHugocZtlqLTnWcRP-UZfEw5fxCa5p9I4KZsX_E'
# 2、构建鉴权对象
q = Auth(access_key, secret_key)
# 要上传的空间名称
bucket_name = 'mikasa-blog-space'
# 上传后保存的文件名
key = store_obj.name
# 生成上传Token,可以指定过期时间等
token = q.upload_token(bucket_name, key, 3600)
# 要上传文件的本地路径
locla_file = os.path.join(MEDIA_ROOT, img_path)
ret, info = put_file(token, key, locla_file) # 第三个参数是二进制流
print(ret, info)
# 拿到文件名
file_name = ret.get('key')
save_path = 'http://rdbjlwxgm.hn-bkt.clouddn.com/' + file_name
return save_path
3、views.py
- 新增一【用户中心】视图函数,直接在原本地存储方法那里copy一份过来,进行简单修改即可
# @login_required
def user_center1(request):
"""
用户的个人中心1:个人头像存储七牛云
:param request:
:return:
"""
# 拿到之前登录时存在session里面的username
username = request.session['username']
user = UserProfile.objects.filter(username=username).first()
if request.method == 'GET':
return render(request, 'user/user_center1.html', context={'user': user})
else:
# 获取到页面表单提交的属性
username = request.POST.get('username')
email = request.POST.get('email')
mobile = request.POST.get('mobile')
icon = request.FILES.get('icon') # icon是内存存储对象
user.username = username
user.email = email
user.mobile = mobile
user.icon = icon
user.save()
# 将头像上传图片到七牛云
# 注意:直接用user.icon会报错,因为他是一个ImageFieldFile对象,我们需要把他转为字符串
sava_path = upload_img(icon, str(user.icon)) # 拿到七牛云存储的路径
user.yunicon = sava_path
# 保存
user.save()
return render(request, 'user/user_center1.html', context={'user': user})
4、models.py
- 由于页面肯定是需要显示云存储的图片的,所以我们要将上传后的云存储路径保存到本地数据库,即在models中我们新增一字段yunicon
- 注意:记得添加字段后,更新数据库表
yunicon = models.CharField(max_length=200, default='') # 定义云存储字段
四、templates模块 1、在user文件下新建user_center1.html
- 其实你可以不用新建,可以直接用之前的那个user_center.html就行,简单改下之前页面的取值,我这里只是方便做统一就都建了一份
2、base.html
五、项目启动及展示



