一 基本流程

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. Python基础-re正则模块

    一.简介: 正则表达式:是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过re模块实现,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. 二.字 ...

  2. Python2 socket 多线程并发 ThreadingTCPServer Demo

    # -*- coding:utf-8 -*- from SocketServer import TCPServer, StreamRequestHandler import traceback cla ...

  3. print函数end参数的作用

    print函数默认会在末尾添加一个换行符(‘\n’) 加入end=''参数后,不会在末尾添加换行符,而是在末尾添加一个空字符串,end等于什么就会在末尾添加什么 这个只在python3中有效

  4. 【转】Python爬虫_示例

    爬虫项目:爬取汽车之家新闻资讯   # requests+Beautifulsoup爬取汽车之家新闻 import requests from bs4 import BeautifulSoup res ...

  5. ionic项目注意点

    1.controller 名字一定要大写 config如过传递controller,则要使用controllerAs ,开头使用小写 2.在scss中新添加scss文件,要重启

  6. 个人对于css sprite的一点点见解

    css sprite即CSS雪碧图又称CSS精灵.它存在的一个主要作用就是:减少了网页的http请求次数,从而大大的提高了页面的性能,节省时间和带宽. 例如 这样算下来.CSS sprite真的是个很 ...

  7. Squid 访问控制配置

    Squid 访问控制配置 主配置文件内加入限制参数 vim /etc/squid/squid.conf # 访问控制 acl http proto HTTP # 限制访问 good_domain添加两 ...

  8. 纯CSS3动画按钮效果

    在线演示 本地下载

  9. mongodb 中的Multikey Index Bounds解释$elemMatch

    首先说一下 $elemMatch的用法: { _id: 1, results: [ 82, 85, 88 ] } { _id: 2, results: [ 75, 88, 89 ] } $elemMa ...

  10. JMeter学习(十一)属性和变量

    一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...