设为首页 收藏本站
查看: 2871|回复: 2

Django值drf序列化与反序列化浅层刨析

[复制链接]
累计签到:504 天
连续签到:1 天
发表于 2022-12-13 01:52:03 | 显示全部楼层 |阅读模式
# 2、 serializer序列化器如何使用
1、在ser.py文件中写一个类继承serializers.Serializer
2、在序列化类写想要的字段[根据需求写出所想要的字段]
3、导入到视图类中,要序列化器序列化得到一个对象,把要字段的序列化对象传到这里面序列化器对象中去
4、序列化.data 是一个字典还不是字符串,要传给前端就得使用JsonResponse传递,只是不会区分到底是谁来请求了,返回的都是统一的字符串格式了
5、用rest_frame的封装的Response返回,这样可以根据不同的user_agent返回不同的操作结果,比如postman请求返回的是字符传,浏览器请求返回一个可视化的界面
推荐使用rest_framework的,需要注意的是要在settings.py中注册一下 "rest_framework"

request和response 对比记忆
request.data 浏览器发来的POST请求
request.query_params 浏览器发来的GET请求
request._request 原生的Http的request的

# 3、序列化字段类型
有很多:很Django的ORM相对应,eg:CharField、IntegerField、DateField

# 4、序列化字段选项
如:max_length,min_length

# 5、鸭子类型回顾
[接口规范:]
子类只要有了父类的东西,那么父类的鸭子就不用了,利用ABC模块控制,子类必须写父类的东西,父类的东西就不要了

# 6、反序列具体用法
1 写一个序列化的类,继承Serializer
2 在类中写要反序列化的字段,想反序列化哪个字段,就在类中写哪个字段,字段的属性(max_lenth......)
   max_length 最大长度
    min_lenght 最小长度
    allow_blank    是否允许为空
    trim_whitespace    是否截断空白字符
    max_value  最小值
    min_value  最大值
3 在视图类中使用,导入--》实例化得到序列化类的对象,把要要修改的对象传入,修改的数据传入
   boo_ser=BookSerializer(book,request.data)
    boo_ser=BookSerializer(instance=book,data=request.data)
4 数据校验 if boo_ser.is_valid()
5 如果校验通过,就保存
   boo_ser.save()  # 注意不是book.save()
6 如果不通过,逻辑自己写

7 如果字段的校验规则不够,可以写钩子函数(局部和全局)
      # 局部钩子
       def validate_price(self, data):   # validate_字段名  接收一个参数
            #如果价格小于10,就校验不通过
            # print(type(data))
            # print(data)
            if float(data)>10:
                return data
            else:
                #校验失败,抛异常
                raise ValidationError('价格太低')
         # 全局钩子
           def validate(self, validate_data):   # 全局钩子
                print(validate_data)
                author=validate_data.get('author')
                publish=validate_data.get('publish')
                if author == publish:
                    raise ValidationError('作者名字跟出版社一样')
                else:
                    return validate_data
8 可以使用字段的author=serializers.CharField(validators=[check_author]) ,来校验
   -写一个函数
       def check_author(data):
            if data.startswith('sb'):
                raise ValidationError('作者名字不能以sb开头')
            else:
                return data
     -配置:validators=[check_author]

drf序列化与反序列化.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-1003345-1-1.html 上篇帖子: Django中APIView源码 下篇帖子: 初始Django序列化组件Serializer
累计签到:504 天
连续签到:1 天
 楼主| 发表于 2022-12-13 22:53:41 | 显示全部楼层
view视图逻辑
屏幕截图(1).png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表