关于Django使用Jquery异步刷新

news/2024/7/27 8:06:42/文章来源:https://blog.csdn.net/G_yyyy/article/details/136633574

GET请求

Jquery代码(调用视图发送邮箱验证码)

    $(document).ready(function() {// 获取发送验证码的按钮var btn = $('#send_code');// 设置按钮为禁用状态btn.prop('disabled', true);// 监听邮箱输入框的变化$('#email').on('input', function() {// 启用按钮btn.prop('disabled', false);});// 点击发送验证码的按钮btn.click(function() {// 获取用户输入的邮箱var email = $('#email').val();// 发送ajax请求,向邮箱发送验证码$.ajax({url: "/user/send_code/", // 根据您的实际情况修改为后端接口地址data: {'email': email},type: 'GET',dataType: 'json',success: function(data) {if (data.status === 'success') {// 发送成功,显示提示信息,禁用按钮,倒计时btn.text('发送成功');btn.prop('disabled', true);var seconds = 60;var timer = setInterval(function() {seconds -= 1;btn.text(seconds + '秒后可重新发送');if (seconds === 0) {// 倒计时结束,启用按钮,重置文本btn.prop('disabled', false);btn.text('发送验证码');clearInterval(timer);}}, 1000);} else {// 发送失败,显示提示信息btn.text('发送失败,请重试');}}});// 阻止按钮的默认行为return false;});
});

python代码(视图函数,用于产生随机验证码)

def send_code(request):# 用于创建验证码对象res = {'status': 'success', 'info': 'ok'}email = request.GET['email']code = ''for i in range(6):n = random.randint(0, 9)b = chr(random.randint(65, 90))s = chr(random.randint(97, 122))code += str(random.choice([n, b, s]))mail.send_mail("验证码", code, sender, recipient_list=[email])checkcode.objects.create(email=email, code=code, create_time=time.time())return JosnResponse(res)

POST请求

Jquery代码(发送数据验证请求并跳转)

$('#submit').on('click', function() {const username = $('#username').val();const password = $('#password').val();const code = $('#code').val();const career = $('#careers').val();const email = $('#email').val();$.ajax({url: '/user/register/', // 根据您的实际情况修改为后端接口地址type: 'POST',data: JSON.stringify({ username, password, email, career, code }),contentType: 'application/json',success: function(data) {console.log(data);  // 在控制台打印出data的内容if (data.status == 'error') {alert(data.message); // Display error message} else {alert('User registered successfully'); // Show success messagewindow.location.href = '/index'; // Redirect to another page}},error: function(xhr, status, error) {console.error('Error during registration:', error);}});return false;
});

python代码(数据校验,数据库存储)

def register(request):if request.method == 'GET':return render(request, 'login/register.html')elif request.method == 'POST':data = json.loads(request.body)email = data.get('email')username = data.get('username')code = data.get('code')password = data.get('password')career = data.get('career')res = {'status': 'error', 'message': ''}#  校验用户是否存在try:  # 排除并发写入时引发的索引重复,相同的uesrname插入old_users = User.objects.filter(email=email)except Exception as e:res['message'] = '用户已存在'return JsonResponse(res)if old_users:res['message'] = '用户已存在'return JsonResponse(res)#  校验验证码是否过期codes = checkcode.objects.filter(email=email, is_active=True)if not codes:res['message'] = '验证码未发送或失效'return JsonResponse(res)sign = Falsefor real in codes:real.is_active = Falsereal.save()oldtime = float(real.create_time)if (time.time() - oldtime) <= 300 and code == real.code:sign = Trueif not sign:res['message'] = '未获取到有效验证码或验证码错误'return JsonResponse(res)l1 = len(username)if l1 > 10:res['message'] = '用户名长度不合法'return JsonResponse(res)# 对密码进行哈希存储pwd = hashlib.md5()pwd.update(password.encode())pwd_new = pwd.hexdigest()User.objects.create(username=username, email=email, password=pwd_new, career=career)request.session['username'] = usernamerequest.session['email'] = emailres['status'] = 'success'res['message'] = '注册成功'return JsonResponse(res)

小结

对于这种有可能需要停留在原页面,保持原有状态的,前端一律采用Jquery能省很多事

因为常规的视图函数返回结果是HttpResponse或者HttpRedirectResponse

这种响应结果会直接渲染在html页面上,不符合我们的业务逻辑

视图函数中定义字典,字典类型可以在不报错的情况下转为JsonResponse

而在前端中拿到的响应结果必须是json数据(否则无法进行对data属性的调用),

换言之后端返回的响应体必须是JsonResponse,仅仅用json.dumps(res)还是不够,前端仍然无法调到正确响应结果

对于django中的路由

个人觉得,只要不影响的情况下,想省事一点,对于有访问不到的路由(末尾有无斜杠会导致各种错误的),可以把有斜杠和没有斜杠都写着,那样是最保险的写法,因为完全不需要django帮我们补全末尾斜杠(如果是django帮我们补全的话,访问的时候相当于重定向,如果此时还是post请求,那么会造成数据的丢失)所以在路由这块最好把两种形式都写上

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

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

相关文章

mysql如何开启手动提交事务

在mysql中&#xff0c;有一个变量autocommit&#xff0c;表示自动提交&#xff0c;默认为1&#xff0c;表示开启自动提交。通过以下命令查询 select autocommit;当autocommit为1时&#xff0c;任何一条sql语句都是一个事务&#xff0c;执行完由mysql自动提交。如果想自己决定什…

鸿蒙实战开发学习:【HiView插件开发】

概述 Hiview是一个跨平台的终端设备维测服务集&#xff0c;其中是由插件管理平台和插件实现的各自功能构成整套系统。 本文描述了hiview插件开发的全部流程。 插件的概念 整节部分包括了插件的概念&#xff0c;事件源的概念&#xff0c;流水线的概念等基本概念 插件的定义 …

【SpringCloud微服务实战01】Eureka 注册中心

前言 在 Eureka 架构中&#xff0c;微服务角色有两类&#xff1a; EurekaServer &#xff1a;服务端&#xff0c;注册中心 记录服务信息 心跳监控 EurekaClient &#xff1a;客户端 Provider &#xff1a;服务提供者&#xff0c;例如案例中的 user-service …

吴恩达机器学习笔记 十八 制定一个性能评估标准 学习曲线 高偏差 高方差

一个模型的好坏的评估基准可以从下面几个方面考虑&#xff1a; 1.考虑人类在这个问题上的表现 2.对比竞争算法的表现 3.根据经验猜测 判断是高偏差还是高方差 训练样本数量越多&#xff0c;越难完美地拟合每个样本&#xff0c;因此 J_train 会逐渐增大一点点&#xff0c;但泛…

创造一款安卓自定义控件(4)——使用Matrix的setPolyToPoly方法实现图像纠正

接上文&#xff1a; 创造一款安卓自定义控件_任意4顶点裁剪框http://t.csdnimg.cn/vu1r5 创造一款安卓自定义控件_任意4顶点裁剪框2_为裁剪框添加放大镜功能http://t.csdnimg.cn/qkngh 创造一款安卓自定义控件_裁剪原理介绍http://t.csdnimg.cn/ORRRL 需求 随着需求修改&#x…

Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%

亲爱的社区小伙伴们&#xff0c;我们很高兴地向大家宣布&#xff0c;在 3 月 8 日我们引来了 Apache Doris 2.1.0 版本的正式发布&#xff0c;欢迎大家下载使用。 在查询性能方面&#xff0c; 2.1 系列版本我们着重提升了开箱盲测性能&#xff0c;力争不做调优的情况下取得较好…

Python绘图-14绘制3D图(下)

14.7绘制3D等高线图个性化colormap 14.7.1图像呈现 14.7.2绘图代码 import numpy as np # 导入numpy库&#xff0c;numpy是Python的一个强大的数值计算扩展程序库&#xff0c;支持大量的维度数组与矩阵运算。 import matplotlib.pyplot as plt # 导入matplotlib的绘图模块p…

【漏洞复现】网康NS-ASG应用安全网关 index.php SQL注入漏洞(CVE-2024-2330)

0x01 产品简介 网康科技的NS-ASG应用安全网关是一款软硬件一体化的产品&#xff0c;集成了SSL和 IPSecQ&#xff0c;旨在保障业务访问的安全性&#xff0c;适配所有移动终端&#xff0c;提供多种链路均衡和选择技术&#xff0c;支持多种认证方式灵活组合&#xff0c;以及内置短…

【数据结构】树与堆 (向上/下调整算法和复杂度的分析、堆排序以及topk问题)

文章目录 1.树的概念1.1树的相关概念1.2树的表示 2.二叉树2.1概念2.2特殊二叉树2.3二叉树的存储 3.堆3.1堆的插入&#xff08;向上调整&#xff09;3.2堆的删除&#xff08;向下调整&#xff09;3.3堆的创建3.3.1使用向上调整3.3.2使用向下调整3.3.3两种建堆方式的比较 3.4堆排…

数据通信练习题

1.0osi七层模型 应用层 data 表示层 会话层 传输层 数据段 防火墙&#xff0c;端口&#xff08;TCP UDP&#xff09; 网络层 数据包 路由器 数据链路层 数据帧 交换机 物理层 比特流 网卡 2.IP地址分类 私有地址 A类 0--127 10.0.0.0…

基于HarmonyOS ArkTS中秋国庆祝福程序、以代码之名,写阖家团圆祝福

中秋、国庆双节将至&#xff0c;作为程序员&#xff0c;以代码之名&#xff0c;表达对于阖家团圆的祝福。本节将演示如何在基于HarmonyOS ArkUI的SwiperController、Image、Swiper等组件来实现节日祝福轮播程序。 规则要求具体要求如下&#xff1a; 1、根据主题&#xff0c;用…

计算机网络——OSI网络层次模型

计算机网络——OSI网络层次模型 应用层表示层会话层传输层TCP和UDP协议复用分用 网络层数据链路层物理层OSI网络层次模型中的硬件设备MAC地址和IP地址MAC地址IP地址MAC地址和IP地址区别 OSI网络层次模型通信过程解释端到端点到点端到端和点到点的区别 我们之前简单介绍了一下网…

LLM推理框架Triton Inference Server学习笔记(一): Triton Inference Server整体架构初识

官方文档查阅: TritonInferenceServer文档 1. 写在前面 这篇文章开始进行大语言模型(Large Language Model, LLM)的学习笔记整理&#xff0c;这次想从Triton Inference Server框架开始&#xff0c;因为最近工作上用到了一些大模型部署方面的知识&#xff0c; 所以就快速补充了…

华为ce12800交换机m-lag(V-STP模式)配置举例

配置## 标题思路 采用如下的思路配置M-LAG双归接入IP网络&#xff1a; 1.在Switch上配置上行接口绑定在一个Eth-Trunk中。 2.分别在SwitchA和SwitchB上配置V-STP、DFS Group、peer-link和M-LAG接口。 3.分别在SwitchA和SwitchB上配置LACP M-LAG的系统优先级、系统ID。 4.分别在…

外包干了20天,技术退步明显......

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

数据库(SQL sever)

本博客将主要讲述数据库&#xff08;SQL sever&#xff09; 1.数据库解决的数据问题&#xff1a; Data redundancy and inconsistency(数据冗余和不一致) Difficulty in accessing data Data isolation (数据孤立) Integrity problems (完整性问题) Atomicity of updates…

bug - poi getMergedRegion合并后的行列number错误

第一个CellRangeAddress 的Row number 应该是0&#xff0c;但是给出的是1。 其它的CellRangeAddress 与实际大致相差4-5不等&#xff0c;没有规律。 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>…

自动从Android上拉取指定文件

需求场景 利用Mac中的脚本编辑器实现从连接的Android设备中获取指定的文件。 环境 macOS Monterey 版本 12.7.1脚本编辑器adb环境&#xff08;如果没有的话&#xff0c;可以网上搜下Mac配置adb&#xff09; 实现方案 1、打开脚本编辑器&#xff1b; 2、新建一个脚本文件&…

Python办公自动化之PDF(二)

Python操作PDF二 1、PyMuPDF简介2、 1、PyMuPDF简介 PyMuPDF&#xff08;也称Fitz&#xff09;开源&#xff0c;提供了一整套用于处理PDF文件的综合工具。使用PyMuPDF&#xff0c;用户可以高效地执行打开PDF、提取文本、图像和表格、操作旋转和裁剪等页面属性、创建新PDF文档以…

剑指offer面试题34:在二叉树中和为某一值的路径

面试题34&#xff1a;在二叉树中和为某一值的路径 题目&#xff1a; LCR 153. 二叉树中和为目标值的路径 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路…