如果对字段的校验条件太少,不能满足我们的需求,那么,我们可以对每个字段自定义校验的内容,就可以使用局部钩子。

局部钩子的使用方法:

(1)导入错误类型 ————> 我们自己定义的钩子抛出的错误也会被保存到校验失败的错误信息errors中去

from django.core.exceptions import ValidationError
ValidationError是用来抛出异常时的错误类型

  

(2)然后在forms类中创建一个clean_字段名的方法

def clean_字段名(self):

  

(3)通过cleaned_data获取校验成功的值(对这个字段检验完成后会立即执行它的局部钩子,然后才会继续校验下一个字段)

self.cleaned_data.get("字段名")

  

(4)例子

from django.contrib import admin
from django.urls import path
from app01.views import index urlpatterns = [
path('admin/', admin.site.urls),
path('index/',index)
]

  

from django.shortcuts import render,HttpResponse
from django import forms
from django.core.exceptions import ValidationError #校验错误 class UserInfo(forms.Form):
username = forms.CharField(
label='用户名',
required=True,
) password = forms.CharField(
label='密码',
widget=forms.widgets.PasswordInput(render_value=True)
) #定义一个username字段的局部钩子,不能包含 “666”
def clean_username(self):
value = self.cleaned_data.get('username') #获取检验成功后的uesrname的值
if '666' in value: #如果包含了 666
raise ValidationError('不能包含666') #抛出错误
else:
return value #如果不包含 666,则返回 username 的值,这里必须返回这个值 def index(request):
if request.method == 'POST':
obj = UserInfo(request.POST)
if obj.is_valid():
return HttpResponse('通过')
else:
return HttpResponse('不通过') obj = UserInfo()
return render(request,'index.html',{'obj': obj})

  

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<form action="" method="post">
{{ obj.as_p }}
<input type="submit">
</form>
</body>
</html>

  

Django——form组件的局部钩子的更多相关文章

  1. Django学习笔记之form组件的局部钩子和全局钩子

    本文通过注册页面的form组件,查看其中使用的全局钩子和局部钩子. # Create your views here. class RegForm(forms.Form): username = fo ...

  2. Django框架(十四)-- forms组件、局部钩子、全局钩子

    一.什么是forms组件 forms组件就是一个类,可以检测前端传来的数据,是否合法. 例如,前端传来的邮箱数据,判断邮件格式对不对,用户名中不能以什么开头,等等 二.forms组件的使用 1.使用语 ...

  3. Django框架(十五)—— forms组件、局部钩子、全局钩子

    目录 forms组件.局部钩子.全局钩子 一.什么是forms组件 二.forms组件的使用 1.使用语法 2.组件的参数 3.注意点 三.渲染模板 四.渲染错误信息 五.局部钩子 1.什么是局部钩子 ...

  4. 9.24 Django Form组件

    2018-9-23 20:10:04 这两天优化了自己图书管理系统 github 连接:https://github.com/TrueNewBee/pythonDemo 顺便整理了博客,写了好多总结, ...

  5. django form组件 cookies,session

    django form组件 渲染标签  就是组件里面的字段在前端展示叫做渲染标签 校验数据  用户输入的数据提交给后端组件叫做校验数据 forms组件中定义的字段都是必须传值的(required=Tr ...

  6. django Form组件

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

  7. Django—Form组件

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

  8. 6月28日 Django form组件 和 modelform组件

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

  9. django——form组件

    1.html表单概述 Django开发的是动态Web服务,而非单纯提供静态页面.动态服务的本质在于和用户进行互动,接收用户的输入,根据输入的不同,返回不同的内容给用户.返回数据是我们服务器后端做的,而 ...

  10. Django form组件 与 cookie/session

    目录 一.form组件 二.cookie.session 返回Django 组件 一.form组件 1.1 以注册功能为例 注册功能 1.渲染前端标签获取用户输入 --> 渲染标签 2.获取用户 ...

随机推荐

  1. Redis Pipelining 底层原理分析及实践

    作者:vivo 互联网服务器团队-Wang Fei Redis是一种基于客户端-服务端模型以及请求/响应的TCP服务.在遇到批处理命令执行时,Redis提供了Pipelining(管道)来提升批处理性 ...

  2. sql 语句系列(字符串之裂开)[八百章之第十三章]

    创建分割列表 一张表: 先查询出来的效果是这样的: mysql: select emp_copy.deptno,GROUP_CONCAT(emp_copy.emps SEPARATOR ',') fr ...

  3. JavaScript中字符串小知识

    1. 字符串是不可变的 字符串一旦创建就是不可变的,后续的修改都是新建一个新的字符串而不是在原有的字符串上修改 // 在内存中开辟 可以存放五个字母的空间 str指向该空间 let str = 'fi ...

  4. WebRTC获取IP地址问题,Uncaught TypeError: Cannot read property '1' of null

    WebRTC获取IP地址问题,Uncaught TypeError: Cannot read property '1' of null 临时接了个任务,客户要求某个账号只能在某个ip或者mac上登录, ...

  5. PolarDB-X 源码解读系列:DML 之 INSERT IGNORE 流程

    简介: 本文将进一步介绍 PolarDB-X 中 INSERT IGNORE 的执行流程,其根据插入的表是否有 GSI 也有所变化. 作者:潜璟 在上一篇源码阅读中,我们介绍了 INSERT 的执行流 ...

  6. WPF 通过 EXIF 设置和读取图片的旋转信息

    本文将告诉大家如何在 WPF 里面设置图片的 EXIF 信息,包括如何设置图片的旋转信息,以及如何读取 EXIF 的内容 值得一提的是在 WPF 里面,默认的图片渲染信息是无视 System.Phot ...

  7. WPF 基础 2D 图形学知识 判断点是否在线段上

    在知道一个使用两个点表示的线段,和另一个点,求另一个点是否在线段上 本文算法属于通用的算法,可以在 WPF 和 UWP 和 Xamarin 等上运行,基本上所有的 .NET 平台都能执行 如下图,如果 ...

  8. 5.k8s Service四层负载:服务端口暴露

    题目一:暴露服务service 设置配置环境: [candidate@node-1] $ kubectl config use-context k8s Task 请重新配置现有的 deployment ...

  9. vue监听watch

    export default { watch:{         showArea(val,_val){                            console.log('showAre ...

  10. C++ lambda的重载

    先说结论,lambda是不能重载的(至少到c++23依旧如此,以后会怎么样没人知道).而且即使代码完全一样的两个lambda也会有完全不同的类型. 但虽然不能直接实现lambda重载,我们有办法去模拟 ...