Django基于form组件实现注册校验
一 基本流程
1 创建form组件对应的类,比如LoginForm
2 前端的三种渲染方式:
渲染方式三种:
1
<form action="" novalidate method="post">
{% csrf_token %}
{{ form_obj.as_p }}
<input type="submit">
</form> 2
<form action="" novalidate method="post">
{% csrf_token %}
<div>
<label for="">用户名</label>
{{ form_obj.user }} <span>{{ form_obj.errors.user.0 }}</span>
</div>
<div>
<label for="">密码</label>
{{ form_obj.pwd }}<span>{{ form_obj.errors.pwd.0 }}</span>
</div>
<input type="submit">
</form> 3 <form action="" novalidate method="post">
{% csrf_token %}
{% for field in form_obj %}
<div>
<label for="">{{ field.label }}</label>
{{ field }}
</div>
{% endfor %} <input type="submit">
</form>
二 注册校验
from django.core.exceptions import NON_FIELD_ERRORS, ValidationError
from django.forms import widgets
class RegForm(forms.Form):
user = forms.CharField(max_length=18, min_length=3,
error_messages={
'required': '不能为空',
'min_length': 'too short',
'max_length': "too long"
})
pwd = forms.CharField(max_length=32, min_length=3,
error_messages={
'max_length': "too long",
'required': '不能为空',
'min_length': 'too short',
},
widget=widgets.PasswordInput(attrs={}))
repeat_pwd = forms.CharField(label='确认密码',
max_length=32,
error_messages={},
widget=widgets.PasswordInput(attrs={}))
email = forms.EmailField(
error_messages={
"invalid": '格式错误'
}
) tel = forms.CharField() def clean_user(self):
val = self.cleaned_data.get("user")
ret = Userinfo.objects.filter(name=val)
if not ret:
return val
else:
raise ValidationError("该用户已经注册") def clean_tel(self):
val = self.cleaned_data.get('tel')
import re
ret = re.search("1[356789]\d{9}$", val)
if ret:
return val
else:
raise ValidationError("手机号格式错误") def clean(self):
pwd = self.cleaned_data.get('pwd')
repeat_pwd = self.cleaned_data.get('repeat_pwd')
if pwd == repeat_pwd:
return self.cleaned_data
else:
raise ValidationError("两次密码不一致")
forms
def reg(request):
if request.method == 'POST':
reg_form = RegForm(request.POST)
if reg_form.is_valid():
print(reg_form.cleaned_data) # dict
name = reg_form.cleaned_data.get("user")
pwd = reg_form.cleaned_data.get("pwd")
Userinfo.objects.create(name=name, pwd=pwd) return redirect('/login/') # 注册成功去登录
else:
all_error = reg_form.errors.get("__all__")
return render(request, 'reg.html', locals()) reg_form = RegForm()
return render(request, 'reg.html', {'reg_form': reg_form})
views
<body>
<h3>注册页面</h3>
<form action="" novalidate method="post">
{% csrf_token %}
{% for field in reg_form %}
<div>
<label for="">{{ field.label }}</label>
{{ field }}<span>{{ field.errors.0 }}</span>
{% if field.label == '确认密码' %}
<span>{{ all_error.0 }}</span>
{% endif %}
</div>
{% endfor %}
<input type="submit">
</form>
</body>
reg.html
Django基于form组件实现注册校验的更多相关文章
- Django中form组件的is_valid校验机制
先来归纳一下整个流程(1)首先is_valid()起手,看seld.errors中是否值,只要有值就是flase(2)接着分析errors.里面判断_errors是都为空,如果为空返回self.ful ...
- day 77 基于form组件的注册功能
Form 表单 py文件 from django import forms #定义一个form类注册用 class RegForm (forms.Form): username =forms.Char ...
- Django之路——9 Django的form组件的信息校验
forms组件 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_l ...
- 2.1博客系统 |基于form组件和Ajax实现注册登录
基于forms组件和Ajax实现注册功能 1 基于forms组件设计注册页面 --点击头像 === 点击input --头像预览: 修改用户选中的文件对象:获取文件对象的路径:修改img的src属性, ...
- Django之form组件is_valid校验机制
#先来归纳一下整个流程 #()首先is_valid()起手,看seld.errors中是否值,只要有值就是flase #()接着分析errors.里面判断_errors是都为空,如果为空返回self. ...
- 〖Python〗-- Django的Form组件
[Django的Form组件] Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使 ...
- Django中Form组件的使用
Form介绍 HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...
- python框架之Django(10)-Form组件
介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...
- django中form组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
随机推荐
- 我的第一个Python小程序
猜年龄,如果大了提示小点,如果小了,提示大点 涉及的知识点: 1.变量 2.注释 3.接收交互式的输入 4.类型转换 5.while循环 6.if..elif..else多条件分支语句 # Autho ...
- Ip-san 配置过程
1:SAN的定义 SAN是storage area network(存储区域网络)的简写,早期的san采用的是光纤通道技术,后期当iscsi协议出现以后,为了区分两者,就划分了IP SAN和FC SA ...
- 使用idea2016导出web项目war包
第一步配置Web Application:Exploded(已经配置的可以跳到第二步): 打开project structure(默认的快捷键是Ctrl+Alt+Shift+S),依次选择Artifa ...
- iOS 几种常用的 crash log 崩溃信息调试方法
前言:crash log 对 定位崩溃问题 ,并且不容易复现,尤其是及时对appstore 上正在运营的 app 的迭代改进来说 非常重要. 1 crash两种情况 1.1 测试环境下 追踪bug 1 ...
- Shell编程之变量进阶
一.变量知识进阶 1.特殊的位置参数变量 实例1:测试$n(n为1...15) [root@codis-178 ~]# cat p.sh echo $1 [root@codis-178 ~]# sh ...
- P3413 SAC#1 - 萌数
题目 洛谷 数位动规用爆搜真好玩 做法 含有回文串实际我们仅需判断是否有\(2/3\)回文串 \(Dfs(now,num,pre,ly,lead,prel,top)\): 在第\(now\)位 \(n ...
- Java变量修饰符volatile
volatile这个关键字可能很多朋友都听说过,或许也都用过.在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果.在Java 5之后,volatile关键字才得以 ...
- NSFetchedResultController与UITableView
1 #import "AppDelegate.h" #import "Book.h" @interface AppDelegate () @end @imple ...
- MATLAB常用指令记录
help + 'command name' % 查询指令用法 Ctrl + Break % 强制终止程序运行 Shift + Enter % command window下换行不运行指令 M'; % ...
- 怎样在WIN7系统下安装IIS和配置ASP
一:Windows7系统 (IIS是WIN7自带的,版本7.0),首先是安装IIS.打开控制面板,找到“程序与功能”,点进去,点击左侧“打开或关闭Windows功能”,找到“Internet 信息服务 ...