Django—Form两种保留用户提交数据的方法

2024-06-19 23:48

本文主要是介绍Django—Form两种保留用户提交数据的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用户在网页上进行表单填写时,有可能出现某项填写错误。一般情况下,用户在未发觉错误的情况下点击提交,则此表单的内容会清空,用户不得不再重新填写,这样的用户体验是及其糟糕的。

在此,我们有2种方法将用户的输入保存下来,一旦填写错误,只需要将错误项修改即可重新提交。

一、利用Form生成Html标签

1. views.py
 1 from django.shortcuts import render, HttpResponse, redirect
 2 from django.forms import Form, fields, widgets
 3 
 4 
 5 #Form验证
 6 class TestForm(Form):
 7     inp1 = fields.CharField(min_length=4, max_length=8)
 8     inp2 = fields.EmailField()
 9     inp3 = fields.IntegerField(min_value=10, max_value=100)
10 
11 
12 #测试函数
13 def test(request):
14     if request.method == 'GET':
15         obj = TestForm()
16         return render(request, 'test.html', {'obj': obj})
17     else:
18         obj = TestForm(request.POST)
19         if obj.is_valid():
20             return HttpResponse('提交成功')
21         return render(request, 'test.html', {'obj': obj})
2. test.html
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <form action="/test/" method="post" novalidate>
 9     {% csrf_token %}
10     <p>输入1{{ obj.inp1 }} {{ obj.errors.inp1.0 }}</p>
11     <p>输入2{{ obj.inp2 }} {{ obj.errors.inp2.0 }}</p>
12     <p>输入3{{ obj.inp3 }} {{ obj.errors.inp3.0 }}</p>
13     <input type="submit" value="提交">
14 </form>
15 </body>
16 </html>

novalidate屏蔽浏览器提供的表单验证功能

说明:

若用户输入不符合自定义的Form规则,则会返回obj = TestForm(request.POST),重新渲染test.html,而此时,obj中包含了上次用户输入的所有内容。

效果:

提交之后出现错误提示,但用户输入的数据依然存在

1113391-20170704202949972-1992920403.png

 

二、利用Ajax提交数据不刷新页面

Ajax提交数据虽然不刷新网页,但是无法完成用户输入验证,还须借助Form返回给其验证信息

1. views.py
 1 from django.shortcuts import render, HttpResponse, redirect
 2 from django.forms import Form, fields, widgets
 3 import json
 4 
 5 #Form验证
 6 class TestForm(Form):
 7     inp1 = fields.CharField(min_length=4, max_length=8)
 8     inp2 = fields.EmailField()
 9     inp3 = fields.IntegerField(min_value=10, max_value=100)
10 
11 
12 def test(request):
13     return render(request, 'test.html')
14 
15 
16 def ajax_test(request):
17     ret = {'status': True, 'msg': None}
18     obj = TestForm(request.POST)
19     if obj.is_valid():
20         v = json.dumps(ret)
21         return HttpResponse(v)
22     else:
23         ret['status'] = False
24         ret['msg'] = obj.errors
25         v = json.dumps(ret)
26         return HttpResponse(v)
2. test.html
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <form id="f1">
 9     {% csrf_token %}
10     <p>输入1 <input type="text" name="inp1"></p>
11     <p>输入2 <input type="text" name="inp2"></p>
12     <p>输入3 <input type="text" name="inp3"></p>
13     <input type="button" onclick="ajax_submit();" value="提交">
14 </form>
15 </body>
16 <script    src="/static/jquery-3.2.1.js"></script>
17 <script>
18     function ajax_submit() {
19 {#            删除上次错误提示#}
20         $(".c1").remove();
21         $.ajax({
22             url: '/ajax_test/',
23                     type: 'POST',
24                     data: $("#f1").serialize(),
25                     dataType: 'JSON',
26                     success: function (args) {
27                             if(args.status){
28                                 location.href="http://www.163.com";
29                             }else{
30                                 $.each(args.msg, function (index,value) {
31                                             console.log(index,value);
32                                             var tag=document.createElement('span');
33                                             tag.className='c1';
34                                             tag.innerHTML=value[0];
35                                             $("#f1").find('input[name="'+index+'"]').after(tag);
36                   })
37                             }
38           }
39             })
40   }
41 </script>
42 </html>

说明:

若用户输入不符合Form规则,ajax获取错误信息,并动态添加错误信息至span标签,提示用户

效果:

1113391-20170704224254800-1816065018.png

 

这篇关于Django—Form两种保留用户提交数据的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1076503

相关文章

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部分。然而,就像生活中的小插曲一样,有时我们可能会在不经意间犯下一些小错误,比如不小心删除了重要的文件。 当那份文件消失在眼前,仿佛被时间吞噬,我们不禁会心生焦虑。但别担心,就像每个问题

【服务器运维】MySQL数据存储至数据盘

查看磁盘及分区 [root@MySQL tmp]# fdisk -lDisk /dev/sda: 21.5 GB, 21474836480 bytes255 heads, 63 sectors/track, 2610 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical)

SQL Server中,查询数据库中有多少个表,以及数据库其余类型数据统计查询

sqlserver查询数据库中有多少个表 sql server 数表:select count(1) from sysobjects where xtype='U'数视图:select count(1) from sysobjects where xtype='V'数存储过程select count(1) from sysobjects where xtype='P' SE

邮件群发推送的方法技巧?有哪些注意事项?

邮件群发推送的策略如何实现?邮件推送怎么评估效果? 电子邮件营销是现代企业进行推广和沟通的重要工具。有效的邮件群发推送不仅能提高客户参与度,还能促进销售增长。AokSend将探讨一些关键的邮件群发推送方法和技巧,以帮助企业优化其邮件营销策略。 邮件群发推送:目标受众 了解他们的需求、兴趣和行为习惯有助于你设计出更具吸引力和相关性的邮件内容。通过收集和分析数据,创建详细的客户画像,可以更精

上采样(upsample)的方法

上采样(upsample)的方法   在神经网络中,扩大特征图的方法,即upsample/上采样的方法   1)unpooling:恢复max的位置,其余部分补零   2)deconvolution(反卷积):先对input补零,再conv   3)插值方法,双线性插值等;   4)扩张卷积,dilated conv;

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性,并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容,并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和业务增长。 数字化转型行业小伙伴可以加入我的星球,初衷成为各位数字化转型参考库,星球内容每周更新 个人工作经验资料全部放在这里,包含数据治理、数据要

如何在Java中处理JSON数据?

如何在Java中处理JSON数据? 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨在Java中如何处理JSON数据。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,在现代应用程序中被广泛使用。Java通过多种库和API提供了处理JSON的能力,我们将深入了解其用法和最佳