首页 > 其他分享 >【DRF-10】rest-framework之序列化(数据校验)

【DRF-10】rest-framework之序列化(数据校验)

时间:2024-06-03 21:56:13浏览次数:17  
标签:__ 10 ser title self rest start 序列化 def

  • 1.自定义
class TitleValidator(object):
    def __init__(self,start):
        self.start = start

    def __call__(self, value):
        if not value.startswith(self.start):
            message = '标题必须以 %s 为开头。' % self.start
            raise serializers.ValidationError(message)

    def set_context(self, serializer_field):
        """
        This hook is called by the serializer instance,
        prior to the validation call being made.
        """
        # 执行验证之前调用,serializer_fields是当前字段对象
        pass

class UserGroupSerializer(serializers.Serializer):
    title = serializers.CharField(error_messages={'required':'组名不能为空'},validators=[TitleValidator('test'),])

class UserGroupView(APIView):
    def post(self,request,*args,**kwargs):
        ser = UserGroupSerializer(data=request.data)
        if ser.is_valid():
            print(ser.validated_data['title'])
            return HttpResponse("提交成功")
        else:
            print(ser.errors)   # {'title': [ErrorDetail(string='标题必须以 test 为开头。', code='invalid')]}
            return HttpResponse(ser.errors)
  • 2.基于ModelSerializer
class TitleValidator(object):
    def __init__(self,start):
        self.start = start

    def __call__(self, value):
        if not value.startswith(self.start):
            message = '标题必须以 %s 为开头。' % self.start
            raise serializers.ValidationError(message)

    def set_context(self, serializer_field):
        """
        This hook is called by the serializer instance,
        prior to the validation call being made.
        """
        # 执行验证之前调用,serializer_fields是当前字段对象
        pass

class UserGroupSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.UserGroup
        fields = '__all__'
        depth = 1
        extra_kwargs = {'title': {'validators': [TitleValidator('test'), ]}}


class UserGroupView(APIView):

    def post(self,request,*args,**kwargs):
        ser = UserGroupSerializer(data=request.data)
        if ser.is_valid():
            print(ser.validated_data['title'])
            return HttpResponse("提交成功")
        else:
            print(ser.errors)   # {'title': [ErrorDetail(string='标题必须以 test 为开头。', code='invalid')]}
            return HttpResponse(ser.errors)
  • 3.钩子函数
class UserGroupSerializer(serializers.Serializer):
    title = serializers.CharField()
    # 钩子函数,validate + “_” + 字段名称
    def validate_title(self,value):
        if not value.startswith("test"):
            message = '标题必须以 test 为开头'
            raise serializers.ValidationError(message)

class UserGroupView(APIView):

    def post(self,request,*args,**kwargs):
        ser = UserGroupSerializer(data=request.data)
        if ser.is_valid():
            print(ser.validated_data['title'])
            return HttpResponse("提交成功")
        else:
            print(ser.errors)   # {'title': [ErrorDetail(string='标题必须以 test 为开头。', code='invalid')]}
            return HttpResponse(ser.errors)

标签:__,10,ser,title,self,rest,start,序列化,def
From: https://www.cnblogs.com/xwltest/p/18229748

相关文章

  • 代码随想录算法训练营第二十三天 | 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索
    669.修剪二叉搜索树题目链接文章讲解视频讲解classSolution{public:TreeNode*trimBST(TreeNode*root,intlow,inthigh){if(root==nullptr)returnnullptr;//当前值小于左边界时,当前节点的左子树全部小于左边界,所以全部删除,直接处理右子树......
  • 【DRF-09】rest-framework之序列化(序列化)
    1.序列化用于对用户请求数据进行验证和数据进行序列化,本篇文章主要讲解序列化部分。1.1:序列化的意义:web有两种应用模式,一种是前后端不分离,一种是前后端分离,当前后端分离的时候,后端只需要向前端传输数据即可,不需要进行其他的操作,而restframework在前后端传输数据时,主要是jso......
  • ABC 310 E NAND repeatedly
    题意太懒了,直接给链接吧,题意挺好懂的。https://atcoder.jp/contests/abc310/tasks/abc310_e思路NAND运算,根据题意,我们可以总结出以下两点:当前结果如果遇到1,那么结果反转(0->1,1->0)当前结果如果遇到0,那么结果赋值为1我们手模一下这个样例1:00110(初始)01011(i==1)×0101(i==......
  • 项目管理网站哪个好?分享10个主流项目管理网站
    本文将分享10款项目管理网站:PingCode、Worktile、Wrike、Asana、Monday.com、AdobeWorkfront、Smartsheet、Jira、ClickUp、MicrosoftProject。一个好的项目管理工具不仅可以帮助团队保持组织性,还能提高协作效率,确保项目按时按预算完成。但市场上的项目管理网站众多,选择哪一......
  • 【抽庆余年第二季周边】超10万份会员+周边好礼!先到先得!
    《庆余年》第二季周边抽奖活动,好礼送不停!超过10万份会员和周边礼品等你来拿,先到先得,不容错过!《庆余年》是一部备受欢迎的电视剧,深受观众喜爱。为了让粉丝们更好地享受这部剧带来的乐趣,我们特别推出了一场盛大的抽奖活动,准备了超过10万份会员和周边礼品,等待着您的参与。......
  • Python从0到100(三十):requests模块的其他方法
    1requests中cookirJar的处理方法使用request获取的resposne对象,具有cookies属性,能够获取对方服务器设置在本地的cookie,但是如何使用这些cookie呢?1.1方法介绍response.cookies是CookieJar类型使用requests.utils.dict_from_cookiejar,能够实现把cookiejar对象转化为字典......
  • Exercise 10
    Exercise10Exercise10VRhasthis1uniqueabilitytoreallytakeyouthereandthat'ssortofsomethingI'vebeentryingtodointraditionalstillimagesand2documentaryfilm.虚拟现实(VR)有能让你真正身临其境的独特能力我一直试图在传统的静态影像和纪录片......
  • OWASP API Security Top 10解读
    数字经济时代,无论是互联网商业创新还是传统企业数字化转型,都在推动API数量与应用范围的爆发式增长。从只用于企业内部服务调用的1.0时代,到面向服务架构的2.0时代,再到如今成为开放平台和云原生微服务的3.0时代,API正在成为数字世界的基础设施,在企业的业务体系中发挥着越来越重要......
  • P10550 [THUPC2024] 贸易 题解
    正式场上拿了这题的首\(A\),让队伍不至于无奖而返。思路容易发现题目的买入卖出过程形似一个括号匹配。那么我们可以对每一种类型的物品做括号匹配。若是一个匹配的括号在询问区间内则可以记入答案。就变成了一个二维数点问题。离线树状树组即可。Code#include<bits/stdc......
  • fastjson反序列化漏洞
    一题Think_java大多数师傅都是用的自己构造的java反序列化来做的。正好当时用fastjson写出来了。近些天也在挖洞,对于很多json传输的数据也会尝试一下fastjson的payload。那就正好一起来看当时如何利用fastjson的,应该是个非预期吧,其实这个虽然说是ctf题目,但环境属实和实战没......