django為了方便驗證請求的參數,使用了form模塊,在form中我們可以使用它的基本校驗規則,也可以自定義校驗規則
使用了 模塊需要導入
from django import forms
from django.forms import ValidationError
from django.forms import model_to_dict,ValidationError from django.http import JsonResponse from django.shortcuts import render from django.views import View from django import forms from . import models #cvb方式,用例表 #form django自帶的數據校驗模塊 class CaseForm(forms.Form): '''校驗請求參數''' title = forms.CharField(max_length=50,min_length=2) desc = forms.CharField(max_length=70,required=False)#required=False 默認desc可以為空 method = forms.IntegerField() url = forms.URLField() params = forms.CharField(max_length=100) #自定義校驗 #單個參數校驗@1 # def clean_method(self): # method = self.cleaned_data.get('method')#先校驗上述那些基本的格式,然后在校驗自定義的規則 # if method not in (0,1,2,3): # raise ValidationError('method值不對') # return method # 單個參數校驗@2 # def clean_title(self): # title = self.cleaned_data.get('title') # if models.Case.objects.filter(title=title).count()>0: # raise ValidationError('標題重復') # return title def clean(self):#多個參數組合校驗 method = self.cleaned_data.get('method') title = self.cleaned_data.get('title') if method not in (0,1,2,3) or models.Case.objects.filter(title=title).count()>0: raise ValidationError('參數錯誤12313123213')#拋出異常 return self.cleaned_data class CaseView(View): #增加數據 def post(self,request): form = CaseForm(request.POST)#通過post方法拿到請求的數據 #開始驗證 form.is_valid() 返回一個bool類型的數據 通過返回True 不通過返回False if form.is_valid(): #如果校驗通過會返回一個字典{'title':xxx,'desc':xxx,'method':xx,'url':xx,'params':xx} print(form.cleaned_data) models.Case.objects.create(**form.cleaned_data)#字典前面加**轉換為title=xxx,desc=xxxx data = {'code': 0, 'msg': '成功'} else: #form.errors.as_data() 是form自帶的友好提示 data = {'code': -1, 'msg': str(form.errors.as_data())} return JsonResponse(data) #查找數據 def get(self,request): case_sets = models.Case.objects.filter(is_delete=False) # 查詢所有集合 data = [] # 把查詢出來的轉換成字典通過model_to_dict方法,並添加進data列表中,最終返回[{'xx':xx},{'xx':xx}] for c in case_sets: d = model_to_dict(c) data.append(d) response = {'code': 0, 'msg': '成功', 'data': data} return JsonResponse(response, json_dumps_params={'ensure_ascii': False}) #刪除數據 def delete(self,request): id = request.GET.get('id') models.Case.objects.filter(id=id).update(is_delete=True) response = {'code': 0, 'msg': '成功'} return JsonResponse(response, json_dumps_params={'ensure_ascii': False})
實現原理