接上编文章 创建app02
django-admin startapp app02
模型 models
from django.db import models
# Create your models here.
class Article(models.Model):
title = models.CharField(verbose_name='标题',max_length=100)
vum = models.IntegerField(verbose_name='浏览量')
content = models.TextField(verbose_name='内容')
数据库迁移
# 迁移数据库
python manage.py makemigrations
# 同步
python manage.py migrate
序列化
from rest_framework import serializers
from .models import Article
# 普通序列化
class ArticleSerializer(serializers.Serializer):
# 参数约束
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(max_length=100,required=True)
vum = serializers.IntegerField(required=True)
content = serializers.CharField()
def create(self, validated_data):
"""
根据已验证的数据,创建并返回一个新的' Snippet '实例。
"""
return Article.objects.create(**validated_data)
def update(self, instance, validated_data):
"""
根据已验证的数据,更新并返回一个现有的' Snippet '实例。
"""
instance.title = validated_data.get('title', instance.title)
instance.vum = validated_data.get('vum', instance.vum)
instance.content = validated_data.get('content', instance.content)
instance.save()
return instance
read_only: True表示不允许用户自己上传,只能用于api的输出。
write_only: 与read_on1y对应
required:顾名思义,就是这个字段是否必填。
allow_nu11/allow_blank:是否允许为NULL/空。
validators:自定义验证逻辑
error_messages: 出错时,信息提示。
name = serializers.CharField(required=True, min_1ength=6,
error_messages={
'min_1ength': '名字不能小于6个字符',
'required': '请写名字'})
终端 进入 Django shell。
python manage.py shell
利用反序列化生成模型对象
from app02.serializers import ArticleSerializer
d = {'title':"我是标题","vum":1231,"content":"我是内容"}
ser = ArticleSerializer(data=d)
ser.is_valid() #校验数据是否正确
ser.save() #保存数据
把模型序列化json数据
from app02.models import *
from rest_framework.renderers import JSONRenderer
arts = Article.objects.all()
ser = ArticleSerializer(instance=arts,many=True) # many=True 序列化多个对象
ser.data #查看序列化好的数据
json_data = JSONRenderer().render(ser.data) #把模型序列化json数据
json_data #就是我们序列化好的json数据
# 测试序列化一个
arts = Article.objects.get(id=1)
ser = ArticleSerializer(instance=arts)
ser.data #查看序列化好的数据
json_data = JSONRenderer().render(ser.data) #把模型序列化json数据
json_data #就是我们序列化好的json数据
总结
序列化
把模型数据转成可传输的数据叫序列化
反序列化
把可传输的数据转成模型数据叫反序列化
当序列化的时候如果是多个数据需要加many=True,单个对象不需要。
当我们序列化的时候,要用关键字instance,或者不用
ser = ArticleSerializer(instance=arts,many=True)
ser = ArticleSerializer(instance=arts)
当我们反序列化的时候要用data关键字
ser = ArticleSerializer(data=d)