目录
1、准备工作
2、字段验证
3、validate_字段名验证
4、validate验证
5、validators验证器验证
6、小结
附:常用字段和参数
使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。
在获取反序列化的客户端数据前,必须在视图中调用序列化对象的is_valid()方法,序列化器内部是在is_valid方法内部调用验证选项和验证方法进行验证,验证成功返回True,否则返回False。
验证失败,可以通过序列化器对象的errors属性获取错误信息,返回字典,包含了字段和字段的错误提示。如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。
验证成功,可以通过序列化器对象的validated_data属性获取数据。
在定义序列化器时,指明每个字段的序列化类型和选项参数,本身就是一种验证行为。
1、准备工作
注册一个图书app及图书表模型
python manage.py startapp unsers
在配置文件setting.py
中注册子应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # 把drf框架注册到django项目中
'unsers', # 演示反序列化
]
注释csrf
校验,因为提交数据涉及到post
方法提交数据,把settings.py
中的中间件的csrf
暂时关闭
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
创建表模型
from django.db import models
# Create your models here.
class BookInfo(models.Model):
"""图书信息"""
title = models.CharField(max_length=20, verbose_name='标题')
pub_date = models.DateField(verbose_name='发布日期')
# 设置存储文件的子目录为avatar,总目录不写的话是在settings中配置,不填则没有
image = models.ImageField(upload_to="avatar", verbose_name='图书封面')
price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name="价格")
read = models.IntegerField(verbose_name='阅读量')
comment = models.IntegerField(verbose_name=