前言
上篇blog已经给大家讲述了个人头像本地存储的方法,但是一般情况下,由于本地存储的容量是有限的,基本上所有的公司的图片都会借助存储服务器,那本章我就给大家详细介绍一下七牛云存储方式
主要流程即:
--> 当用户点击【个人资料】菜单时,会链接进【个人资料】界面--> 然后在这里,可以更改你的用户信息:姓名、手机号、头像头像上传,存储到七牛云
主要知识点:
个人头像存取于【七牛云存储】
环境:
Pycharmpython3.6mysql 5.7django 2.0.13
一、七牛云存储使用介绍
1、七牛云注册及使用
七牛云注册地址:/signup
2、七牛云上传资源文档介绍
七牛云表单上传:/kodo/1272/form-uploadPython SDK用法文档:/kodo/1242/python3、七牛云下载
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-/' + file_namereturn save_path
3、views.py
新增一【用户中心】视图函数,直接在原本地存储方法那里copy一份过来,进行简单修改即可# @login_requireddef user_center1(request):"""用户的个人中心1:个人头像存储七牛云:param request::return:"""# 拿到之前登录时存在session里面的usernameusername = 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 = usernameuser.email = emailuser.mobile = mobileuser.icon = iconuser.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='') # 定义云存储字段