django 使用form组件提交数据之form表单提交
django的form组件可以减少后台在进行一些重复性的验证工作,极大降低开发效率。
最近遇到一个问题:
当使用form表单提交数据后,如果数据格式不符合后台定义的规则,需要重新在前端页面填写数据。
分析问题:
由于form的POST 请求发出去后会刷新整个页面,自然无法保留上次输入的内容。
解决问题:
采用ajax的方式发出请求,避免刷新整个页面。
ajax是脑海里第一个冒出的想法,但经过了解form组件内部的更多参数以及原理,发现其实也可以在form发出
POST请求时保留上次输入的内容。这里面有个关键是: 可以使用form组件在前端页面中生成html标签。
下面贴下代码:
1.先在后台创建基于Form的类,在类中创建字段以此定义规则。
from django.forms import Form,fields
class RegisterForm(Form):
user = fields.CharField(
min_length=6,
max_length=16,
error_messages={'min_length':'太短了','max_length':'太长了'},
label='用户名',
)
password = fields.CharField(
min_length=6,
max_length=16,
error_messages={'min_length':'太短了','max_length':'太长了'},
label='密码',
)
email = fields.EmailField(
label='邮箱',
)
2.前端页面代码
代码中obj是从后台传过来的,代表的是Form类的对象。在Django中,可以将obj传到前端。
通过obj点出类中的字段名称。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="POST" action="/register/" novalidate>
<p>
{{ obj.user.label }}{{ obj.user }} {{ obj.errors.user.0 }}
</p>
<p>
{{ obj.password.label }} {{ obj.password }} {{ obj.errors.password.0 }}
</p>
<p>
{{ obj.email.label }} {{ obj.email }} {{obj.errors.email.0 }}
</p>
<input type="submit"/>
</form>
</body>
</html>
3.后台逻辑代码
def register(request):
if request.method=='GET':
obj = RegisterForm() #当通过get请求来到注册页面时,没有携带数据,obj生成的html标签就自然没有values值
return render(request,'register.html',{'obj':obj})
else:
obj=RegisterForm(request.POST)#post请求发来了数据,此时obj中有values
v = obj.is_valid()#验证
if v:
print(obj.cleaned_data)#验证正确时在后台输出数据
return redirect('http://www.baidu.com')
else:
print(obj.errors) #错误信息
print(obj['user']) #obj其实打印出来是一串html形式的字符串 此句得到的结果是 <input type="text" name="user" maxlength="16" minlength="6" required id="id_user">
return render(request,'register.html',{'obj':obj})#传回前端的obj,包含数据
print(obj)后得出的结果
<tr><th><label for="id_user">用户名:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="user" maxlength="16" minlength="6" required id="id_user"></td></tr>
<tr><th><label for="id_password">密码:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="password" maxlength="16" minlength="6" required id="id_password"></td></tr>
<tr><th><label for="id_email">邮箱:</label></th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="email" name="email" required id="id_email"></td></tr>
django 使用form组件提交数据之form表单提交的更多相关文章
- 表单提交---前端页面模拟表单提交(form)
有些时候我们的前端页面总没有<form></form>表单,但是具体的业务时,我们又必须用表单提交才能达到我们想要的结果,LZ最近做了一些关于导出的一些功能,需要调用浏览器默认 ...
- 前端表单提交数据~php获取表单内容
上图代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- 【jquery采坑】Ajax配合form的submit提交(微擎表单提交,ajax验证,submit提交)
1.采坑:实现form的submit提交,在提交之前,进行ajax的不同校验,然后onsubmit=return check(),进行提交 1/1 目的:可以实现以 from的submit提交,然后还 ...
- Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查
本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...
- 使用jQuery.form插件,实现完美的表单异步提交
传送门:异步编程系列目录…… 时间真快,转眼一个月快结束了,一个月没写博客了!手开始生了,怎么开始呢…… 示例下载:使用jQuery.form插件,实现完美的表单异步提交.rar 月份的尾巴,今天的主 ...
- Html form 表单提交前验证
可以使用form表单的onsubmit方法,在提交表单之前,对表单或者网页中的数据进行检验. onsubmit指定的方法返回true,则提交数据:返回false不提交数据. 直接看下面的代码: 1 & ...
- jquery.form.js(ajax表单提交)
Form插件地址: 官方网站:http://malsup.com/jQuery/form/ 翻译地址:http://www.aqee.net/docs/jquery.form.plugin/jquer ...
- 浅谈 form 表单提交
原创文章,转载请注明出处:http://www.cnblogs.com/weix-l/p/7675230.html 若有错误,请评论指出,谢谢! Form 对象代表一个 HTML 表单.在 HTML ...
- 使用axios模拟表单提交
1.需求背景 最近在实验室写一个Spring前后端分离的项目,项目中使用Spring Security组件实现系统的认证和授权,当Security的认证模式设置为FormLogin时(如下代码),前端 ...
- jQuery异步表单提交
有时在A页面点击按钮弹出一个form表单,在填完表单后提交成功后,需要关闭表单页并将表单中的某些值反应在A页面上,这时就需要异步提交表单.其实也挺简单,只是需要把表单数据序列化. $("#f ...
随机推荐
- bat批处理异备文件、压缩文件
1.压缩本地文件,并把压缩后的文件复制到其他机器 net use Z: \\192.168.135.1\share_linux a123456! /user:chaoqun.guo set bath= ...
- 001-mac使用桌面、Dock、键盘、程序安装
一.桌面 Finder:dock第一个正方形蓝白笑脸,类似于Windows的资源管理器,是图形化界面基础,默认启动 菜单:最上侧一行左侧,当前程序的菜单 dock:应用程序快捷图标,启动的程序下面有个 ...
- java 多线程 day16 CountDownLatch 倒计时计数器
import java.util.concurrent.CountDownLatch;import java.util.concurrent.CyclicBarrier;import java.uti ...
- shared_ptr的线程安全
1.9 再论shared_ptr 的线程安全 虽然我们借shared_ptr 来实现线程安全的对象释放,但是shared_ptr 本身不是100% 线程安全的.它的引用计数本身是安全且无锁的,但对象的 ...
- SQL Server创建视图——视图的作用
视图简介: 视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口. 常规视图本身并不存储实际的数据,而仅仅是由SELECT语句组成的查询定义的虚拟表 . ...
- [笔记] Ubuntu 18.04源码编译安装OpenCV 4.0流程
标准常规安装方法安装的OpenCV版本比较低,想尝鲜使用4.0版本,只好源码安装. 安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 CUDA:10.0 c ...
- 手机端1px细线公共类
手机端1px细线公共类 .borderBottom1px{ position: relative; } .borderBottom1px:after{ content: ""; p ...
- win 7 64 安装 tensorflow
1:安装 python 3.5 2. 安装 pip 3: 安装 tensorflow 4,demo
- 在eclipse中new 对象后怎么通过快捷键自动生成返回对象
如题,每次new 对象的时候不想手动补全返回对象,可以实现快捷键生成返回对象.new 对象后可以按住ctrl+1,如下图: 选择第一行即可.
- 使用自签名SSL证书配置HTTPS,解决浏览器提示不安全警告
项目测试过程中需要将应用从HTTP升级到HTTPS,浏览了网上一些帖子,参考<WebLogic11g-单双向SSL配置(以Springside3为例)>一文使用openssl工具来自建CA ...