数据校验

Form组件使用

老子叫甜甜 提交于 2020-02-13 12:40:16
form组件 form组件的功能 生产input标签 对提交的数据进行校验 提供错误提示 form组件中常用字段 # 查看所有字段可点进forms中,fields里面是所有字段,widgets是所有插件 CharField # 生成input框,默认文本输入框 ChoiceField # 选择框,默认是select单选下拉框 MultipleChoiceField # 多选框,默认是select下拉框。里面是选择的内容 注:想更改可以用已经写好的字段,也可以直接改widget 如:email = forms.CharField(label='邮箱',widget=EmailInput)将文本输入框改成了邮箱输入框。 字段参数 required=True, 是否允许为空 widget=None, HTML插件,改变input框中格式,如:从文本变成email label=None, 用于生成Label标签或显示内容 initial=None, 初始值,默认值,默认填在input框中 error_messages=None, 修改错误信息显示内容 {'required': '不能为空', 'invalid': '格式错误'} 键是对应的参数,值是想要显示的错误信息内容 validators=[], 自定义验证规则 disabled=False, 是否可以编辑 min_length:

jQuery formValidator表单验证插件

狂风中的少年 提交于 2020-02-08 02:10:05
什么是jQuery formValidator? jQuery formValidator表单验证插件是客户端表单验证插件。 在做B/S开发的时候,我们经常涉及到很多表单验证,例如新用户注册,填写个人资料,录入一些常规数据等等。在这之前,页面开发者(JavaScript开发者)需要编写大量的JavaScript来进行表单元素的校验,而这些校验在平时开发中不停的重复书写。 常见的校验如不能为空,必须满足长度要求,必须为数字,必须为Email等等。一般要判断的表单元素比较多,开发过程就显得枯燥无味——重复的代码不断重复,而且可能还要兼容多种浏览器,更多的考虑因素使人头疼不已。由于每个要校验的页面虽然逻辑基本相同,但是在大多数情况下,出于种种原因,开发者宁愿再编写一套JS文件,为了便于管理。 jQuery formValidator表单插件致力于改善这一过程。你只关心业务逻辑,而无需关系实现过程,只需简单的配置,无需写代码就能实现表单的检验。它包括常规检验功能和可扩展校验功能。针对每个表单元素你只需要写一行配置信息就能完成校验。而这些配置信息无需写入表单元素,实现了js代码和html代码的分离。这样做的好处,使B/S开发过程中,分工更加明确,页面设计着只需关心他的页面(设计的时候不必担心把脚本弄坏了),javascript开发者只需关心脚本的开发。 而插件本身包含的校验方式可以有无数种

day02下

无人久伴 提交于 2020-02-08 01:38:08
数据校验? 后台需要将前端传递的数据进行合法性验证 前端校验:用户可以自行关闭,不安全 java:后端校验 我们总是不信任前端的,所以需要前端+后端双重校验 后端使用JSR303标准进行校验,步骤: 1)给需要校验的javaBean上标注校验注解 2)告诉Springboot需要进行校验(在需要校验的javaBean上加上@Valid) sprngmvc在进入方法之前,确定参数数值的时候就会进行校验,如果校验出错,则直接返回错误,不执行代码 3)如果感知校验成功还是失败? 只需要给开启了校验的javaBean参数后面,紧跟一个BindingResult对象就可以获取到校验结果,只要有这个参数,即使校验错了,方法也会执行,我们需要手动处理结果,BindingResult有个方法getErrorCount()可以判断校验是否出错和出错的个数,所以可以通过判断校验是否成功来决定是否执行下面的代码 但是我们并不希望每次需要校验都要写一段代码来完成,这样的话太冗杂,所以把这个功能给抽取出来变成一个切面aop,要专门写一个aop切面类,需要导入对应jar包和用对应的注解。 然后在切面类加上@Aspect注解 切面的通知分为前置通知,后置通知,返回通知,环绕通知,异常通知 这里想利用aop完成统一的数据校验,所以用环绕通知合适(因为要返回给前端无论成功与否),aop类代码如下: 用的环绕通知

Python 闭包和__call__详解及开发实践

。_饼干妹妹 提交于 2020-02-07 23:31:57
背景 最近在使用 wtform 做后台的表单验证时候,跟很多框架使用的方法一样,它是结合ORM的对象提供校验, wtform 默认提供了不少的校验器,但是有的字段需要自己编写一些业务相关的校验器。 自定义的每个校验器的特点都是接受两个参数,form, field。 所以我们自己自定义校验器,校验器都必须是可调用对象即可,即函数,对象方法,都可以的。 比如function url_validate(form, field) 我们可以使用下面几种方式来实现 使用函数定制 def my_length_check ( form , field ) : if len ( field . data ) > 50 : raise ValidationError ( 'Field must be less than 50 characters' ) class MyForm ( Form ) : name = StringField ( 'Name' , [ InputRequired ( ) , my_length_check ] ) 上面提供一个my_length_check()函数,用于验证name长达是否长于50个字符。 这个函数按照规定接受两个参数,form, field,然后就可以根据两个参数进行判断。 这样做是可以的,但是问题是: 如果我想自定义错误信息怎么办?而且里面的限制是50,

第十篇:跨站请求伪造csrf

假如想象 提交于 2020-02-07 21:04:45
钓鱼网站 钓鱼网站和正规网站的页面一模一样,提交网页数据的url也一样,但是会在页面中设置隐藏属性的form表单。例如转账:给用户书写的form表单,对方账号的input没有name属性,然后另外写一个具有默认的并且是隐藏的具有name属性的input框。 form表单如何通过csrf校验 为了防止此类事情的发生,我们使用csrf_token生成随机字符串 在form表单内添加: {% csrf_token %} browser客户端向服务端发动get请求,服务端返回给browser一串随机的字符串,当browser向服务端发送post请求时,会携带上该字符串,服务端会先对该随机字符串进行校验,如果客户端携带的字符串和服务器上的字符串一致,服务端会允许客户端提交post请求,否则会被forbidden掉。 当客户端向django服务端发送post请求,django中间件 django.middleware.csrf.CsrfViewMiddleware 会获取post中携带的name为“ csrfmiddlewaretoken ”的value是否和之前返回给客户端的value一致。 ajax如何通过csrf校验 第一种: 自己手动获取 <body> <form action="" method="post"> {% csrf_token %} <p>用户名:<input type=

Java之Ajax&Ajax异步校验用户名

拈花ヽ惹草 提交于 2020-02-06 03:36:49
Ajax 即“Asynchronous JavaScript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。Ajax并非一种新的技术,而是集中原有技术的结合体。它由下列技术组合而成: 使用CSS和XHTML表示 使用DOM模型交互和动态显示 使用XMLHttpRequest和服务器进行异步通信 使用JavaScript绑定和调用 1. 作用 实现在不刷新整个页面的情况下,对部分数据进行更新。 2. 内部原理【简单理解】 举个例子:判断用户名是否已被注册 传统方式: 输入用户名; 点击一个按钮,校验; 把数据交给服务器; 服务器在后台完成校验,并且反馈信息; 在浏览器上提示用户。 Ajax方式: 通过JS获取输入框文本内容document.getElementById(“username”).value 通过XMLHttpRequest执行请求; 请求结束后,收到结果,再使用js完成提示。** 3.1 数据请求 Get 1. 创建对象; function ajaxFunction ( ) { var xmlHttp ; try { // Firefox, Opera 8.0+, Safari xmlHttp = new XMLHttpRequest ( ) ; } catch ( e ) { try { // Internet

使用Joi来验证数据模型

我与影子孤独终老i 提交于 2020-02-06 03:05:49
Joi模块简介 我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时,那么你要进一步判断,下面和大家分享一种可读性和易用性更好的实现方法。 Joi 是 hapijs 自带的数据校验模块,他已经高度封装常用的校验功能,JavaScript对象的规则描述语言和验证器。是本文就是介绍如何优雅地使用 joi 对数据进行校验。相信你会喜欢上它。 Joi模块基础使用 // 引入joi模块 const Joi = require ( 'joi' ) ; // 定义对象的验证规则 const schema = { username : Joi . string ( ) . min ( 2 ) . max ( 5 ) . required ( ) . error ( new Error ( 'username属性没有通过验证' ) ) , birth : Joi . number ( ) . min ( 1900 ) . max ( 2020 ) . error ( new Error ( 'birth没有通过验证' ) ) } ; async function

Django之FORM

早过忘川 提交于 2020-02-05 06:58:13
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.。 Django form组件就实现了上面所述的功能。 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 普通方式手写注册功能 views.py # 注册 def register(request): error_msg = "" if request.method == "POST": username = request.POST.get("name") pwd = request.POST.get("pwd") # 对注册信息做校验 if len(username) < 6: # 用户长度小于6位 error_msg = "用户名长度不能小于6位" else: # 将用户名和密码存到数据库 return HttpResponse("注册成功") return render(request, "register.html", {"error_msg": error_msg}) login.html <!DOCTYPE

Django之forms组件使用

你。 提交于 2020-02-05 06:54:21
注册功能 1.渲染前端标签获取用户输入 >>> 渲染标签 2.获取用户输入传递到后端校验 >>> 校验数据 3.校验未通过展示错误信息 >>> 展示信息 校验数据(前后端都可以校验) 校验前端后端都可以做,但是前端可以不做,后端必须得做!!! django form组件 1.渲染标签 2.校验数据 3.展示信息 校验数据 第一步需要在views中写一个form类 from django import forms class MyForm(forms.Form): name = forms.CharField(max_length=6) password = forms.CharField(max_length=8,min_length=3) email = forms.EmailField(required=True) 第二步实例化form对象 form_obj = MyForm({'name':'jason'}) 第三步查看数据校验是否合法 form_obj.is_valid() # 只有当所有的字段都校验通过才会返回True 第四步查看校验错误的信息 form_obj.errors # 这个里面放的是所有校验未通过的字段及错误提示 """ { 'name': ['Ensure this value has at most 6 characters (it has 7).'],

Django组件-forms组件

醉酒当歌 提交于 2020-02-05 05:39:54
forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 校验字段功能 之前写的视图函数,提交的数据,没有做校验,就调教到数据库里面了。这样是不对的。 比如:用户名,必须要符合一定的长度。密码复杂度,等等。 forms组件最大的作用,就是做数据校验。 普通做法,一个一个写校验规则,没有解耦。校验规则,都在视图函数里面。 新建项目formDemo 新建urls.py ,新增路径index 1 from app01 import views 2 urlpatterns = [ 3 path('admin/', admin.site.urls), 4 path('index/', views.index), 5 ] 修改views.py ,新增index视图函数,form组件先放到视图函数 单独起一个类,后续会分离出来 from django.shortcuts import render # Create your views here. from django import forms # 必须导入模块 class DemoForm(forms.Form): # 必须继承Form #限制数据为字符串,最大长度32 name = forms.CharField(max