forms组件
先自己实现注册功能,并且对用户输入的信息加限制条件
如果用户输入的信息不符合条件,前端展示报错信息

注册示例:
1.前端渲染标签获取用户输入 >>> 前端渲染标签
2.后端获取用户输入,进行数据校验 >>> 数据校验
3.校验过后产生的提示信息返回给前端 >>> 展示校验信息

数据校验:
前端后端都必须做数据校验,前端不做问题不大,后端必须要做!(防爬虫!!!)

forms组件就能帮我们完成上面的三步:
1.生成前端html代码
2.校验数据
3.展示校验信息

forms组件的使用
1.简单的form组件校验数据
校验数据
1.得写一个forms校验的类
from django import forms
class RegForm(forms.Form):
# forms组件中定义的字段,默认都是必须传值的
name = forms.CharField(max_length=6)
pwd = forms.CharField(max_length=8,min_length=3)
email = forms.EmailField()
2.实例化RegForm传值
# 注意传入的字典的key必须跟类里面的变量名一致,校验的数据可以多传,但是不能少传
res = views.RegForm({'name':'dsb','pwd':'123','email':'123@qq.com'})
3.数据是否合法
res.is_valid() # 如果数据全部校验通过才为True否则均为False
4.查看校验通过的数据
res.cleaned_data # 会将校验通过的数据都放入cleaned_data中
5.查看校验失败的数据
res.errors # 会将校验失败的数据的提示信息都放入errors中
"""
{
'name': ['Ensure this value has at most 6 characters (it has 7).'],
'pwd': ['Ensure this value has at least 3 characters (it has 2).']
}
"""
渲染标签
form组件值渲染获取用户输入(或选择的...只要是用户操作都算)的标签
提交按钮需要我们自己手动写

三种方式:
1.{{ form_obj.as_p }}
2.{{ form_obj.name.label }}{{ form_obj.name }}
3.{% for foo in form_obj %}
<p>{{ foo.label }}{{ foo }}</p>
{% endfor %}

展示报错信息
<form action="" method="post" novalidate>
{% for foo in form_obj %}
<p>
{{ foo.label }}{{ foo }}
<span>{{ foo.errors.0 }}</span>
</p>
{% endfor %}
<input type="submit">
</form>

局部钩子与全局钩子
from django.core.exceptions import ValidationError
# 局部钩子
def clean_name(self):
name = self.cleaned_data.get('name')
if '666' in name:
# 局部钩子中可以手动添加报错信息
self.add_error('name','光喊666是不行的,得有操作!')
# 也可以主动抛出异常
# raise ValidationError('光喊666是不行的,得有操作!')
# 拿出来校验的数据必须返回回去
return name

# 全局钩子
def clean(self):
pwd = self.cleaned_data.get('pwd')
confirm_pwd = self.cleaned_data.get('confirm_pwd')
if pwd == confirm_pwd:
# 校验过后要把cleaned_data再返回出来
return self.cleaned_data
else:
# 跟局部钩子不同,需要手动将报错信息加入到errors里面
self.add_error('confirm_pwd', '两次密码不一致')
"""
发现新大陆,局部和全局添加报错信息,都可以通过self.add_error('字段','提示信息')
局部钩子中还可以通过抛出异常的方式提示校验信息
"""

from app01 import models
def reg3(request):
# 实例化一个form对象
form_obj = RegForm()
if request.method == 'POST':
print(request.POST)
# 直接丢给form组件需要注意的前端的input name属性必须跟form里面字段的名一致
form_obj = RegForm(request.POST)
if form_obj.is_valid():
models.User.objects.create(**form_obj.cleaned_data)
return HttpResponse('ok')
return render(request, 'reg2.html', locals())
总结:forms组件可以实现三大功能,其实它的这些功能都是给我的models.py里面的一张张模型表服务的

forms组件其他标签渲染类型(了解)

forms 组件的功能和使用的更多相关文章

  1. Django-多对多关系的三种创建方式-forms组件使用-cookie与session-08

    目录 表模型类多对多关系的三种创建方式 django forms 组件 登录功能手写推理过程 整段代码可以放过来 forms 组件使用 forms 后端定义规则并校验结果 forms 前端渲染标签组件 ...

  2. BBS-基于forms组件和ajax实现注册功能

    http://www.cnblogs.com/yuanchenqi/articles/7638956.html 1.设计注册页面 views.py from django import forms c ...

  3. 3- 功能2:基于forms组件和ajax实现注册功能

    1.forms组件的注册页面 url from django.urls import path, re_path from blog import views from django.views.st ...

  4. 基于forms组件和Ajax实现注册功能

    一.基于forms组件的注册页面设计 1.运用forms组件的校验字段功能实现用户注册 views.py:    (在钩子中代码解耦,将form放在cnblog/blog/Myforms.py中) f ...

  5. Django学习之八:forms组件【对form舒心了】

    目录 Django forms组件 bound and unbound form instance forms渲染有关 隐藏一个字段,不渲染它 form 校验 form类 ModelForm 利用Mo ...

  6. Django组件-Forms组件

    Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...

  7. Django组件--forms组件(注册用)

    一.forms组件--校验类的使用 二.form组件--校验类的参数 三.forms组件校验的局部钩子--自定义校验规则(要看源码理解) 四.forms组件校验的全局钩子--校验form表单两次密码输 ...

  8. web框架开发-Django的Forms组件

    校验字段功能 针对一个实例:用户注册. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) ...

  9. python django(forms组件)

    forms组件最大的作用,就是做数据校验. 普通做法,一个一个写校验规则,没有解耦.校验规则,都在视图函数里面. 网页校验 修改urls.py,增加路径addbook from app01 impor ...

随机推荐

  1. 怎么让小白理解intel处理器(CPU)的分类

    https://www.zhihu.com/question/32669957 目录 如何选购台式机CPU? 1. 英特尔处理器简介(本文) 1.1 聊聊Intel Tick-Tock 2. AMD处 ...

  2. 小程序推送消息(Template)

    最近搞小程序模拟推送消息,才发现小程序推送消息接口准备下线. 请注意,小程序模板消息接口将于2020年1月10日下线,开发者可使用订阅消息功能 咱们现在有需求,所以不管下不下,完成再说. 一:”获取a ...

  3. JRE和JVM的区别

    JRE和JVM的区别       JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台.所有的Java程序都要在JRE下才能运行.JDK的工具也是Java程序, ...

  4. paper 140:TLD视觉跟踪算法(超棒)

    我是看了这样的一个视频:http://www.56.com/u83/v_NTk3Mzc1NTI.html 然后在准备针对TLD视觉跟踪算法来个小的总结. 以下博文转自:http://blog.csdn ...

  5. CEF的备忘笔记

    CEF: Chromium Embeded Framewrok;  (Chromium嵌入式框架)可以在PC(Linux,MacOS,Windows)上把Chromium的内核嵌入到应用程序的框架: ...

  6. HTML-参考手册: 功能排序

    ylbtech-HTML-参考手册: 功能排序 1.返回顶部 1. 功能排序 New : HTML5 新标签 标签 描述 基础   <!DOCTYPE>  定义文档类型. <html ...

  7. Nginx网络架构实战学习笔记(二):编译PHP并与nginx整合、安装ecshop、商城url重写实战

    文章目录 编译PHP并与nginx整合 安装ecshop(这是一个多年前php的项目貌似,作为java开发的我暂时不去关心) 商城url重写实战 编译PHP并与nginx整合 安装mysql yum ...

  8. java 重新学习 (六)

    一.java7以后,使用带泛型的接口,类定义变量,那么调用构造器创建对象时构造器的后面不必带上泛型.List<String> list = new ArrayList()<>; ...

  9. MFC DLL 导出函数的定义方式

    一直在鼓捣DLL,每天的工作都是调试一个一个的DLL,往DLL里面添加自己的代码,但是对于DLL一直不太了解啊!今天一查资料,才发现自己对于DLL编写的一些基本知识也不了解.要学习,这篇文章先总结DL ...

  10. pytest-调整测试用例的执行顺序

    场景:未考虑按自然顺序执行时,或想变更执行顺序,比如增加 数据的用例要先执行,再执行删除的用例.测试用例默认是按名 称顺序执行的. • 解决: • 安装:pip install pytest-orde ...