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)
) def clean_username(self): #此处自定义一个校验规则的函数:用户名不能含有admin
value = self.cleaned_data.get("username") #获取输入的username的值
if "admin" in value: #如果包含了admin
raise ValidationError("用户名不能含有敏感信息") #则返回错误信息 def test(request):
if request.method == 'GET':
u_obj = UserInfo()
return render(request, 'test.html', {'u_obj': u_obj})
else:
u_obj = UserInfo(request.POST)
if u_obj.is_valid():
print(u_obj.cleaned_data)
return HttpResponse('检验通过')
else:
print(u_obj.errors)
return render(request, 'test.html', {'u_obj': u_obj})

  

上面是在class的内部定义方法,还可以在class类的外部定义函数,如下:

from django.shortcuts import render,HttpResponse
from django import forms
from django.core.exceptions import ValidationError #校验错误 #自定义一个校验的函数,如果长度大于6,则抛出错误信息
def max_num(n):
if len(n) > 6:
raise ValidationError('太长了') class UserInfo(forms.Form): username = forms.CharField(
label='用户名',
required=True, #validators:自定义校验
validators=[max_num] #在此处使用自定义的函数,检验时,会自动将输入的值作为参数传入函数中,并进行校验和返回错误信息
) password = forms.CharField(
label='密码',
widget=forms.widgets.PasswordInput(render_value=True)
) def test(request):
if request.method == 'GET':
u_obj = UserInfo()
return render(request, 'test.html', {'u_obj': u_obj})
else:
u_obj = UserInfo(request.POST)
if u_obj.is_valid():
print(u_obj.cleaned_data)
return HttpResponse('检验通过')
else:
print(u_obj.errors)
return render(request, 'test.html', {'u_obj': u_obj})

  

Django的form组件——自定义校验函数的更多相关文章

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

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

  2. Django【第16篇】:Django之Form组件自定义验证规则

    自定义验证规则以及中间件简单介绍 1.python2和python3中的区别 对于python2内置的字符串类型有str和unicode 比如:"abc"是字符串,u"你 ...

  3. Django的form组件——正则校验

    from django.contrib import admin from django.urls import path from app01 import views urlpatterns = ...

  4. Python - Django - form 组件自定义校验

    reg2.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  5. django之表多对多建立方式、form组件、钩子函数 08

    目录 多对多三种创建方式 1.全自动(用ManyToManyField创建第三张表) 2.纯手写 3.半自动 form组件 引入 form组件的使用 forms组件渲染标签 form表单展示信息 fo ...

  6. Django之Form组件(一)

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

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

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

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

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

  9. Django之Form组件

    Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...

随机推荐

  1. ASP.NET Core下FreeSql的仓储事务

    ASP.NET Core下FreeSql的仓储事务 第一步:配置 Startup.cs 注入 引入包 dotnet add package FreeSql dotnet add package Fre ...

  2. Netty基础招式——ChannelHandler的最佳实践

    本文是Netty系列第7篇 上一篇文章我们深入学习了Netty逻辑架构中的核心组件EventLoop和EventLoopGroup,掌握了Netty的线程模型,并且介绍了Netty4线程模型中的无锁串 ...

  3. 【Android面试查漏补缺】之事件分发机制详解

    前言 查漏补缺,查漏补缺,你不知道哪里漏了,怎么补缺呢?本文属于[Android面试查漏补缺]系列文章第一篇,持续更新中,感兴趣的朋友可以[关注+收藏]哦~ 本系列文章是对自己的前段时间面试经历的总结 ...

  4. 搭建NFS文件共享

    1.概述: NFS(Network File System)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享彼此的文件.简单的讲就是可以挂载远程主机的共享目录到本地, ...

  5. Docker入门第一章

    Docker为什么出现? 一款产品:开发到上线 两套环境!应用环境,应用配置! 可能在开发环境你的产品是正常的,但是到了线上环境你的产品可能就会出现各种原因,或许是因为环境的不同,也可能是因为配置的不 ...

  6. [JAVA]关于excel的jxl包的操作-创建sheet

    前言 最近玩的游戏需要记录数据, 手打excel太麻烦了 于是就学了学java的jxl操作.本来记录在有道云笔记就可以的,由于乐于分享的精神 就在博客园造了个号, 之前自己本来有做个人的网站的,奈何网 ...

  7. python 将Mnist数据集转为jpg,并按比例/标签拆分为多个子数据集

    现有条件:Mnist数据集,下载地址:跳转 下载后的四个.gz文件解压后放到同一个文件夹下,如:/raw Step 1:将Mnist数据集转为jpg图片(代码来自这篇博客) 1 import os 2 ...

  8. Spring Security项目的搭建以及Spring Security的BCrypt加密

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  9. leetcode 最佳买卖股票时机含冷冻期

    这道题算是股票问题的变体之一,主要在于不限制交易次数而存在冷冻期,所以我们需要对我们的dp数组进行改变,第一维是指第几天,第二维是指是否持有股票,在这里因为不限制交易次数k,所以并未涉及第三维度. 同 ...

  10. 基于typescript编写vue的ts文件语法模板

    1 <template> 2 <div> 3 <input v-model="msg"> 4 <p>prop: {{ propMes ...