Django form 校验数据-前后端分离
Posted beautyl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django form 校验数据-前后端分离相关的知识,希望对你有一定的参考价值。
对于views中的逻辑,比如在post请求添加数据时,后端会做一些校验。
这时不需要在views的函数或者类中写太多的if判断,django提供了form 这个校验工具
可以实现对一些字段的基本校验和自定义某些字段的校验方法
1,form
1 from django.core.exceptions import ValidationError 2 # 导入django中的异常信息
1 from django import forms 2 class CaseForm(forms.Form): 3 # 这个form用来校验添加用例时请求的参数是否合法,就不用在view里面写if判断了 4 title=forms.CharField(max_length=50,min_length=2) 5 desc=forms.CharField(required=False) 6 # required=false 表示 这个参数不 必传 7 url=forms.URLField() 8 params=forms.CharField(max_length=100) 9 method=forms.IntegerField() 10 def clean_method(self): 11 # 除了上述的一些校验之外,还需要对单个某个字段进行校验,可以写一个函数。必须以clean开头 12 method=self.cleaned_data.get(‘method‘) 13 # 先从form的clean data中拿到 method 14 if method not in (0,1,2,3): 15 raise ValidationError(‘method值不对‘) 16 # 抛出django中的异常: 校验异常,程序停止运行 17 return method 18 def clean_title(self): 19 title=self.cleaned_data.get(‘title‘) 20 if models.Case.objects.filter(title=title).count()>0: 21 # 校验是否存在,需要从数据库里面查一下才知道 22 raise ValidationError(‘用例标题已经存在‘) 23 return title 24 def clean(self): 25 # 当需要同时校验多个字段时,可以用这个函数 26 pass 27 # title= 28 # method=
2,cvb class的写法
1 class CaseView(View): 2 # 添加了form校验 3 # cvb的方式统一实现测试用例的增删改查 4 def post(self,request): 5 form=CaseForm(request.POST) 6 # 实例化form,传入 request.POST 7 # 数据从form里面获取,不需要写post.get了 8 if form.is_valid(): 9 # 这里form 校验成功或失败,返回true或false 10 models.Case.objects.create(**form.cleaned_data) 11 # cleaned_data 是一个字典 12 # 字典的拆包:title=title,desc=desc... 13 data = {‘code‘: 0, ‘msg‘: ‘成功‘} 14 else: 15 print(form.errors.as_data()) 16 # 在pycharm里面打印form校验失败的错误信息 17 data={‘code‘:-1,‘msg‘:‘失败‘} 18 return JsonResponse(data, json_dumps_params={‘ensure_ascii‘: False}) 19 def delete(self,request): 20 id=request.GET.get(‘id‘) 21 models.Case.objects.filter(id=id).update(is_delete=True) 22 data = {‘code‘: 0, ‘msg‘: ‘成功‘} 23 return JsonResponse(data, json_dumps_params={‘ensure_ascii‘: False}) 24 def put(self,request): 25 pass 26 def get(self,request): 27 case_sets = models.Case.objects.filter(is_delete=False) 28 data = [] 29 for c in case_sets: 30 # 查询结果为一个包含model对象的列表 循环该列表获取到每一个Model对象 31 case = model_to_dict(c) 32 # 把Model对象转换成字典 33 data.append(case) 34 # 把这些字典添加一个list中 35 response = {‘code‘: 0, ‘msg‘: ‘成功‘, ‘data‘: data} 36 return JsonResponse(response, json_dumps_params={‘ensure_ascii‘: False})
以上是关于Django form 校验数据-前后端分离的主要内容,如果未能解决你的问题,请参考以下文章
Django form组件 与 cookie/session
前后端分离之后端代码实现获取数据库数据——django+mysql+vue+element