DRF框架的使用入门(二)序列化器/串行器
前文:推荐看官网
环境:版本(django1.11, python3.5),适用于前后端分离项目
先创建serializers.py定义序列化器
现在对应的模块APP创建serializers.py文件:选择一种来使用,推荐用ModelSerializer
用ModelSerializer创建序列化器
和Serializer的不同点,通常用于需要与Django模型定义紧密映射的序列化程序类:
- 它将根据模型自动为您生成一组字段。
- 它将自动为序列化程序生成验证器,例如UNIQUE_CONITY验证器。
- 它会做这两个方法的简单默认实现。.create()和.update().
from rest_framework import serializers
from goods.models import GoodsInfo
# 定义一些序列号程序
class GoodsInfoSerializer(serializers.ModelSerializer):
# 创建序列化器
class Meta:
# 定义元类
# model指明了当前的序列化器和哪个模型产生联系
model = GoodsInfo
fields = '__all__' # 意思是所有的字段都要
# 这样写是自己选择需要的字段
# fields = ('url', 'username', 'email', 'groups')
用shell查看自动生成的内容:
>>> from goods.serializers import *
>>> ser = GoodsInfoSerializer()
>>> ser
GoodsInfoSerializer():
id = IntegerField(label='ID', read_only=True)
name = CharField(max_length=50)
pub_date = DateField(allow_null=True, label='商品发布时间', required=False)
is_delete = BooleanField(label='逻辑删除', required=False)
readcount = IntegerField(label='流量', max_value=2147483647, min_value=-2147483648, required=False)
price = CharField(max_length=10)
用基础类Serializer创建序列化器:
基础类,下文基本使用这个类来进行。
class GoodsInfoNewSerializer(serializers.Serializer):
# 基础序列化器需要填id,可以设置备注和只读属性
id = serializers.IntegerField(label='主键', read_only=True)
name = serializers.CharField(max_length=50)
price = serializers.CharField(max_length=11)
# readonly和required只能设置一种
# 设置外键,required表示在反序列化中必须传递的值
# addkey = serializers.StringRelatedField(label='外键地址id', required=True)
# 这个是接收post请求
def create(self, validated_data):
return GoodsInfo.objects.create(**validated_data)
在views.py写入内容
from django.shortcuts import render
from django.http import HttpResponse
from rest_framework.viewsets import ModelViewSet
from goods.models import GoodsInfo
from goods.serializers import GoodsInfoSerializer
# Create your views here.
class GoodsInfoView(ModelViewSet):
# 先导包ModelViewSet和数据库Model和serializers下的类
# queryset是一个查询集,存储所有的数据库查询之后的数据,是一个属性不能修改名字
queryset = GoodsInfo.objects.all()
'''serializer_class用来指定再当前的视图立面进行序列化和反序列化时
使用的序列化器(也叫串行器)
'''
serializer_class = GoodsInfoSerializer
# 根据需要选择Serializer
# serializer_class = GoodsInfoNewSerializer
urls.py写路由逻辑
用的是rest_framework的方法:
from django.conf.urls import url
from goods.views import *
from rest_framework.routers import DefaultRouter
# 定义视图处理的路由器
router = DefaultRouter()
# 在路由器中注册视图集
router.register('goods', GoodsInfoView, base_name='')
urlpatterns = [
# 要用RSF的定义路由方法
]
urlpatterns += router.urls
用shell来写调试数据库数据序列化查询
序列化与反序列化
序列化可以理解为:把python的对象编码转换为json格式的字符串,
反序列化可以理解为:把json格式字符串解码为python数据对象
用的官方文档的实例: