Django异常 DJango会抛出一些它自己的异常,以及Python的标准异常。 Django核心异常 Django核心异常类定义在django.core.exceptions中。...InvalidSessionKey SuspiciousFileOperation SuspiciousMultipartForm SuspiciousSession 如果SuspiciousOperation异常到达了WSGI...FieldError exception FieldError[source] FieldError异常当模型字段上出现问题时产生。它会由以下原因造成: 模型中的字段与抽象基类中相同名称的字段冲突。...字段不能由查询参数中的关键词决定。 连接(join)不能在指定对象上使用。 字段名称不可用。 查询包含了无效的 order_by参数。...关于验证的更多信息,请见表单字段验证, 模型字段验证 和 验证器参考。
msg = "[" + fieldError.getDefaultMessage() + "]"; log.error("{}:字段=={}\t值=={}", msg, field,...报错字段 * @return msg */ public String getErrorMsg(FieldError fieldError) { String field...= "[" + fieldError.getDefaultMessage() + "]"; log.error("{}:字段=={}\t值=={}", msg, field, rejectedValue...(), e); return CommonResult.error("不支持' " + e.getMethod() + "'请求"); } /** * 拦截未知的运行时异常...fraction @Future 限制必须是一个将来的日期 @Max(value) 限制必须为一个不大于指定值的数字 @Min(value) 限制必须为一个不小于指定值的数字 @Past 限制必须是一个过去的日期
groups ={AddGroup.class,UpdateGroup.class}) - @Validated({AddGroup.class}),给校验注解标注什么情况需要进行校验 - 默认没有指定分组的字段校验使用注解...::getField, FieldError::getDefaultMessage)); 所以可以得出结果,肯定是这个校验结果是,某个key出现了两次,导致无法封装成功,因此他也不知道同一个键,第二次的值是要丢掉还是替换第一个呢...,其中 username 和 password 都出现了两次,正如我们的校验注解缩写,每个字段都有两个校验 @NotBlank(message = "用户名不能为空") @Length...().forEach(fieldError -> { String field = fieldError.getField(); String message = fieldError.getDefaultMessage...校验失败抛出 **MethodArgumentNotValidException** 最后,如果你还是不清楚,你就使用Exception来处理,肯定能成功,你再打印一下异常的类型就能看到它具体是哪个类了!
message = "品牌名必须提交",groups ={AddGroup.class,UpdateGroup.class}) - @Validated(),给校验注解标注什么情况需要进行校验 - 默认没有指定分组的字段校验使用注解...::getField, FieldError::getDefaultMessage)); 所以可以得出结果,肯定是这个校验结果是,某个key出现了两次,导致无法封装成功,因此他也不知道同一个键,第二次的值是要丢掉还是替换第一个呢...,其中 username 和 password 都出现了两次,正如我们的校验注解缩写,每个字段都有两个校验 @NotBlank(message = "用户名不能为空") @Length(...总结: 某个字段上有两个或多个校验注解时,如果两个的规则都被触发,那么就会有两个键相同(都是这个字段名),值不同(两个校验各自的message)的校验结果。...().forEach(fieldError -> { String field = fieldError.getField(); String message = fieldError.getDefaultMessage
, groups = {Group2.class}) private String mobile; } 控制类 Controller 中指定了,校验的组类型!...groups = {组接口.class} Controller 上使用时候可以指定,校验实体的组 不指定即没有组的校验进行校验核对!...更改:实体: 为了能够进行嵌套验证,必须手动在Item实体的props字段上明确指出这个字段里面的实体也要进行验证。...fieldErrors.forEach(fieldError -> { //日志打印不符合校验的字段名和错误提示 log.error("error field...= null) { errors.forEach(p -> { FieldError fieldError = (FieldError
这个是插入操作,不需要验证ID,这个是修改操作,必须要验证ID,那就爽歪歪了,不过确实有这种骚操作。...,亲测可用,不贴结果了 @PostMapping("/insertTeacherHello") public TeacherDto insertTeacherHello( @Validated...BaseConstant.Update.class) @RequestBody TeacherDto teacherDto) { return teacherDto; } 但是也有一种情况,就是下面这中,我不指定...) { BindingResult bindingResult = e.getBindingResult(); String errorMesssage = ""; for (FieldError...fieldError : bindingResult.getFieldErrors()) { errorMesssage += fieldError.getDefaultMessage()
,host等,则该URL还需满足提供的条件 @Valid 该注解主要用于字段为一个包含其他对象的集合或map或数组的字段,或该字段直接为一个其他对象的引用,这样在检查当前对象的同时也会检查该字段所引用的对象..., ERR_9999(9999,"未知错误!")..., ERR_9999(9999,"未知错误!")...userName": "张三", "phoneNum": "13888888888" } } RestControllerAdvice拦截并重构响应 supports 判断是否指定了特定的注解...fieldError : fieldErrors) { // 那段字段名 String field = fieldError.getField();
(3)代码方式验证Action中所有的方法;代码方式验证Action中指定的方法;xml方式验证Action中所有的方法;xml方式验证Action中指定的方法; 2:代码方式验证Action中所有的方法...92 } 4:xml方式验证Action中所有的方法(代码验证比较繁琐,设计很多重复的验证逻辑,例如,非空验证,数值验证,email,日期等等,struts2对于常用的验证,进行了封装,即提供了验证器...-- 验证的每一字段用field表示 --> 8 9 字段用field表示 --> 17 18 字段较少的情况用! XML验证: 通用,但不够灵活; 可以验证特定简单的业务。 适合: 验证表单字段较多,可以大大简化代码!
fieldError = result.getFieldError(); String field = fieldError.getField(); String...SUCCESS(1000, "成功"), FAILED(1001, "响应失败"), VALIDATE_FAILED(1002, "参数校验失败"), ERROR(5000, "未知错误...去掉接口中的Response包装 @RestControllerAdvice既可以全局拦截异常也可拦截指定包下正常的返回值,可以对返回值进行修改。...> parameterType = e.getParameter().getParameterType(); // 拿到错误的字段名称 String fieldName...System.out.println("开始注册用户..."); return "success"; } } ResponseControllerAdvice 增加一个不包装的条件,配置了@
boolean supports(Class clazz); void validate(Object target, Errors errors); } supports:验证器可以处理可以处理指定的...大多数时候,只给reject或者rejectValue方法传入一个错误码,Spring就会在属性文件中查找错误码没回去相应的错误消息, 还可以传入一个默认的消息,当没有找到指定的错误码时,就会使用默认消息..., Errors errors) { // 强制转成校验对象 Product product = (Product) target; // 校验必填字段...production date is not later than today. ---- Controller类 在Controller类中通过实例化validator类,就可以使用Spring验证器了。...fieldError = bindingResult.getFieldError(); logger.info("Code:" + fieldError.getCode
上节我们实现了分页功能,这节我们要实现对模糊查询后的结果进行分页。...views.py from django.db.models import Q from django.shortcuts import render from .models import Book...: page=paginator.page(pn) except EmptyPage: page=paginator.page(1) #将page和查询字段传给前端...query=p,这正如我们所说,跳转到第二页了,同时,我们仍然位于模糊查询的列表中。...其中遇到的另一个坑就是,自己非要利用外键进行关联查询,在进行模糊查询时,publisher是外键,不能直接用publisher__contains,而应该用publisher__name__contains,否则会报错:FieldError
一、指定自定义的用户模型 ① Django 自定义的 User model 满足一些最低要求: 模型必须有一个唯一的字段可被用于识别目的。可以是一个用户名、电子邮件或任何其它独特属性。...指定的字段是 telephone ,以及password 这个字段不写也会让你输入 REQUIRED_FIELDS = ['username'] is_active 必须定义。..._create_user(telephone, username, password, **kwargs) 三、自定义用户和权限 Django 提供了 PermissionsMixin。...它提供所有 Django 权限类必须的方法和字段。...,就会让你输入 USERNAME_FIELD 指定的字段 # 现在 USERNAME_FIELD 指定的字段是 telephone ,以及password 这个字段不写也会让你输入 REQUIRED_FIELDS
---- JSR 303 - Bean Validation提供了一种后端数据校验支持,如果一键f12修改前端代码成功绕过前端校验,那么就会存入非法数据,所以后端校验十分重要。...@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @DecimalMax...(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @Size(max, min) 被注释的元素的大小必须在指定的范围内 @Digits (integer, fraction) 被注释的元素必须是一个数字...> errors = result.getFieldErrors(); for (FieldError fieldError:errors){...System.out.println("错误的字段名:"+fieldError.getField()); System.out.println("错误信息:"+fieldError.getDefaultMessage
fieldError : bindingResult.getFieldErrors()) { // 打印异常的字段以及异常信息 System.out.println...,如果我希望有些字段不被验证或者分开验证该怎么办呢?...这时候我们就需要到分组验证了,首先编写一个接口: package org.zero01.test; public interface Group { } 然后在需要分组的字段上的注解中加上groups...,这是因为我们只在这两个字段上的注解中指定了groups 属性。...所以分组验证就是只验证指定组的字段,而这个组的划分是以接口来划分的。
validator,只不过 gin 中使用的关键字是 binding 去做标识 开门见山 Validator 实际上是一个验证工具,属于 golang 的第三方包,这个包中使用了各种反射技巧来提供了各种校验和约束数据的方式方法...常用的大概有上述这些,我们也不需要去背,只需要知道如何去使用,以及咱们需要处理数据校验的时候,能够想到 validator 库就行了,实在记不起来看官方文档或者看本篇文章的例子就可以了,这个是官网:...fmt.Println(valiErr) } } 此处我们可以看到我们在 Data 数据结构中,对其成员进行了不同的约束,相信通过 xdm 看到 Data 结构中的 validate 标识后面的约束,就知道响应字段的约束是啥意思了...:"eqfield=NewPwd"` RePwd 字段,需要和 NewPwd 字段相等 ,这个是用 eqfield 做标识的 关于 xxfield 的跨字段约束的相关标识可以查看官网的此处 这里是 valiator...[]FieldError FieldError 中包含了关于 error 的全部信息,我们可以调用 FieldError 里面的成员方法进行输出即可 type FieldError interface
@Max 必须为数字,其值小于或等于指定的最大值 @DecimalMin 必须为数字,其值大于或等于指定的最小值 @DecimalMax 必须为数字,其值小于或等于指定的最大值 @Size 集合的长度...后面我们会学如何自定义 errors.getAllErrors().stream().forEach(error -> { FieldError fieldError...= (FieldError) error; String message = fieldError.getField() + error.getDefaultMessage...我们可以利用BindingResult对象包装错误消息放回前端,让他们知道哪些字段有什么错误。...自定义校验器 有时候,我们需要对特殊的字段做特定的校验,那么我们就可以自定义校验器。下面我们来创建一个@MyConstraint的校验注解。
指定父类连接字段 如上所述,Django 会自动创建一个 OneToOneField ,将子类连接回非抽象的父类。...代理模型管理器¶ 若你未在代理模型中指定模型管理器,它会从父类模型中继承。如果你在代理模型中指定了管理器,它会成为默认管理器,但父类中定义的管理器仍是可用的。...__init__ 中指定哪个字段被初始化)和序列化。这些都是普通的 Python 类继承所不需要处理的功能,所以 Django 模型继承和 Python 类继承之间的区别并不是任意的。...它还对 Python 能识别的属性生效:如果你同时在子类和多表继承的祖先类中指定了数据表的列名(它们是两张不同的数据表中的列)。...若你在祖先模型中重写了任何模型字段,Django 会抛出一个 FieldError。
大家好,又见面了,我是你们的朋友全栈君。...@Max(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @DecimalMin(value) 被注释的元素必须是一个数字,其值必须大于等于指定的最小值 @DecimalMax...(value) 被注释的元素必须是一个数字,其值必须小于等于指定的最大值 @Size(max,min) 被注释的元素的大小必须在指定的范围内。...: vo 页面传过来的数据进行校验 inferface : 只是作为标记一个组别 可以在vo验证的某个字段上面加入多个组别,这样没有加入的组别就不会验证这个字段 controller: 需要 加入...if (oe instanceof FieldError) { FieldError fe = (FieldError) oe;
fraction@Positive被注释的元素必须为正数@PositiveOrZero被注释的元素必须为正数或 0@Max(value)被注释的元素必须小于等于指定的值@Min(value)被注释的元素必须大于等于指定的值...fieldError = (FieldError) objectError; log.error("参数 {} = {} 校验错误:{}", fieldError.getField...(), fieldError.getRejectedValue(), fieldError.getDefaultMessage()); result.put(fieldError.getField...@Valid private ClassInfo classInfo; }复制代码再使用 postman 测试一次 分组校验此外还可以使用分组校验,令一组方法对某些字段校验,而令一组方法对其他字段校验...在 Student 类中添加两个内部接口 Inteface,同时修改 id 字段的注解,以进行分组 @Data public class Student { // id 字段属于 Create
使用这种方式虽然简单直接,但是也有不好的地方,一是降低了开发效率,因为我们需要校验的参数会存在很多地方,并且不同地方会有重复校验,其次降低了代码可读性,因为在业务代码中掺杂了太多额外工作的代码。...需要注意的是,JSR只是一项标准,它规定了一些校验注解的规范,但没有实现,比如@Null、@NotNull、@Pattern等,它们位于 javax.validation.constraints这个包下...比如,在创建对象时不需要传入id字段(id字段是主键,由系统生成,不由用户指定),但是在修改对象时就必须要传入id字段。 在这样的场景下就需要对注解进行分组。...,在默认情况下就会校验name字段和age字段。...然后在controller的方法中,在@Validated注解里指定哪种场景即可,没有指定就代表采用Default.class,采用其他分组就需要显示指定。
领取专属 10元无门槛券
手把手带您无忧上云