rest_framework序列化组件校验
在views中
fromdjango.shortcutsimportrender#Createyourviewshere.fromrest_framework.viewsetsimportViewSetMixinfromrest_framework.viewsimportAPIViewfromrest_framework.responseimportResponsefromapp01importMyserfromapp01importmodelsfromapp01.myutils.MyresponseimportResponseoneclassBook(ViewSetMixin,APIView):defget_book(self,request,*args,**kwargs):ret=models.Book.objects.all()ser=Myser.BookSer(instance=ret,many=True)returnResponse(ser.data)defset_book(self,request,*args,**kwargs):myres=Responseone()print(request.data)ser=Myser.BookSer(data=request.data)ifser.is_valid():ser.save()myres.msg='创建成功'else:myres.status=400myres.msg=ser.errorsreturnResponse(myres.get_dic)defchange_book(self,request,pk,*args,**kwargs):print(pk)myres=Responseone()ret=models.Book.objects.all().filter(pk=pk).first()ser=Myser.BookSer(instance=ret,many=False,data=request.data)#传instance和data是进行修改ifret:ifser.is_valid():ser.save()myres.msg='修改成功'else:myres.status=401myres.msg=ser.errorsprint(ser.errors)print(Response(myres.get_dic))else:myres.msg='用户不存在'myres.status=403returnResponse(myres.get_dic)在路由中url(r'^book/(?P<pk>\d+)',views.Book.as_view({'get':'get_book','put':'change_book','post':'set_book'})),在校验类中校验的是前台传过来的数据fromrest_framework.exceptionsimportValidationErrorfromapp01importmodelsfromrest_frameworkimportserializersclassBookSer(serializers.ModelSerializer):classMeta:model=models.Bookfields='__all__'print(fields)name=serializers.CharField(max_length=4,min_length=2,required=True,error_messages={'max_length':'最长为4','min_length':'最短为2','required':'姓名必须填写'})#局部钩子:defvalidate_name(self,value):#print(value)ifvalue.startswith('sb'):#不能以sb开头raiseValidationError('不能以sb开头')else:returnvalue#全局钩子找到了defvalidate(self,value):#value是所有校验通过数据的字典print(value)name=value.get('name')price=value.get('price')ifnameandprice:ifstr(name)==str(price):returnvalueelse:raiseValidationError('名字跟价格不相等')returnvalue
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。