Flask 用户信息编辑系统

Flask 用户信息编辑系统

web/templates/user/edit.html

{% extends "common/layout_main.html" %}
{% block content %}
{% include "common/tab_user.html" %}
<div class="row m-t  user_edit_wrap"><div class="col-lg-12"><h2 class="text-center">账号信息编辑</h2><div class="form-horizontal m-t m-b"><div class="form-group"><label class="col-lg-2 control-label">手机:</label><div class="col-lg-10"><input type="text" name="mobile" class="form-control" placeholder="请输入手机~~" readonly=""value="{{ current_user.mobile }}"></div></div><div class="hr-line-dashed"></div><div class="form-group"><label class="col-lg-2 control-label">姓名:</label><div class="col-lg-10"><input type="text" name="nickname" class="form-control" placeholder="请输入姓名~~" value="{{ current_user.nickname }}"></div></div><div class="hr-line-dashed"></div><div class="form-group"><label class="col-lg-2 control-label">邮箱:</label><div class="col-lg-10"><input type="text" name="email" class="form-control" placeholder="请输入邮箱~~" value="{{ current_user.email }}"></div></div><div class="hr-line-dashed"></div><div class="form-group"><div class="col-lg-4 col-lg-offset-2"><button class="btn btn-w-m btn-outline btn-primary save">保存</button></div></div></div></div>
</div>
{% endblock %}
{% block js %}
<script src="{{ buildStaticUrl('/js/user/edit.js') }}"></script>
{% endblock %}

web/static/js/edit.js

;
var user_edit_ops={init:function(){this.eventBind();},eventBind:function () {$('user_edit_wrap .save').click(function(){var btn_target = $(this);if (btn_target.hasClass('disabled')){common_ops.alert('正在处理!!请不要重复提交~~');return;}var nickname_target = $('.user_edit_wrap input[name=nickname]')var nickname = nickname_target.val();var email_target = $('.user_edit_wrap input[name=nickname]')var email = email_target.val();if( !nickname || nickname.length < 2){common_ops.tip('请输入符合规范的姓名~~', nickname_target);return false;}if ( !email || email.length < 2){common_ops.tip('请输入符合规范的邮箱~~', nickname_target);return false;}btn_target.addClass('disabled')var data = {nickname: nickname,email: email};$.ajax({url:common_ops.buildUrl("/user/edit"),type:'POST',data:data,dataType:'json',success:function (res) {btn_target.removeClass("disabled");var callback = null;if(res.code ==200){callback = function () {window.location.href = window.location.href;}}common_ops.alert( res.msg, callback);}});});}
};$(document).ready(function(){user_edit_ops.init();
});

这段代码是一个用户编辑页面的前端代码,主要实现了以下功能:

  1. 绑定保存按钮的点击事件,当点击保存按钮时触发。
  2. 检查保存按钮是否被禁用,如果被禁用则提示“正在处理,请不要重复提交”并返回。
  3. 获取用户输入的昵称和邮箱。
  4. 对昵称和邮箱进行验证,如果不符合规范则提示相应的错误信息并返回。
  5. 禁用保存按钮,防止重复提交。
  6. 构建请求的数据,包括昵称和邮箱。
  7. 发送Ajax请求到后端的用户编辑接口。
  8. 处理后端返回的结果,如果成功则刷新页面,如果失败则弹出错误提示。

这段代码的主要作用是实现用户编辑信息的保存功能,并通过Ajax与后端进行交互。在保存按钮被点击时,会获取用户输入的昵称和邮箱,并发送到后端进行处理。处理结果会返回给前端,根据返回的结果进行相应的操作。

问题1:$('.user_edit_wrap...')中为什么要用$符号?

var nickname_target = $('.user_edit_wrap input[name=nickname]') 

在给定的代码中,$符号是jQuery库的一个别名。jQuery是一个流行的JavaScript库,用于简化HTML文档的遍历、事件处理、动画和AJAX操作等任务。$符号是jQuery库的全局变量,它允许我们使用简洁的语法来选择和操作HTML元素。

在你提供的代码中,$('.user_edit_wrap input[name=nickname]')使用了$符号来  选择具有name属性为nicknameinput元素。这个选择器将返回一个jQuery对象,该对象可以用于进一步操作和修改选定的元素。

使用$符号的好处  是它提供了一种简洁而强大的方式来选择和操作HTML元素,使得代码更易读和维护。此外,jQuery还提供了许多实用的方法和功能,可以简化常见的DOM操作和事件处理任务

var common_ops = {
...,tip:function( msg,target ){layer.tips( msg, target, {tips: [ 3, '#e5004f']});$('html, body').animate({scrollTop: target.offset().top - 10}, 100);},....,
}|

这段代码是一个JavaScript对象,其中包含了多个方法和属性。下面是对每个部分的解析:

  1. common_ops:这是一个对象,用于存储各种操作的方法和属性。

  2. tip方法:这是common_ops对象中的一个方法,用于显示提示信息。它接受两个参数:msg表示要显示的提示信息,target表示要显示提示信息的 目标元素 。该方法使用了一个名为layer.tips的函数来显示提示信息,并通过tips参数设置了提示框的样式。这段代码的作用是在页面中显示一个提示框。具体来说,layer.tips()函数用于显示一个提示框,其中的参数包括提示信息msg、目标元素target和配置项{tips: [3, '#e5004f']}。配置项中的tips参数指定了 提示框的样式 和 位置,其中 3表示提示框的方向(上方),#e5004f表示提示框的背景颜色(粉红色)。通过调用这段代码,可以在页面中显示一个带有指定 样式 和 位置 的提示框然后,它使用$('html, body').animate函数来实现页面滚动效果,将目标元素滚动到可见区域。

  3. ...:这表示还有其他方法和属性,但在提供的代码中没有给出具体的实现。

这段代码的作用是在页面中显示提示信息,并实现页面滚动效果,使目标元素可见

问题2: layer.tips( msg, target, { tips: [ 3, '#e5004f'] }); 目标元素target是什么意思?

在这段代码中,目标元素target是指  需要显示提示框的元素。它可以是一个DOM元素的选择器,也可以是一个DOM元素的jQuery对象。当你调用layer.tips()方法时,你需要传入一个目标元素target参数,以告诉提示框应该在哪个元素附近显示。提示框将会相对于目标元素的位置进行定位,并显示在目标元素的上方或下方。

例如,如果你想在一个按钮上显示提示框,你可以使用按钮的选择器作为目标元素target。代码示例如下:

layer.tips('这是一个提示框', '#myButton', { tips: [3, '#e5004f'] });

在上面的示例中,'#myButton'是按钮的选择器,表示目标元素是id为myButton的按钮。提示框将会显示在该按钮的上方,并使用红色#e5004f作为背景颜色。

需要注意的是,目标元素target可以是任何有效的DOM元素选择器或jQuery对象。你可以根据实际情况选择 合适的目标元素  来显示提示框。

我明白了,就是说 目标元素 就是以 目标元素 为 原点 建立一个 物理坐标系 对提示框进行定位!

问题3: ajax 代码 中的success的作用是什么?

success的作用是在ajax请求成功后执行的 回调函数。在这个例子中,当ajax请求成功并返回状态码为200时,会执行success函数中的代码。其中,首先移除按钮的disabled类,然后根据返回的code判断是否需要执行回调函数callback,如果code为200,则将页面重定向到当前页面的URL,最后通过common_ops.alert方法弹出返回的msg信息。

问题4: window.location.href = window.location.href;是什么意思?

window.location.href是JavaScript中的一个属性,用于获取或设置当前页面的URL地址。在给window.location.href赋值时,会将页面重定向到新的URL地址。window.location.href = window.location.href;的意思是将当前页面重定向到当前页面的URL地址,相当于刷新当前页面

问题5:} $(document).ready(function(){ user_edit_ops.init(); });中$符后面的这串代码是什么意思?

这段代码是使用jQuery库中的$函数来选取HTML元素,并在文档加载完成后执行一个函数。具体来说,$(document).ready()函数用于在文档加载完成后执行一个函数,这里的函数是user_edit_ops.init(),它是一个名为user_edit_ops的对象的init方法。这段代码的作用是在页面加载完成后初始化用户编辑操作。

问题6:问题5这串代码 不使用这串代码会有什么影响?

这串代码是jQuery库中的语法,用于在文档加载完成后执行一些操作。如果不使用这串代码,可能会导致以下影响:

  1. 初始化函数不会被调用:这意味着user_edit_ops.init()函数不会被执行,可能会导致页面上的某些功能无法正常工作。
  2. 页面元素可能无法正确绑定事件:$(document).ready()函数确保在文档加载完成后再执行代码,这样可以确保页面上的元素已经完全加载,可以正确地绑定事件。如果不使用这串代码,可能会导致页面上的某些元素无法响应用户的操作。
  3. 可能会导致其他依赖的代码出错:如果其他代码依赖于user_edit_ops.init()函数的执行结果,那么不使用这串代码可能会导致其他代码出现错误或异常。

总之,这串代码的作用是在页面加载完成后执行一些必要的初始化操作,如果不使用这串代码,可能会导致页面功能异常或其他代码出错。

问题7: 问题5$符后面的这串代码中的document指的是什么?

        在这段代码中,document是JavaScript中的一个全局对象,它代表了当前HTML文档。通过document对象,我们可以访问和操作HTML文档中的元素、属性和事件等。

        在这段代码中,$(document)是jQuery库中的语法,它将document对象包装成一个jQuery对象,以便我们可以使用jQuery提供的方法和功能来操作和处理HTML文档。

        所以,$(document).ready(function(){ user_edit_ops.init(); });的意思是在文档加载完成后执行user_edit_ops.init()函数,即在页面加载完成后执行user_edit_ops对象的init()方法。

web/controllers/user/User.py

@route_user.route( "/edit",methods = [ "GET","POST" ] )
def edit():if request.method == "GET":return ops_render( "user/edit.html",{ 'current':'edit' } )resp = { 'code':200,'msg':'操作成功~','data':{} }req = request.valuesnickname = req['nickname'] if 'nickname' in req else ''email = req['email'] if 'email' in req else ''if nickname is None or len( nickname ) < 1:resp['code'] = -1resp['msg'] = "请输入符合规范的姓名~~"return jsonify( resp )if email is None or len( email ) < 1:resp['code'] = -1resp['msg'] = "请输入符合规范的邮箱~~"return jsonify( resp )user_info = g.current_useruser_info.nickname = nicknameuser_info.email = emaildb.session.add( user_info )db.session.commit()return jsonify(resp)

问题1: values是指?

valuesrequest对象的一个属性,用于获取请求中的参数。在这个例子中,request.values用于获取用户提交的表单数据。

问题2: return jsonify(resp) 返回哪儿去了?客户端是指什么?

return jsonify(resp)语句将返回一个JSON格式的响应给客户端。具体来说,它将把字典resp转换为JSON字符串,并将其作为响应的主体返回给客户端。这个响应可以包含状态码、消息和数据等信息。

return jsonify(resp)语句将resp字典转换为JSON格式,并将其作为HTTP响应返回给客户端。在这种情况下,客户端指的是发出HTTP请求的浏览器或其他应用程序。

问题3: nickname = req['nickname'] if 'nickname' in req else '' 是一段flask代码,请介绍一下这段代码,并且说明一下什么是三元表达式?

这段代码是一个条件表达式,也被称为三元表达式。它的作用是检查字典req中是否存在键nickname,如果存在则将其值赋给变量nickname,否则将空字符串赋给nickname

三元表达式是一种简洁的条件语句,它由三个部分组成:条件、真值和假值。语法格式如下:

variable = true_value if condition else false_value

其中,condition是一个布尔表达式,如果为真,则返回true_value,否则返回false_value

在这段代码中,条件是'nickname' in req,如果req字典中存在键nickname,则条件为真,返回req['nickname']的值,即true_value;否则条件为假,返回空字符串'',即false_value

三元表达式可以简化代码,使其更加简洁和易读。它常用于在一行中根据条件选择不同的值进行赋值操作

这段代码的作用就是判断一下在前端html表格中输入没nickname,输入了就输入了,没输入下面别的代码爆msg ‘请输入符合规范的姓名~~’

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

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

相关文章

Java面试题86-95

86. Java代码查错&#xff08;4&#xff09;public class Something { public int addOne(final int x) { return x; }}此代码有错误吗&#xff1f;答案: 错。int x被修饰成final&#xff0c;意味着x不能在addOne method中被修改。87. Java代码查错&#xff08;5&…

Oracle如何自定义数据类型和数组和在数组中使用自定义类型

在Oracle数据库中&#xff0c;你可以自定义数据类型和数组。以下是如何做到这一点的简要指南&#xff1a; 自定义数据类型&#xff1a; 你可以使用CREATE TYPE语句来定义一个新类型。例如&#xff0c;定义一个名为person的类型&#xff0c;它包含两个属性&#xff1a;name和a…

12.Go 函数

1、函数的声明 语法&#xff1a;func 函数名(参数列表)(返回参数列表){函数体} 函数名遵循标识符的命名规则&#xff0c;首字母的大小写决定该函数在其他包的可见性&#xff1a;大写时其他包可见&#xff0c;小写时只有相同的包可以访问&#xff1b;函数的参数和返回值需要使…

GIT提交、回滚等基本操作记录

1、add文件时warning: LF will be replaced by CRLF in .idea/workspace.xml. 原因&#xff1a;windows中的换行符为 CRLF&#xff0c; 而在Linux下的换行符为LF&#xff0c;所以在执行add . 时会出现以下提示 解决&#xff1a;git config core.autocrlf false 2、GIT命令&…

pip 国内镜像源

pip 国内镜像源 部分可用的pip国内镜像源有下面这些&#xff1a; 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣 http://pypi.douban.com/simple Python官方 https://pypi.python.org/simple/ v2ex http://pypi…

HarmonyOS应用开发实战—开箱即用的登录页面3【ArkTS】

文章目录 一.HarmonyOS应用开发实战—开箱即用的登录页面2【ArkTS】【鸿蒙专栏-31】1.1 项目背景1.2 ArkTS详解二.HarmonyOS应用开发实战—开箱即用的登录页面3【ArkTS】2.1 ArkTS页面源码2.2 代码解析2.3 心得一.HarmonyOS应用开发实战—开箱即用的登录页面2【ArkTS】【鸿蒙专…

【微信】公众号授权绑定登录流程详解

在做微信公众号开发时&#xff0c;经常需要对公众号上面的菜单做授权登录&#xff0c;如果是首次登录还需要做微信openId和系统账号的绑定操作。 这里做如下假设&#xff1a; 系统前端地址&#xff1a;http://www.test.com系统接口地址&#xff1a;http://api.test.com需要打…

Activity启动过程

首语 Activity作为Android四大组件中使用最频繁的组件&#xff0c;也是和用户交互最多的组件&#xff0c;可见它在Android技术体系的核心地位&#xff0c;了解Activity的启动过程可以帮助我们更好的了解Android系统和使用Activity。 文章目录 首语Activity启动过程根Activity…

加强->servlet->tomcat

0什么是servlet jsp也是servlet 细细体会 Servlet 是 JavaEE 的规范之一&#xff0c;通俗的来说就是 Java 接口&#xff0c;将来我们可以定义 Java 类来实现这个接口&#xff0c;并由 Web 服务器运行 Servlet &#xff0c;所以 TomCat 又被称作 Servlet 容器。 Servlet 提供了…

打造完备数据生态,「开放互信、合作共赢」: 拓数派亮相2023龙蜥操作系统大会

拓数派始终持「开放互信&#xff0c;合作共赢」的理念&#xff0c;通过积极建立合作伙伴生态网络、构建生态工具、打造活跃的技术和用户社区等方式&#xff0c;构筑更加完善的数据生态体系&#xff0c;为用户带来更加便捷的使用体验。2023年12月17-18日&#xff0c;由开放原子开…

如何实现无公网ip环境访问vscode远程开发【内网穿透】

文章目录 前言1、安装 OpenSSH2、vscode 配置 ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu 安装 cpolar 内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定 TCP 端口地址5.1 保留一个固定 TCP 端口地址5.2 配置固定 TCP 端口地址5.3 测试固定公网地址远…

vue exceljs json数据转excel

json数据转excel 有时候我们会遇到这样一个需求&#xff0c;就是将数据转成excel下载&#xff0c;这一般都是由后端来处理&#xff0c;使用插件poi轻松搞定。如果只有少量数据&#xff0c;那么能不能避免调用后端接口&#xff0c;前端直接处理呢&#xff1f; 答案是&#xff…

使用Vue3开发学生管理系统模板5 学生家长信息的实现

字段设计 IDname&#xff1a;姓名&#xff0c;字符串&#xff0c;最长36个字符gender&#xff1a;性别&#xff0c;字符串&#xff0c;最长6个字符串age&#xff1a;年龄&#xff0c;数字类型phone&#xff1a;电话&#xff0c;字符串&#xff0c;最长20个字符student_id&…

无需手动搜索!轻松创建IntelliJ IDEA快捷方式的Linux教程

轻松创建IntelliJ IDEA快捷方式的Linux教程 一、IntelliJ IDEA简介二、在Linux系统中创建快捷方式的好处三、命令行创建IntelliJ IDEA快捷方式四、图形界面创建IntelliJ IDEA快捷方式五、常见问题总结 一、IntelliJ IDEA简介 IntelliJ IDEA是一个由JetBrains搞的IDE&#xff0…

搭建FTP服务器详细介绍

一.FTP简介 &#xff11;.&#xff11;什么是FTP &#xff11;.&#xff12;FTP服务器介绍 &#xff11;.&#xff13;FTP服务器优缺点 二.FTP服务器的搭建与配置 2.1 开启防火墙 2.2创建组 2.3创建用户 2.4安装FTP服务器 2.5配置FTP服务器 &#xff12;.&#xff…

麒麟KYLINOS _ 传书 _ 如何传输文件?

原文链接&#xff1a;麒麟KYLINOS | 传书 | 如何传输文件&#xff1f; hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在麒麟KYLINOS操作系统上使用自带的文件传输软件——传书。在日常工作和生活中&#xff0c;我们经常需要在不同设备之间传输文件和信息。传书…

论文阅读《Restormer: Efficient Transformer for High-Resolution Image Restoration》

论文地址:https://openaccess.thecvf.com/content/CVPR2022/html/Zamir_Restormer_Efficient_Transformer_for_High-Resolution_Image_Restoration_CVPR_2022_paper.html 源码地址:https://github.com/swz30/Restormer 概述 图像恢复任务旨在从受到各种扰动(噪声、模糊、雨滴…

账号租号平台PHP源码,支持单独租用或合租使用

源码简介 租号平台源码&#xff0c;采用常见的租号模式。 平台的主要功能如下&#xff1a; 支持单独租用或采用合租模式&#xff1b; 采用易支付通用接口进行支付&#xff1b; 添加邀请返利功能&#xff0c;以便站长更好地推广&#xff1b; 提供用户提现功能&#xff1b;…

超强整理,Web自动化测试-验证码/cookie机制(详全)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、后台登录案例 …

C#使用SyntaxTree获取.cs文件中的属性名和注释

有时候&#xff0c;我们可能需要获取.cs文件中的属性和对应的注释来生成一些代码&#xff0c;比如SQL查询什么的。 但使用正则匹配有时候会不准确。搜索了下&#xff0c;发现微软提供了代码解析的API。 具体如下两个方法&#xff1a; /// <summary> /// 获取所有属性和…