Flsak爱家租房--个人信息

0.页面展示效果

在这里插入图片描述
在这里插入图片描述

1.设置用户头像–后端代码

在这里插入图片描述

# coding:utf-8from . import api
from ihome.utils.commons import login_required
from flask import g, current_app, jsonify, request, session
from ihome.utils.response_code import RET
from ihome.utils.image_storage import storage
from ihome.models import User
from ihome import db, constants@api.route("/users/avatar", methods=["POST"])
@login_required
def set_user_avatar():"""设置用户的头像参数: 图片(多媒体表单格式)  用户id (g.user_id)"""# 装饰器的代码中已经将user_id保存到g对象中,所以视图中可以直接读取user_id = g.user_id# 获取图片image_file = request.files.get("avatar")if image_file is None:return jsonify(errno=RET.PARAMERR, errmsg="未上传图片")image_data = image_file.read()# 调用七牛上传图片, 返回文件名try:file_name = storage(image_data)except Exception as e:current_app.logger.error(e)return jsonify(errno=RET.THIRDERR, errmsg="上传图片失败")# 保存文件名到数据库中try:User.query.filter_by(id=user_id).update({"avatar_url": file_name})db.session.commit()except Exception as e:db.session.rollback()current_app.logger.error(e)return jsonify(errno=RET.DBERR, errmsg="保存图片信息失败")avatar_url = constants.QINIU_URL_DOMAIN + file_name# 保存成功返回return jsonify(errno=RET.OK, errmsg="保存成功", data={"avatar_url": avatar_url})

2.设置用户头像–前端代码

在这里插入图片描述

<!DOCTYPE html>
<html>
<head> <meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><title>爱家-个人信息</title><link href="/static/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet"><link href="/static/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet"><link href="/static/css/reset.css" rel="stylesheet"><link href="/static/plugins/bootstrap-datepicker/css/bootstrap-datepicker.min.css" rel="stylesheet"><link href="/static/css/ihome/main.css" rel="stylesheet"><link href="/static/css/ihome/profile.css" rel="stylesheet">
</head>
<body><div class="container"><div class="top-bar"><div class="nav-bar"><h3 class="page-title">个人信息</h3><a class="nav-btn fl" href="/my.html"><span><i class="fa fa-angle-left fa-2x"></i></span></a></div></div><div class="menus-con"><ul class="menus-list"><li><div class="menu-title"><h3>头像</h3></div><div class="menu-content"><img id="user-avatar" src=""><div class="menu-text"><form id="form-avatar" enctype="multipart/form-data">选择头像:<input type="file" accept="image/*" name="avatar"><input type="submit" class="btn btn-success" value="上传"></form></div></div></li><li><div class="menu-title"><h3>用户名</h3></div><div class="menu-content"><form id="form-name" action="/api/profile/name" method="post"><input type="text" name="name" id="user-name"><input type="submit" class="btn btn-success" value="保存"></form><div class="error-msg"><i class="fa fa-exclamation-circle"></i>用户名已存在,请重新设置</div></div></li></ul></div><div class="popup_con"><div class="popup"><p>保存成功!</p></div><div class="mask"></div></div><div class="footer"><p><span><i class="fa fa-copyright"></i></span>爱家租房&nbsp;&nbsp;享受家的温馨</p></div> </div><script src="/static/js/jquery.min.js"></script><script src="/static/js/jquery.form.min.js"></script><script src="/static/plugins/bootstrap/js/bootstrap.min.js"></script><script src="/static/plugins/bootstrap-datepicker/js/bootstrap-datepicker.min.js"></script><script src="/static/plugins/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js"></script><script src="/static/js/ihome/profile.js"></script>
</body>
</html>

3.设置用户头像–js代码

在这里插入图片描述

function showSuccessMsg() {//fadeIn--使用淡入效果来显示$('.popup_con').fadeIn('fast', function() {setTimeout(function(){$('.popup_con').fadeOut('fast',function(){}); },1000) });
}function getCookie(name) {var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");return r ? r[1] : undefined;
}$(document).ready(function () {$("#form-avatar").submit(function (e) {// 阻止表单的默认行为e.preventDefault();// 利用jquery.form.min.js提供的ajaxSubmit对表单进行异步提交$(this).ajaxSubmit({url: "/api/v1.0/users/avatar",type: "post",dataType: "json",headers: {"X-CSRFToken": getCookie("csrf_token")},success: function (resp) {if (resp.errno == "0") {// 上传成功var avatarUrl = resp.data.avatar_url;$("#user-avatar").attr("src", avatarUrl);} else if (resp.errno == "4101") {location.href = "/login.html";} else {alert(resp.errmsg);}}})});

4.修改用户名–后端代码

在这里插入图片描述

@api.route("/users/name", methods=["PUT"])
@login_required
def change_user_name():"""修改用户名"""# 使用了login_required装饰器后,可以从g对象中获取用户user_iduser_id = g.user_id# 获取用户想要设置的用户名req_data = request.get_json()if not req_data:return jsonify(errno=RET.PARAMERR, errmsg="参数不完整")name = req_data.get("name")  # 用户想要设置的名字if not name:return jsonify(errno=RET.PARAMERR, errmsg="名字不能为空")# 保存用户昵称name,并同时判断name是否重复(利用数据库的唯一索引)try:User.query.filter_by(id=user_id).update({"name": name})db.session.commit()except Exception as e:current_app.logger.error(e)db.session.rollback()return jsonify(errno=RET.DBERR, errmsg="设置用户错误")# 修改session数据中的name字段session["name"] = namereturn jsonify(errno=RET.OK, errmsg="OK", data={"name": name})

5.修改用户名–前端代码

在这里插入图片描述详细代码见本文第二部分。

6.修改用户名–js代码

在这里插入图片描述

     //修改用户名的js代码$("#form-name").submit(function(e){e.preventDefault();// 获取参数var name = $("#user-name").val();if (!name) {alert("请填写用户名!");return;}$.ajax({url:"/api/v1.0/users/name",type:"PUT",data: JSON.stringify({name: name}),contentType: "application/json",dataType: "json",headers:{"X-CSRFTOKEN":getCookie("csrf_token")},success: function (data) {if ("0" == data.errno) {$(".error-msg").hide();showSuccessMsg();} else if ("4001" == data.errno) {$(".error-msg").show();} else if ("4101" == data.errno) {location.href = "/login.html";}}});})

7.获取用户信息–后端代码

在这里插入图片描述

@api.route("/user", methods=["GET"])
@login_required
def get_user_profile():"""获取用户信息"""user_id = g.user_id# 查询数据库获取个人信息try:user = User.query.get(user_id)except Exception as e:current_app.logger.error(e)return jsonify(errno=RET.DBERR, errmsg="获取用户信息失败")if user is None:return jsonify(errno=RET.NODATA, errmsg="无效操作")return jsonify(errno=RET.OK, errmsg="OK", data=user.to_dict())

8.获取用户信息–前端js

在这里插入图片描述

9.获取用户信息–前端html

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

json返回值为null显示key值的设置

使用的是阿里的json ----------com.alibaba.fastjson.JSONObject; Map<String,Object> map new HashMap<String,Object>(); return JSONObject.toJSONString(map); --------转义的时候&#xff0c;map中值是null的字段会被忽略掉&#xff0c;转义的json没有带n…

C++ string::size_type

从逻辑上讲&#xff0c;size()成员函数应该似乎返回整型数值&#xff0c;但事实上&#xff0c;size操作返回是string::size_type类型的值。string类类型和其他许多库类型都定义了一些配套类型(companion type)。通过这些配套类型&#xff0c;库函数的使用就与机器无关(machine-…

需求分遵循的准则

•必须理解并描述问题的信息域&#xff0c;根据这条准则应该建立数据模型。 •必须定义软件应完成的功能&#xff0c;这条准则要求建立功能模型。 •必须描述作为外部事件结果的软件行为&#xff0c;这条准则要求建立行为模型 •必须对描述信息、功能和行为的模型进行分解&…

MATLAB显示错误使用untitled,新手,用gui界面画李萨如图,出错,求解答

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼function varargout untitled1(varargin)% UNTITLED1 MATLAB code for untitled1.fig% UNTITLED1, by itself, creates a new UNTITLED1 or raises the existing% singleton*.%% H UNTITLED1 returns the handle to a new UNTITL…

软件开发如同木匠做桌子

做一张桌子看起来十分的简单。任何人都可以做&#xff0c;不是吗&#xff1f;找个大块的四方形木板&#xff0c;四个等长的木头柱子&#xff0c;四个钉子和一个锤子。把四个柱子钉到四方板的四个角上&#xff0c;你就做成了一个桌子。当当当&#xff01; 现在来让一个真正的木…

Django加载静态文件

方法一: 1.在app目录中创建static 目录&#xff0c;并在该目录下创建存储css,img,js的子目录&#xff0e; 2.在相应的目录下创建相对应的静态文件. static/css/mystyle.css, static/img/timg.jpg,(保存图片) static/js/myjs.js 3.在模板文件中加载静态文件 例: mystyle.css: bo…

Flsak爱家租房--实名认证

0.页面展示效果 1.设置用户实名认证信息–后端代码 api.route("/users/auth", methods["POST"]) login_required def set_user_auth():"""保存实名认证信息"""user_id g.user_id# 获取参数req_data request.get_json()if …

IntelliJ 启动不同端口的两个spring cloud项目

IntelliJ 启动不同端口的两个spring cloud项目 1&#xff0c;使用maven进行clean package 2&#xff0c;在Terminal界面&#xff0c;输入java -jar xxx.jar --server.port8001就可以更换server的启动端口了&#xff1b;

python sort怎么用,Linux Sort命令详细用法(有实例)

Linux Sort命令详细用法(有实例)sort是在Linux里非常常用的一个命令&#xff0c;管排序的&#xff0c;集中精力&#xff0c;五分钟搞定sort&#xff0c;现在开始&#xff01;Linux sort命令进阶&#xff1a;1 sort的工作原理sort将文件的每一行作为一个单位&#xff0c;相互比较…

需求分析阶段各种图的功能

实体联系图&#xff0c;描绘数据对象及数据对象之间的关系&#xff0c;是用于建立数据模型的图形。数据流图是建立功能模型的基础。状态转换图描绘了系统的各种行为模式和在不同状态间转换的方式。

python面试题总结(7)--操作类

1. Python 交换两个变量的值 答&#xff1a;在 Python 中交换两个对象的值通过下面的方式即可 a , b b ,a 但是需要强调的是这并不是元组解包&#xff0c;通过 dis 模块可以发现&#xff0c;这是交换操作的字节码是 ROT_TWO&#xff0c;意思是在栈的顶端做两个值的互换操作。…

选择让孩子练习羽毛球的家长好好看看!

一、初级阶段 主要要练习小孩的各项身体素质指标、基础的发球和高远球、最基础的步伐训练。根据小孩年龄的不同以及练习频率的不同&#xff0c;大概需要100-300小时的训练量&#xff08;训练间隔天数越多&#xff0c;时间需要越长&#xff09;。 二、初级提高阶段 高远球对抗能…

LOJ#6281. 数列分块入门 5

内存限制&#xff1a;256 MiB时间限制&#xff1a;500 ms标准输入输出题目类型&#xff1a;传统评测方式&#xff1a;文本比较上传者&#xff1a; hzwer提交提交记录统计讨论 1测试数据题目描述 给出一个长为 nnn 的数列&#xff0c;以及 nnn 个操作&#xff0c;操作涉及区间开…

版本控制工具历史的10个里程碑

导读&#xff1a;作者Eric Raymond在flourish上发表的一篇《Astonishments, ten, in the history of version control》&#xff0c;文中总结了版本控制工具的重要10个里程碑&#xff0c;一起与开发者分享下。 如果你想要了解真正的历史&#xff0c;你需要回到在打孔卡上进行人…

php把语音转成帧,[转载]用TCP/IP实现自己简单的应用程序协议:成帧器部分

在前面《字节和字符,对信息进行编码》&#xff0c;《Socket>流&#xff0c;TCP连接,TCP可靠性概述》一系列的随笔中我们已经表述了相应的理论知识&#xff0c;现在可以动手实现一个自己的应用程序协议。将 数据转换成在线路上传输的字节序列只完成了一半的工作&#xff0c;在…

实体联系图简介

通常&#xff0c;使用实体联系图(entity relationship diagram)来建立数据模型。可以把实体联系图简称为ER图&#xff0c;相应地可把用ER图描绘的数据模型称为ER模型。 ER图中包含了实体(即数据对象)、关系和属性3种基本成分&#xff0c;通常用矩形框代表实体&#xff0c;用连…

Flask爱家租房--城区信息

0.效果展示 城市列表使用缓存的过程 1.后端代码 # coding:utf-8from . import api from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.models import Area, House, Facility, HouseImage, User, Order from …

数值计算算法-多项式插值算法的实现与分析

数值计算是指在数值分析领域中的算法。数值分析是专门研究和数字以及近似值相关的数据问题&#xff0c;数值计算在数值分析的研究中发挥了特别重要的作用。 多项式插值是计算函数近似值的一种方法。其中函数值仅在几个点上已知。 该算法的基础是建立级数小于等于n的一个插值多项…

HIVE ORC 报错ClassCastException

HIVE ORC格式的表查询报错 Failed with exception java.io.IOException:java.lang.ClassCastException: org.apache.hadoop.hive.ql.io.orc.OrcStruct cannot be cast to org.apache.hadoop.io.BinaryComparable 建表语句如下&#xff1a; CREATE EXTERNAL TABLE test_orc( te…

程序型语言VS.编译型语言

导读&#xff1a;每日[快讯精选]是由CSDN研发频道推出的特色栏目&#xff0c;每一天我们将从国外技术媒体(例如Hacker News、Reddit...等等)中挑选出有价值的新闻简讯&#xff0c;让您在第一时间掌握业界主流的技术文摘&#xff0c;每天清晨为您献上第一份技术早餐。 [1]程序型…