django框架中form组件的简单使用示例:注册验证
Django中form组件的三大特点:
1. 生成页面可使用的HTML标签
2. 对用户提交的数据进行初步校验
3. 保留上次输入内容
废话不多说,直接进入正题。
这是注册界面截图:

与上一篇ajax不同的是,ajax是输入光标移动后,就提交到后台验证;而form组件则是需要点击注册后,才会在前端校验。
代码(views.py): (注释部分是常用到的一下组件的方法,都有比较详细的注释,大家可以自行研究)
from django.shortcuts import render, HttpResponse
from app01 import models
# 导入forms组件
from django import forms
from django.forms import widgets
from django.core.validators import RegexValidator
# Create your views here. class RegForms(forms.Form):
name = forms.CharField(
label="帐号",
max_length=16,
# 自定义类的属性
widget=widgets.TextInput(attrs={"class": "form-control"}),
error_messages={
"required": "帐号不能为空"
}
)
# 调用form组件内部方法创建一个长度不大于16且不小于8的密码文本框
pwd = forms.CharField(
label="密码",
max_length=16,
min_length=8,
# 定义为密码文本,render_value设置为验证不通过时不把密码刷新掉
widget=widgets.PasswordInput(attrs={"class": "form-control"}, render_value=True),
error_messages={
"min_length": "密码不能少于8位数",
"required": "密码不能为空"
}
) re_pwd = forms.CharField(
label="确认密码",
max_length=16,
min_length=8,
# 定义为密码文本,render_value设置为验证不通过时不把密码刷新掉
widget=widgets.PasswordInput(attrs={"class": "form-control"}, render_value=True),
error_messages={
"min_length": "密码不能少于8位数",
"required": "密码不能为空"
}
)
email = forms.EmailField(
label="邮箱",
widget=widgets.EmailInput(attrs={"class": "form-control"}),
error_messages={
"required": "邮箱地址不能为空",
# invalid 是校验格式是否正确
"invalid": "邮箱地址格式错误",
}
)
mobliphone = forms.CharField(
label="手机",
widget=widgets.TextInput(attrs={"class": "form-control"}),
# form 组件中用正则判断是否符合条件
validators=[RegexValidator(r'^[0-9]+$', '请输入数字'), RegexValidator(r'^159[0-9]+$', '数字必须以159开头')],
error_messages={
"required": "手机号码不能为空",
}
) # # 单radio值为字符串
# gender = forms.fields.ChoiceField(
# choices=((1, "男"), (2, "女"), (3, "保密")),
# label="性别",
# initial=3,
# widget=forms.widgets.RadioSelect()
# ) # # 单选Select
# hobby = forms.fields.ChoiceField(
# choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
# label="爱好",
# initial=3,
# widget=forms.widgets.Select()
# ) # # 多选Select
# hobby = forms.fields.MultipleChoiceField(
# choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
# label="爱好",
# initial=[1, 3],
# widget=forms.widgets.SelectMultiple()
# ) # # 单选checkbox
# keep = forms.fields.ChoiceField(
# label="记住密码",
# initial="checked",
# widget=forms.widgets.CheckboxInput()
# ) # # 多选checkbox
# hobby = forms.fields.MultipleChoiceField(
# choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
# label="爱好",
# initial=[1, 3],
# widget=forms.widgets.CheckboxSelectMultiple()
# ) # 注册
def register(request):
# 实例化对象类
form_obj = RegForms()
if request.method == 'POST':
# 实例化form对象的同时传入从网页通过post方式提交过来的参数
form_obj = RegForms(request.POST)
# 调用form_obj校验数据的方法
if form_obj.is_valid():
# return HttpResponse("注册成功!")
# print(form_obj.cleaned_data)
# 去除字典中的re_pwd项
del form_obj.cleaned_data["re_pwd"]
# print(form_obj.cleaned_data)
models.Tset01.objects.create(**form_obj.cleaned_data)
return HttpResponse("注册成功!") return render(request, "register.html", {"form_obj": form_obj}) 代码(HTML):
<form action="/register/" method="post" novalidate>
{% csrf_token %}
{# 下面的if语句是用来判断是否有错误 #}
<div class="form-group {% if form_obj.name.errors.0 %} has-error {% endif %}">
{# 相当于注册截图中的“帐号”(下同)#}
{{ form_obj.name.label }}
{# 相当于注册截图中的文本框 (下同)#}
{{ form_obj.name }}
<span class="help-block">{{ form_obj.name.errors.0 }}</span>
</div>
<div class="form-group {% if form_obj.pwd.errors.0 %} has-error {% endif %}">
{{ form_obj.pwd.label }}
{{ form_obj.pwd }}
<span class="help-block">{{ form_obj.pwd.errors.0 }}</span>
</div>
<div class="form-group {% if form_obj.re_pwd.errors.0 %} has-error {% endif %}">
{{ form_obj.re_pwd.label }}
{{ form_obj.re_pwd }}
<span class="help-block">{{ form_obj.re_pwd.errors.0 }}</span>
</div>
<div class="form-group {% if form_obj.email.errors.0 %} has-error {% endif %}">
{{ form_obj.email.label }}
{{ form_obj.email }}
<span class="help-block">{{ form_obj.email.errors.0 }}</span>
</div>
<div class="form-group {% if form_obj.mobliphone.errors.0 %} has-error {% endif %}">
{{ form_obj.mobliphone.label }}
{{ form_obj.mobliphone }}
<span class="help-block">{{ form_obj.mobliphone.errors.0 }}</span>
</div>
<div class="form-group">
<input type="submit" class="btn btn-success" value="注册">
</div>
注释得明明白白的,有不懂的可以一起探讨,共同进步!
django框架中form组件的简单使用示例:注册验证的更多相关文章
- Django框架11 /form组件、modelForm组件
Django框架11 /form组件.modelForm组件 目录 Django框架11 /form组件.modelForm组件 1. form组件介绍 2. form常用字段与插件 3. form所 ...
- Django框架 之 form组件的钩子
Django框架 之 form组件的钩子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 3 ...
- Django框架 之 form组件
Django框架 之 form组件 浏览目录 Form介绍 普通的登录 使用form组件 Form详情 常用字段 校验 进阶 使用Django Form流程 一.Form介绍 我们之前在HTML页面中 ...
- django框架进阶-form组件-长期维护
################## form组件做了什么事情? ####################### 之前web开发的模式,以注册为例 1,要有一个注册页面,然后有一个f ...
- Django框架之Form组件
一.初探Form组件 在介绍Form组件之前,让大家先看看它强大的功能吧!Go... 下面我们来看看代码吧! 1.创建Form类 from django.forms import Form from ...
- Django 框架之Form组件
1. Django的Form主要具有以下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交的数据 初始化页面显示内容 2. 第一个案例: # 第一步: 创建 ...
- Django框架【form组件】
from django.shortcuts import render,redirect # Create your views here. from .models import * from dj ...
- django框架中form表单Post方法无法提交 Forbidden (403) CSRF verification failed. Request aborted.
问题如图: 解决方法: 在视图函数中引入并使用装饰器 from django.views.decorators.csrf import csrf_exempt @csrf_exempt
- python3开发进阶-Django框架中form的查看校验方法is_valid()的源码,自定义验证方法
form表单的校验方法is_valid() 点开我们发现这个函数里面只有两个方法方法,最终返回True or False 我们点进.is_bound属性,里面判断传输的数据不是空和上传文件不是空 点进 ...
随机推荐
- 如何在 Apache 里修改 PHP 配置
当使用 PHP 作为 Apache 模块时,也可以使用 Apache 配置文件(例如:httpd.conf) 和 .htaccess 文件中的指令来修改 PHP 的配置 设定,不过需要有 " ...
- ASP.NET MVC WebAPI Put和Delete请求出现405(Method not allowed)错误
解决办法: 在站点根目录下的web.config设置如下(主要参考添加项): <system.webServer> <modules> <remove name=&quo ...
- JavaScript 随意记
js 志异: <script> // ----- 1 --------- alert(new Date()) alert(+new Date()) </script>
- ios高级开发之多线程(一)
1.概念: 多线程(multithreading)到底是什么呢,它是指在软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件的支持,而能够在同一时间执行多个线程,进而提升整体处理性 ...
- Unity自定义定时器,模拟协程,脱离MonoBehavior控制
using System; using System.Collections.Generic; using System.Timers; public class PETimer { private ...
- DAY 25多态、反射、异常处理
一.面向对象与面向过程分析 1.print(len('123')) # 面向过程 #清晰知道操作的功能,但不能明确操作的具体对象,需要传入参数. 2.print('123'.__len__()) # ...
- Vue组件通信
单向数据流通信 单向数据流通信是指父组件传递数据给子组件,子组件是不可以修改该数据的(可以改,但会警告) 父组件通过自定义属性传递数据给子组件,子组件使用props接收 如果想修改数据,子组件需要使用 ...
- react props与render成员函数
props是组件固有的属性集合,其数据由外部传入,一般在整个组件的生命周期中都是只读的,React的API顶层设计也决定了这一点.属性初值通常由React.createElement函数或者JSX中标 ...
- obfuscate 混淆 verb
- GT sport真实赛道详解 - Brands Hatch | 伯蘭士赫治GP賽車場
参考:GT sport所有赛道简介 GT Sport - Tip/Guide For FASTER LAP TIMES (Brands Hatch) 赛道介绍.跑法.赛事网上都有大把的视频. GT s ...