Django的form组件——自定义校验函数
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组件——自定义校验函数的更多相关文章
- Django之form组件is_valid校验机制
#先来归纳一下整个流程 #()首先is_valid()起手,看seld.errors中是否值,只要有值就是flase #()接着分析errors.里面判断_errors是都为空,如果为空返回self. ...
- Django【第16篇】:Django之Form组件自定义验证规则
自定义验证规则以及中间件简单介绍 1.python2和python3中的区别 对于python2内置的字符串类型有str和unicode 比如:"abc"是字符串,u"你 ...
- Django的form组件——正则校验
from django.contrib import admin from django.urls import path from app01 import views urlpatterns = ...
- Python - Django - form 组件自定义校验
reg2.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- django之表多对多建立方式、form组件、钩子函数 08
目录 多对多三种创建方式 1.全自动(用ManyToManyField创建第三张表) 2.纯手写 3.半自动 form组件 引入 form组件的使用 forms组件渲染标签 form表单展示信息 fo ...
- Django之Form组件(一)
Django之Form组件(一) Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本操作:字 ...
- python框架之Django(10)-Form组件
介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...
- 〖Python〗-- Django的Form组件
[Django的Form组件] Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使 ...
- Django之Form组件
Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...
随机推荐
- ASP.NET Core下FreeSql的仓储事务
ASP.NET Core下FreeSql的仓储事务 第一步:配置 Startup.cs 注入 引入包 dotnet add package FreeSql dotnet add package Fre ...
- Netty基础招式——ChannelHandler的最佳实践
本文是Netty系列第7篇 上一篇文章我们深入学习了Netty逻辑架构中的核心组件EventLoop和EventLoopGroup,掌握了Netty的线程模型,并且介绍了Netty4线程模型中的无锁串 ...
- 【Android面试查漏补缺】之事件分发机制详解
前言 查漏补缺,查漏补缺,你不知道哪里漏了,怎么补缺呢?本文属于[Android面试查漏补缺]系列文章第一篇,持续更新中,感兴趣的朋友可以[关注+收藏]哦~ 本系列文章是对自己的前段时间面试经历的总结 ...
- 搭建NFS文件共享
1.概述: NFS(Network File System)意为网络文件系统,它最大的功能就是可以通过网络,让不同的机器不同的操作系统可以共享彼此的文件.简单的讲就是可以挂载远程主机的共享目录到本地, ...
- Docker入门第一章
Docker为什么出现? 一款产品:开发到上线 两套环境!应用环境,应用配置! 可能在开发环境你的产品是正常的,但是到了线上环境你的产品可能就会出现各种原因,或许是因为环境的不同,也可能是因为配置的不 ...
- [JAVA]关于excel的jxl包的操作-创建sheet
前言 最近玩的游戏需要记录数据, 手打excel太麻烦了 于是就学了学java的jxl操作.本来记录在有道云笔记就可以的,由于乐于分享的精神 就在博客园造了个号, 之前自己本来有做个人的网站的,奈何网 ...
- python 将Mnist数据集转为jpg,并按比例/标签拆分为多个子数据集
现有条件:Mnist数据集,下载地址:跳转 下载后的四个.gz文件解压后放到同一个文件夹下,如:/raw Step 1:将Mnist数据集转为jpg图片(代码来自这篇博客) 1 import os 2 ...
- Spring Security项目的搭建以及Spring Security的BCrypt加密
.personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...
- leetcode 最佳买卖股票时机含冷冻期
这道题算是股票问题的变体之一,主要在于不限制交易次数而存在冷冻期,所以我们需要对我们的dp数组进行改变,第一维是指第几天,第二维是指是否持有股票,在这里因为不限制交易次数k,所以并未涉及第三维度. 同 ...
- 基于typescript编写vue的ts文件语法模板
1 <template> 2 <div> 3 <input v-model="msg"> 4 <p>prop: {{ propMes ...