Django_form验证
2024-08-29 21:13:37
需求:
当用户向Django后端以post提交数据的时候,无论前端是否进行数据合法验证,后端都需要对客户端提交过来的数据进行数据合法性验证,是否可以利用models中表类字段的约束来实现验证,并且可以进一步对某个单独的字段进行自定义验证,并保存呢?
那,如何满足这个需求呢?
- 从Django中 导入forms
- 定义一个form类,继承forms.ModelForm
- 类中定义一个Meta,指定model=表类名, fields=[ ] 列表中添加想要验证的字段
- 在和Meta同级定义一个 def函数,函数名为:clean_字段名 方式进行对某个字段的特殊处理,并可以改变这个字段的属性
- view中导入这个form类,实例化时候,把request.POST传递进去,通过object.is_valid()判断是否验证成功,验证失败通过object.errors提交错误信息
- form验证成功的数据,放在object.cleaned_data中,以字典的形式存放
__author__ = 'beimenchuixue'
__blog__ = 'http://www.cnblogs.com/2bjiujiu/' # form.py文件中
import re
# 此form验证用户咨询表UserAsk中三个字段,name、mobile、course_name
# Meta直接利用数据库的约束条件进行字段验证,但是mobile的值要经过特殊验证
class UserAskFrom(forms.ModelForm): class Meta:
model = UserAsk
fields = ['name', 'mobile', 'course_name'] def clean_mobile(self):
# 对手机号码进行严格验证clean_+字段名
mobile = self.cleaned_data['mobile']
REGEX_MOBILE = '^1[358]\d{9}|^147\d{8}|^176\d{8}$'
p = re.compile(REGEX_MOBILE)
if p.match(mobile):
return mobile
else:
return forms.ValidationError(u'手机号码错误', code='mobile_invalid') # view.py文件中
# view中实例化时候,直接通过实例对象.save(commit=True)保存验证好的数据
class AddUserAskView(View):
"""课程咨询"""
def post(self, request):
# 把request.POST传递进去,要求post的key值和form中fields保持一致
user_ask_form = UserAskFrom(request.POST)
if user_ask_form.is_valid():
# 验证成功直接保存, commit=True 表示提交
user_ask_form.save(commit=True) # 对前端传过来的文件,进行验证并且保存,文件传输,必须保证为用户已经验证登录
# 以用户更换头像为例子,LoginRequiredMixin要求登录的基类 :http://www.cnblogs.com/2bjiujiu/p/7452902.html
class UpLoadImageView(LoginRequiredMixin, View):
"""更换图片"""
def post(self, request):
# 对于上传的文件,放到request.FILES中,instance=request.user指定验证表字段中的一个唯一数据,对该数据有就更新,没有就增加
image_form = UpLoadImageForm(request.POST, request.FILES, instance=request.user)
if image_form.is_valid():
# 自己通过表单对象save方法进行保存数据
image_form.save()
# 返回json数据,包含状态码
return HttpResponse("{'status':'success'}", content_type='application/json')
else:
return HttpResponse("{'status':'fail'}", content_type='application/json')
最新文章
- 每天5分钟 玩转OpenStack 目录列表
- 基于Task的异步模式--全面介绍
- ReactiveCocoa常见操作方法介绍/MVVM架构思想
- ASP.NET MVC3实现无刷新验证码
- C# richTextBox封装的一个打印的类
- Using JAAS Authentication in Java Clients---weblogic document
- 有关Spring Batch
- java 位运算权限管控(转载)
- 转:Spark User Defined Aggregate Function (UDAF) using Java
- R+tmcn笔记︱tmcn包的基本内容以及李舰老师R语言大会展示内容摘录
- iOS逆向工程,(狗神)沙梓社大咖免费技术分享。
- property干嘛的
- JAVA面向对象-----构造方法
- 获取JSON格式的树形
- saver.restore()遇到的错误
- 实现Linux下的ls和ls-l
- Asp.net中web.config配置文件详解(一)
- Zookeeper入门(二)之基础
- 动态规划:树形DP-选课(树形背包)
- Ubuntu 17 Nginx 配置 laravel 运行环境
热门文章
- Upgrade with the Gradle Wrapper, gradlew升级
- C语到C++注释转换小项目
- linux报错:命令未找到
- JS 引擎的执行机制
- LoadRunner 中实现MD5加密
- 【Java学习笔记之十六】浅谈Java中的继承与多态
- BZOJ 1088: [SCOI2005]扫雷Mine【思维题,神奇的模拟+枚举】
- Codeforces Round #345 (Div. 2)【A.模拟,B,暴力,C,STL,容斥原理】
- 使用vue-axios请求geoJson数据报错的问题
- parse_str() 函数把查询字符串解析到变量中。