Django REST Framework 序列化和校验 知识点
DRF序列化
Django ORM对象 --> JSON格式的数据 序列化
JSON格式的数据 --> Django ORM数据 反序列化
需要两个工具:
from rest_framework.serializers import Serializer
from rest_framework.serializers import MoselSerializer
类比Django中的form组件
Django form --> HTML表单
HTML表单 --> ORM数据
用法:
many=True参数
实例化 序列化器对象的时候, 添加many=True参数, 能实现序列化多个对象
正向序列化用 read_only = True
反向序列化用 write_ony = True
source
category = serializers.CharField(source="get_category_display" read_only=True) # Obj --> JSON
# Obj.title --> "书名"
# Obj.get_category_display() --> "Python"
ModelSerializer
和model一对一绑定的序列化类
serializerMethodField字段



校验
校验的规则3中方法
1. 局部的校验方法
# 在serializer类中定义局部校验规则 # validate 加 字段名
def validate_title(self, value):
# value就是需要检验的这个字段的值
"""类似于Form组件的局部钩子"""
if '红烧牛肉' in value:
raise serializers.ValidationError('你是魔鬼吗?')
else:
return value
2. 全局的校验方法
def validate(self, attrs):
pass
3. 自定义的校验函数
# 类似于Form组建中的自定义校验规则
title = serializers.CharField(max_length=32, validators=[my_heiheihei, ]) def my_heiheihei(value)
pass
校验规则由序列化对象的 is_valid 触发
def post(self, request):
# 1. 获取前端提交的数据
# 1.1 APIView
# self.request是谁? 不是Django原来的哪个request self._request才是原来的request
print(request.data) # APIView 包装的数据
# 2. 对数据做有效性校验
ser_obj = BookModelSerializer(data=request.data)
if ser_obj.is_valid():
ser_obj.save() # 调用的是BookSerializer类中的create方法,需要自己去实现
# 3. 拿到序列化的数据去数据库创建新记录
return Response("ok")
else:
# 返回校验失败的错误提示信息
return Response(ser_obj.errors)
Django REST Framework 序列化和校验 知识点的更多相关文章
- Django REST Framework序列化器
Django序列化和json模块的序列化 从数据库中取出数据后,虽然不能直接将queryset和model对象以及datetime类型序列化,但都可以将其转化成可以序列化的类型,再序列化. 功能需求都 ...
- [Django REST framework - 序列化组件、source、钩子函数]
[Django REST framework - 序列化组件.source.钩子函数] 序列化器-Serializer 什么是rest_framework序列化? 在写前后端不分离的项目时: 我们有f ...
- Django REST framework序列化
一.简介 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官网:https://www.djang ...
- Django Rest framework序列化流程
目录 一 什么是序列化 二 Django REST framework配置流程之Serializer 三 Django REST framework配置流程之ModelSerializer 一 什么是 ...
- 02 Django REST Framework 序列化
01-创建序列化类 # 方式一: publish_list = models.Publish.objects.all() # 导入序列化组件 from django.core import seria ...
- python学习-- Django REST framework 序列化数据操作
一.为什么要返回json数据? 一般来说前端要用到从后台返回的数据来渲染页面的时候,这时候后台就需要向前端返回json类型的数据,简单直观便于理解 ,就类似于 {"xxx":{[& ...
- django rest framework 序列化组件总结
序列化组件总结 一. 序列化组件本质上为了实现前后端分离,而进行json序列化的一个组件形式,极大方便了解析数据的作用 二. 所有序列化是基于APIView 解析器实现的,通过内部的多继承关系方便实现 ...
- 在django restful framework中设置django model的property
众所周知,在django的model中,可以某些字段设置@property和setter deleter getter,这样就可以在存入数据的时候进行一些操作,具体原理请参见廖雪峰大神的博客https ...
- django restful framework 一对多方向更新数据库
目录 django restful framework 序列化 一 . 数据模型: models 二. 序列化: serializers 三, 视图: views 四, 路由: urls 五. 测试 ...
随机推荐
- Innodb性能优化之参数设置
现在,Innodb是Mysql最多使用的存储引擎.其性能一直广受关注.本文通过基本的参数设置来提高其性能. innodb_buffer_pool_size 缓冲池大小.这是innodb参数中最重要的设 ...
- 数据库-mongodb-mongod参数说明
Mongodb启动命令mongod参数说明 mongod的主要参数有: 基本配置 ----------------------------------------------------------- ...
- WinSCP介绍、安装、使用
前言 如果说XManager通过Xshell.Xftp可以很方便的进行远程管理,那么PuTTY显然不能满足我们的需求,所以这也是今天要介绍的另外一个工具-WinSCP. 简介 WinSCP是一个Win ...
- 【基础训练】HDOJ2032杨辉三角
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWEdzaWxlbmNl/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- BestCoder Round #75 King's Order dp:数位dp
King's Order Accepts: 381 Submissions: 1361 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 655 ...
- openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例
openssl之EVP系列之6---EVP_Encrypt系列函数编程架构及样例 ---依据openssl doc/crypto/EVP_EncryptInit.pod和doc/ssleay. ...
- hdu3966_树链剖分
近期在强化知识点深度.发现树链剖分不是非常会写了. 回想一下改动操作: 若两个点在同一条链上,则直接改动这段区间. 若不在同一条链上,改动深度较大的点到其链顶端的区间,同一时候将这个点变为他所在链顶端 ...
- 结束QQ即时通信垄断,开辟即时通信互联互通instantnet时代
结束QQ即时通信垄断,开辟即时通信互联互通instantnet时代 蓬勃发展的即时通信产业 即时通信(IM)是指可以即时发送和接收互联网消息等的业务. 即时通信.就是瞬间把信息发送给对方,假设不是即时 ...
- ios Button
展现效果例如以下: 功能说明: 1加入来图片背景, 2动态展现百度网页, 3动态加入button. 4展现提示框.展现你点击提示框得index 我成功来你也快来试试. 1 详细得项目创建与拖动but ...
- hdoj--3594--Cactus(tarjan)
Cactus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...