DRF序列化

  Django ORM对象 --> JSON格式的数据  序列化

  JSON格式的数据 --> Django ORM数据  反序列化

  需要两个工具:

  1. from rest_framework.serializers import Serializer
  2. from rest_framework.serializers import MoselSerializer

  类比Django中的form组件

    Django form --> HTML表单

    HTML表单  --> ORM数据

  用法:

  many=True参数

  实例化 序列化器对象的时候, 添加many=True参数, 能实现序列化多个对象

  正向序列化用 read_only = True

  反向序列化用 write_ony = True

  source

  1. category = serializers.CharField(source="get_category_display" read_only=True)
  2.  
  3. # Obj --> JSON
  4. # Obj.title --> "书名"
  5. # Obj.get_category_display() --> "Python"

  ModelSerializer

    和model一对一绑定的序列化类

  serializerMethodField字段

校验

   校验的规则3中方法

  1. 局部的校验方法

  1. # 在serializer类中定义局部校验规则 # validate 加 字段名
  2. def validate_title(self, value):
  3. # value就是需要检验的这个字段的值
  4. """类似于Form组件的局部钩子"""
  5. if '红烧牛肉' in value:
  6. raise serializers.ValidationError('你是魔鬼吗?')
  7. else:
  8. return value

  2. 全局的校验方法

  1. def validate(self, attrs):
  2. pass

  3. 自定义的校验函数

  1. # 类似于Form组建中的自定义校验规则
  2. title = serializers.CharField(max_length=32, validators=[my_heiheihei, ])
  3.  
  4. def my_heiheihei(value)
  5. pass

  校验规则由序列化对象的 is_valid 触发

  1. def post(self, request):
  2. # 1. 获取前端提交的数据
  3. # 1.1 APIView
  4. # self.request是谁? 不是Django原来的哪个request self._request才是原来的request
  5. print(request.data) # APIView 包装的数据
  6. # 2. 对数据做有效性校验
  7. ser_obj = BookModelSerializer(data=request.data)
  8. if ser_obj.is_valid():
  9. ser_obj.save() # 调用的是BookSerializer类中的create方法,需要自己去实现
  10. # 3. 拿到序列化的数据去数据库创建新记录
  11. return Response("ok")
  12. else:
  13. # 返回校验失败的错误提示信息
  14. return Response(ser_obj.errors)

    

Django REST Framework 序列化和校验 知识点的更多相关文章

  1. Django REST Framework序列化器

    Django序列化和json模块的序列化 从数据库中取出数据后,虽然不能直接将queryset和model对象以及datetime类型序列化,但都可以将其转化成可以序列化的类型,再序列化. 功能需求都 ...

  2. [Django REST framework - 序列化组件、source、钩子函数]

    [Django REST framework - 序列化组件.source.钩子函数] 序列化器-Serializer 什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有f ...

  3. Django REST framework序列化

    一.简介 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官网:https://www.djang ...

  4. Django Rest framework序列化流程

    目录 一 什么是序列化 二 Django REST framework配置流程之Serializer 三 Django REST framework配置流程之ModelSerializer 一 什么是 ...

  5. 02 Django REST Framework 序列化

    01-创建序列化类 # 方式一: publish_list = models.Publish.objects.all() # 导入序列化组件 from django.core import seria ...

  6. python学习-- Django REST framework 序列化数据操作

    一.为什么要返回json数据? 一般来说前端要用到从后台返回的数据来渲染页面的时候,这时候后台就需要向前端返回json类型的数据,简单直观便于理解 ,就类似于 {"xxx":{[& ...

  7. django rest framework 序列化组件总结

    序列化组件总结 一. 序列化组件本质上为了实现前后端分离,而进行json序列化的一个组件形式,极大方便了解析数据的作用 二. 所有序列化是基于APIView 解析器实现的,通过内部的多继承关系方便实现 ...

  8. 在django restful framework中设置django model的property

    众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https ...

  9. django restful framework 一对多方向更新数据库

    目录 django restful framework 序列化 一 . 数据模型: models 二. 序列化: serializers 三, 视图: views 四, 路由: urls 五. 测试 ...

随机推荐

  1. 手机上怎么去掉a 标签中的img点击时的阴影?

    添加: <style type="text/css"> a { -webkit-tap-highlight-color: transparent; -webkit-to ...

  2. Hibernate的事务机制

    http://www.cnblogs.com/jerryxing/archive/2012/04/24/2468999.html http://www.cnblogs.com/xiaofeilee/p ...

  3. ndk,cygwin编译 .so动态库

    注意: ndk .cygwin 安装路径尽量要和sdk放到一个磁盘里,设置环境变量. 例如D: 根目录  变量名:ndk   值:/cygdrive/d/android-ndk-r8e 打开cygwi ...

  4. Qt QImage与OpenCV Mat转换

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51029382 应一个朋友的要求,整理总 ...

  5. C# 知识点集合

    1.一个Visual studio软件进程只能打开一个程序集,但是一个程序集可以加载多个项目,通过程序集的添加功能可以实现. 2.F11单步调试,F10跨程序调试(一般用不到) 3.VS如何快速的切换 ...

  6. 使用postman 测试restful接口

    前提: 在chrome网上应用商店安装postman 和 Postman Interceptor. 如下图: 使用postman的时候,最后开启postman Interceptor,如下图: 然后启 ...

  7. Unity3D - 图形性能优化:优化着色器载入时间

    Unity官方文档之"图形性能优化-优化着色器载入时间"的翻译,E文链接. Optimizing Shader Load Time 优化着色器载入时间 Shaders are sm ...

  8. js+ canvas 实现人物走动

    在网上看了一篇管道工玛利亚走动的图片,感觉人物走动的太生涩了,就写了一下代码改动一下: js 代码: //定义数组图片集合 var marios = new Array("image/QQ截 ...

  9. ClassNotFoundException和NoClassDefFoundError的差别

    正如它们的名字所说明的:NoClassDefFoundError是一个错误(Error),而ClassNOtFoundException是一个异常,在Java中错误和异常是有差别的,我们能够从异常中恢 ...

  10. 具体验证身份证号码规则和姓名(汉字)的java代码

    一.验证汉字的正則表達式  /** 是否是汉字的正则 */  private String regexIsHanZi = "[\\u4e00-\\u9fa5]+";   * @pa ...