百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程网 > 正文

利用forms表单组件进行表单校验

yuyutoo 2025-05-28 21:28 5 浏览 0 评论

### 利用forms表单组件进行表单校验,完成用户名,密码,确认密码,邮箱功能的校验

该作业包含了下面的知识点:

error_messages,label,required,invalid,局部钩子函数,全局钩子函数,

forms_obj.cleaned_data,forms_obj.errors,locals(),

{{ forms.label }}:{{ forms }},{{ forms.errors.0 }}

### urls.py文件

```python

添加index访问路径

from django.conf.urls import url

from django.contrib import admin

from app01 import views

urlpatterns = [

url(r'^admin/', admin.site.urls),

url(r'^register/', views.register),

url(r'^index/', views.index),

]

```

### views.py文件

创建视图函数

```python

#***************************forms组件************************

# 使用forms组件,完成数据校验,展示错误信息

# 使用forms组件的前提是,你需要提前写一个类

from django import forms

from django.core.validators import RegexValidator

class MyForm(forms.Form):

# username字段,最少三位,最多八位

username = forms.CharField(max_length=8, min_length=3, label='用户名',

error_messages={

'max_length': '用户名最长八位',

'min_length': '用户名最少三位',

'required': '用户名不能为空',

}

)

# password字段,最少三位,最多八位

password = forms.CharField(max_length=8, min_length=3, label='密码',

error_messages={

'max_length': '密码最多8位',

'min_length': '密码最少3位',

'required': '密码不能为空'

}

)

confirm_password = forms.CharField(max_length=8, min_length=3, label='确认密码',

error_messages={

'max_length': '确认密码最多8位',

'min_length': '确认密码最少3位',

'required': '确认密码不能为空'

}

)

# email字段,必须是邮箱格式

email = forms.EmailField(label='邮箱', error_messages={

'required': '邮箱不能为空', # required,校验不能为空的固定用法

'invalid': '邮箱格式错误', # invalid,专门用来校验邮箱格式错误的固定用法

})

#********************************************************************************

#校验用户名中不能含有666,校验单个字段使用局部钩子函数,

#钩子函数是校验规则中最后执行的一道关卡,会先执行上面的校验规则,上面都校验通过了,

# 才会走到钩子函数这一层的校验来。

def clean_username(self):

# username=self.cleaned_data #是一个校验通过的大字典

# 通过的字典支持点get取值的方式,专门拿出来要校验的字段

username=self.cleaned_data.get('username')

if '666' in username:

#如何给username所对应的框展示错误信息呢?

#注意下面是钩子函数的固定用法,添加对应字段的错误提示信息

self.add_error('username','光喊666是不行的')

#将username数据返回,这个地方是必须要返回字段数据的,缺失不可

return username

#********************************************************************************

#校验密码和确认密码是否一致 这个就要用到全局钩子函数

def clean(self):

password=self.cleaned_data.get('password')

confirm_password=self.cleaned_data.get('confirm_password')

if not password == confirm_password:

#注意下面是钩子函数的固定用法,添加对应字段的错误提示信息

self.add_error('confirm_password','两次密码不一致')

#全局钩子是需要将全局的数据全部返回

return self.cleaned_data

'''

1.label='xxx'是对应的input输入框前面的提示文字

2.error_messages={

'max_length':'密码最多8位',

'min_length':'密码最少3位',

'required':'密码不能为空'

}

这个是固定格式,必填项必须用required也是固定的用法

3.required,校验不能为空的固定用法

4.invalid,专门用来校验邮箱格式错误的固定用法

'''

def index(request):

''' 渲染标签:

第一步,需要生成一个空的forms_obj,MyForm类的对象

第二步,通过locals()和render方法渲染到前端index页面

'''

forms_obj = MyForm()

# 后端如何校验前端用户传入的数据

if request.method == 'POST':

# 获取用户的数据,request.POST正好是一个字典,

# request.POST作为该类的参数传入MyForm()类中,

# 然后再交给Forms组件来校验数据

# 注意事项,这两个forms_obj对象必须要书写一致

forms_obj = MyForm(request.POST)

if forms_obj.is_valid():

print(forms_obj.cleaned_data) # 打印成功的数据

return HttpResponse('数据全部OK')

else:

print(forms_obj.errors) # 打印错误的数据

return render(request, 'index.html', locals())




'''

获取用户的数据 request.POST正好是一个字典

检验数据神6条中的第二条:

2.给写好的类,传字典数据(代校验的数据,生成一个代校验对象)

form_obj=views.MyForm({'username':'jason','password':123,'email':'123@'})

'''

# print(type(forms_obj))

# print('我是',forms_obj)

# for forms in forms_obj:

# print('我是',forms)

'''

forms 相关打印结果:

我是 < input

type = "text"

name = "username"

maxlength = "8"

minlength = "3"

required

id = "id_username" / >

'''

# 直接将生成的对象,传递给前端页面

#return render(request, 'index.html', locals())

```

### index.html文件

```html

<form action="" method="post" novalidate>

{% for forms in forms_obj %}

<p>

{{ forms.label }}:{{ forms }}

<span>{{ forms.errors.0 }}</span>

</p>

{# <span>{{ forms.label }}</span> #}

{# <span>{{ forms }}</span>#}

{# {{ forms.label }}是标签前面的注释,举例:input输入框前面的用户名,密码,年龄这些文字提示 #}

{# {{ forms }} 是表单中所有的输入框 #}

{# {{ forms.errors.0 }} 是固定用法,获取表单提交中的错误字段详细信息,咱后端或者前端页面都可以查看 #}

{% endfor %}

<input type="submit">

</form>

```

相关推荐

Python+selenium自动化之selenium常用API

前面的几十篇文章介绍了selenium的常用的API的用法,但是这些仅仅是API的一小部分,大家可以去selenium官网获取查看https://python-selenium-zh.readthed...

如何用英文写电子邮件?英文的邮件格式怎么写?

电子邮件可以说是现代社会中人们交流沟通的重要工具之一,我们在社交、求学、工作中都需要用到邮件。如何写一封合适的英文电子邮件就是我们今天的主题。首先,请看下面这封邮件:这是不是就是很多小伙伴的邮件的样子...

如何删除Linux文件夹中除某些扩展名之外的所有文件?

假设你有一个名为data的文件夹,里面包含各种类型的文件,例如:...

手把手教你实现振动记录器

概述本文只涉及实现及代码讲解,不涉及具体技术的讲解,并尽量每一行代码都有详尽的注释,先实现,后积累。前端-入门级教程-简易振动记录器本文教大家实现一个简易的振动记录器。包括短振动、长振动、振...

UG NX 出图技巧

UGNX出图技巧A、出工程图时,如何屏蔽掉多余的轮廓线?方法一:选中要修改的视图---按右键---选择“型式”--出现“查看形式”对话框---选择“光滑边”栏---把“光滑边”的...

利用forms表单组件进行表单校验

###利用forms表单组件进行表单校验,完成用户名,密码,确认密码,邮箱功能的校验该作业包含了下面的知识点:error_messages,label,required,invalid,局部钩子函数...

关于&quot;must&quot;的这些用法,你“必须”知道!

1mustbe\mustdo用于现在时Hekeepslookingatyou,hemustlikeyou.他一直在看你,他一定是喜欢你吧Shelookssobeautif...

vue confirm弹窗提示确认,修改提示的字体颜色

1.日常写法this.$confirm(context,"提示",{confirmButtonText...

战旗TV悬赏令:守望先锋重金求天梯英雄

终于等到你!国服守望先锋持续一周的压力测试即将到来,蓄势待发的你是否已经热血沸腾?战旗TV发布天梯英雄悬赏令,直播冲击国服天梯段位就可获得大量奖励,赶快加入直播间的守望者行列!活动专区:http://...

dart系列之:HTML的专属领域,除了javascript之外,dart也可以

简介虽然dart可以同时用作客户端和服务器端,但是基本上dart还是用做flutter开发的基本语言而使用的。除了andorid和ios之外,web就是最常见和通用的平台了,dart也提供了对HTML...

直播!去东新路寻找“夜杭州”的烟火气,人气餐厅美食福利放送中

APP中打开,直接点击图片进入直播;微信中打开稿件,保存直播海报,打开淘宝APP可以收看直播淘宝直播地址:h5.m.taobao.com/taolive/video.html?userId=41258...

深入浅出序列化(1)——JDK序列化和Hessian序列化

我之前在《聊一聊RPC》中曾提过什么是序列化和反序列化,当时有说过之后要单独抽出一期来详细聊聊序列化,没想到这一拖竟然拖了一年多,现在来把这个坑补上。由于篇幅较长,本文先主要介绍两种常见的序列化方式...

Web前端开发,HTML超链接标签,不懂的可以学习一下

一、什么是HTML的超链接大家平时浏览的网页中都可以找到链接。点击链接就可以从一个页面跳转到另一个页面。HTML超链接可以是一个字,一个词,或者一组词,也可以是一幅图像。可以点击这些内容来跳转到新的文...

TypeScript 终极初学者指南

在过去的几年里TypeScript变得越来越流行,现在许多工作都要求开发人员了解TypeScript...

QStyle

一、描述QStyle类是一个抽象基类,它封装了GUI的外观。样式也可以作为插件使用。Qt的内置小部件使用QStyle来执行几乎所有的绘图,确保它们看起来与等效的原生小部件完全一样。下图显示...

取消回复欢迎 发表评论: