一 基本流程

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组件实现注册校验的更多相关文章

  1. Django中form组件的is_valid校验机制

    先来归纳一下整个流程(1)首先is_valid()起手,看seld.errors中是否值,只要有值就是flase(2)接着分析errors.里面判断_errors是都为空,如果为空返回self.ful ...

  2. day 77 基于form组件的注册功能

    Form 表单 py文件 from django import forms #定义一个form类注册用 class RegForm (forms.Form): username =forms.Char ...

  3. Django之路——9 Django的form组件的信息校验

    forms组件 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_l ...

  4. 2.1博客系统 |基于form组件和Ajax实现注册登录

    基于forms组件和Ajax实现注册功能 1 基于forms组件设计注册页面 --点击头像 === 点击input --头像预览: 修改用户选中的文件对象:获取文件对象的路径:修改img的src属性, ...

  5. Django之form组件is_valid校验机制

    #先来归纳一下整个流程 #()首先is_valid()起手,看seld.errors中是否值,只要有值就是flase #()接着分析errors.里面判断_errors是都为空,如果为空返回self. ...

  6. 〖Python〗-- Django的Form组件

    [Django的Form组件] Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使 ...

  7. Django中Form组件的使用

    Form介绍 HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...

  8. python框架之Django(10)-Form组件

    介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...

  9. django中form组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

随机推荐

  1. C# Ajax 技术

    Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写.下面是 Ajax 应用程序所用到的基本技术:• HTML 用于建立 Web 表单并确定应用程 ...

  2. PL/SQL连接ORACLE失败,ORA-12154: TNS: could not resolve the connect identifier specified

    项目需要使用ORACLE,安装了oracle之后,使用PL/SQL连接,先是提示NOT logger  ,后续不知道改了什么提示解析服务器id失败,重新装了之后更狠的直接来了个空白提示 一.安装PLS ...

  3. linux mint —— 图片一张

    概述 Linux Mint是一種基於Ubuntu開發出的Linux操作系统.由Linux Mint Team团队于2006年开始发行.Linux Mint 的目标是为家庭用户和企业客户提供一个免费.高 ...

  4. Hibernate_HelloWord

    Hibernate操作步骤 1.新建项目 2.加jar包 3.写XML配置文件hibernate.cfg.xml 4.写log4j.properties日志文件 5.在MySql数据库中建studen ...

  5. Redis的分布式配置

    Redis存在三种级别的分布式部署:主从复制.主从切换.集群配置,推荐使用主从切换模式. 主从复制 启动主服务:端口6379 启动从服务:端口6380, 配置文件中加上 slaveof 127.0.0 ...

  6. npm安装出错Unexpected end of input at 1:2307

    执行命令: npm cache clean --force 然后再安装 搞定

  7. CSS伪元素实现的3D按钮

    在线演示 本地下载

  8. OC中NSSet去重细节

    我们都知道,NSSet在存储数据时,不允许存储相同数据?那么,这里的相同该如何理解呢? 很多人都简单的理解为按照其存储对象的内存地址进行评判.其实不然.经过个人实验证明:当类型为NSString,NS ...

  9. OC_id类型

     博客正式开通啦!以后会每天为大家更新知识,将过去学习的笔记发布出来.供大家学习交流. 在Objective-C 中,id 类型是一个独特的数据类型.在概念上,类似Java 的Object 类,可以转 ...

  10. Kubernetes lxcfs

    容器实现的基础是NameSpace和Cgroups. NameSpace实现了对容器(进程)的隔离,NameSpace技术实际上修改了应用进程看待整个计算机“视图”,也就是作用域,即它的“视线”被操作 ...