rails有一个”简洁、完美的验证机制,无比强大的表达式和验证框架“。在《Agile Web Development with Rails 4th》一书的7.1节向我们展示了如何验证Product:
还是需要解释一下:
validates :title, :description, :image_url, :presence => true :这三个字段不能为空。rails默认是允许为空。而且由于model与migration是分开定义的,
你可以在migration中定义字段不能为空而model中可以为空,或者反之。
validates :price, :numericality => {:greater_than_or_equal_to => 0.01}:price字段应该是有效的数字并且不小于0.01
validates :image_url, :format => {…}: image_url 必须以三种扩展名结尾,这里没有验证是否为有效的url
更加可怕的是,这个验证语法是rails3.0开始支持的,而在此之前的版本要写成这样:
再让我们看看”简洁“的rails验证还有哪些功能(旧版语法):
validates_acceptance_of: 验证指定checkbox应该选中。
这个怎么看都应该是form中的验证而与model无关
validates_associated:验证关联关系
validates_confirmation_of:验证xxx与xxx_confirmation的值应该相同。
这个怎么看也应该是form中的验证而与model无关
validates_length_of:检查长度
validates_each 使用block检验一个或一个以上参数
validates_exclusion_of 确定被检对象不包括指定数据
validates_inclusion_of 确认对象包括在指定范围
validates_uniqueness_of检验对象是否不重复
也许还有more and more, and more, and more…
回到Django。Django的验证有3层机制:
1. Field类型验证。除了能够对应到数据库字段类型的Field类型外,还有EmailField,FileField,FilePathField,ImageField,IPAddressField,PhoneNumberField、URLField、XMLField等,
2. Field选项验证。如,null=true,blank=true, choices,editable,unique,unique_for_date,unique_for_month,unique_for_year等等。有些Field还有自己独有的选项,也可以用来约束数据。
3. 表单(Form)验证。还可以在Form中定义验证方法。可以定义整个Form的验证方法 clean,或者针对某个表单项的验证方法:clean_xxx。
前面建立的Product模型中,已经默认加入了不能为空、要求符合数字等验证,所以还需要进行如下验证:
1.验证price>0:需要在Form中验证;
2. 验证title唯一:在Model中验证;
3. 验证image_url的扩展名:在Form中验证,还可以顺便在Model中将其改为URLField类型。
分享到:
相关推荐
给大家分享一套课程——Django+Vue:Python Web全栈开发(基于Django4.1),已完结10章,附源码。
Django:Django实战项目:在线商城系统开发.docx
Python Django Web典型模块开发实战_用Django设计大型电商的类别表_编程项目案例实例详解课程教程.pdf
Django缓存机制与性能优化 Django错误处理与调试技巧 Django部署与生产环境配置 Django高级特性:自定义管理后台 Django高级特性:RESTful API开发 Django高级特性:WebSocket与实时通信 Django实战项目:在线商城...
Django:Django高级特性:WebSocket与实时通信.docx
Python Django Web典型模块开发实战_用Django实现百度开发者认证业务模型_编程项目案例实例详解课程教程.pdf
Python Django Web典型模块开发实战_分析吾爱破解论坛反爬虫机制_编程项目案例实例详解课程教程.pdf
- **模板系统**:Django的模板语言简洁且易于扩展,支持代码与样式分离,便于管理和维护。 - **缓存系统**:Django可以集成memcached或其他缓存系统,提高网站性能和响应速度。 - **国际化支持**:Django完全支持...
本文包含:Django框架基础知识、Django视图和模板、Django框架和模型和django框架后台、Django框架实战:开发企业官网、Rest Framework 、Vue前端、Vue+Django综合项目;Vue前端对接:通过Vue与后端API进行数据交互...
Chapter 8: Function- and Class-Based Views Chapter 9: Best Practices for Function-Based Views Chapter 10: Best Practices for Class-Based Views Chapter 11: Form Fundamentals Chapter 12: Common Patterns...
Django:Django高级特性:RESTful API开发.docx
Django:Django高级特性:自定义管理后台.docx
5. **表单(Forms)**:Django的表单系统简化了数据验证和用户输入处理。学习如何定义表单类,使用模版展示表单,以及如何处理POST请求中的表单数据。 6. **中间件(Middleware)**:Django的中间件机制允许全局...
**Python Django Web典型模块开发实战** - 这个主题涵盖了使用Python的Django框架进行Web应用开发的实践项目。Django是一个高级的Python Web框架,它鼓励快速开发和干净、实用的设计。通过使用Django,开发者可以...
10. **用户认证与权限**:Django内置了用户认证系统,学习如何注册、登录用户,以及设置用户权限。 11. **中间件(Middleware)**:理解中间件的工作原理,以及如何编写自定义中间件以扩展Django的功能。 12. **...
8. **静态文件与媒体文件**:静态文件如CSS、JavaScript和图片,可以通过`STATIC_URL`和`STATICFILES_DIRS`配置来管理。媒体文件通常包含用户上传的文件,需要配置`MEDIA_URL`和`MEDIA_ROOT`。 9. **部署**:完成...
Django项目代码:爬取并展示链家上海二手房信息
Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的实战项目源码——美多商城 Python基于Django的...
《Django实战》源码(第一、第二版)_DjangoPracticeProject
项目标题:基于Python Django的实战项目源码解析 技术栈:本项目主要采用Python语言开发,辅以HTML和CSS进行前端设计。 文件概览:总计174个文件,包括以下类型: - pyc文件(已编译的Python文件):50个 - py文件...