1.2头像设置功能

首先我们要实现以下的效果

1、我们先把前端文件移到templates中

移动去后我们会发现找不到页面了,其实和之前基本设置中一样,导致的原因就是因为我们把前端文件移动走了,html内容却没有修改

将user的前端文件中头像设置中a标签用url_for直接指向我们的pic_info 视图函数就可以了

先把前端的代码放上来

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>用户中心</title>
 6     <link rel="stylesheet" type="text/css" href="../../static/news/css/reset.css">
 7     <link rel="stylesheet" type="text/css" href="../../static/news/css/main.css">
 8     <script type="text/javascript" src="../../static/news/js/jquery-1.12.4.min.js"></script> 9     <script type="text/javascript" src="../../static/news/js/jquery.form.min.js"></script>
10     <script type="text/javascript" src="../../static/news/js/user_pic_info.js"></script>
11 </head>
12 <body class="inframe_body">
13     <form class="pic_info">
14         <h3>头像设置</h3>
15         <div class="form-group">
16             <label class="label01">当前图像:</label>
17             <img src="{% if context.user.avatar_url %}{{ context.user.avatar_url }}{% else %}../../static/news/images/user_pic.png{% endif %}" class="lgin_pic">
18         </div>
19         <div class="form-group">
20             <label>上传图像:</label>
21             <input type="file" name="avatar" class="input_file">
22         </div>
23         
24         <div class="form-group">
25             <input type="submit" value="保 存" class="input_sub">
26         </div>
27     </form>
28 </body>
29 </html>

2、因为有头像存储的步骤,所以这里我们有两种选择

  2.1自己搭建一个服务器来存储(一般大公司会自己搭建)

  2.2使用第三方平台(个人以及小公司)

  这里不用说了我们肯定使用第三方平台,这里我们使用的是七牛云平台(第三方平台博客中介绍使用)

我们现在第三方文件中创建七牛的文件file_storage.py

 以下是七牛云的代码

 1 # 专门处理文件上传存储的
 2 import qiniu
 3 
 4 
 5 access_key = ''
 6 secret_key = ''
 7 bucket_name = ''
 8 
 9 
10 def upload_file(data):
11     """
12     上传文件到七牛云
13     :param data: 要上传的文件的二进制
14     """
15     q = qiniu.Auth(access_key, secret_key)
16     token = q.upload_token(bucket_name)
17     ret, info = qiniu.put_data(token, None, data)
18 
19     print(ret['key'])
20 
21     if info.status_code != 200:
22         raise Exception('七牛上传失败')
23 
24     return ret['key']
25 
26 #
27 # if __name__ == '__main__':
28 #
29 #     path = '/Users/zhangjie/Desktop/Images/timg.jpeg'
30 #     with open(path, 'rb') as file:
31 #         upload_file(file.read())

3、然后是后端的代码

 1 @user_blue.route("/pic_info",methods = ["POST","GET"])
 2 @user_login_data
 3 def pic_info():
 4     user = g.user
 5     # 接收用户信息同时判断是否登录
 6     if not user:
 7         return redirect(url_for('index.index'))
 8     # 当需要提交数据的时候
 9     if request.method == "POST":
10     # 接收参数
11         avatar_file = request.files.get("avatar")
12         try:
13             #用read()函数读取判断文件中是否有内容
14             avatar_data = avatar_file.read()
15         except Exception as e:
16             #日志记录
17             current_app.logger.error(e)
18             return jsonify(errno=RET.PARAMERR, errmsg="参数错误")
19 
20         try:
21             #用key变量接收上传完七牛云返回的指纹
22             key = upload_file(avatar_data)
23         except Exception as e:
24             current_app.logger.error(e)
25             return jsonify(errno=RET.THIRDERR, errmsg="七牛云存储错误")
26     #上传到数据库
27         user.avatar_url = key
28 
29         try:
30             #数据库提交
31             db.session.commit()
32         except Exception as e:
33             current_app.logger.error(e)
34             return jsonify(errno=RET.DATAERR, errmsg="数据库上传失败")
35         #将上传完毕的key变量通过拼接七牛云的空间管理的域名用avatar_url作为键传给前端的js
36         #用于实时修改头像
37         data = {
38             "avatar_url":constants.QINIU_DOMIN_PREFIX + key
39         }
40         #返回结果
41         return jsonify(errno=RET.OK, errmsg="上传成功",data=data)
42     #传递上下文
43     context = {
44         "user":user.to_dict() if user else None
45     }
46     return render_template("news/user_pic_info.html",context=context)
原文地址:https://www.cnblogs.com/Hdwmsyqdm/p/13919393.html