• 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)
  • 相关阅读:
    重定向输出流实现程序日志
    为新员工分配部门
    从控制台接收输入的身份证号
    判断某一年是否为闰年
    linux重置mysql密码(root权限)
    mysql按照字符串类型的数值按数值进行排序
    android 下拉刷新
    android studio gradle 配置
    搭建自己的iOS内测分发平台
    http_range说明
  • 原文地址:https://www.cnblogs.com/Hdwmsyqdm/p/13919393.html
Copyright © 2020-2023  润新知