Loading

序列化器的简单使用

序列化器的简单使用

3.1 新建app

django-admin startapp sers

3.2 注册app

INSTALLED_APPS = [
    # 'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    # 'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
    'app01',
    'sers',
    'rest_framework',
]

3.3 新建序列化器

sers/serializers.py:

from rest_framework import serializers

"""
serializers 是drf提供给开发者调用的序列化器模块
里面声明了所有可用序列化器的基类:
1.Serializer    序列化基类,drf中所有的序列化器类都必须继承于 Serialaizer
2.ModelSerializer 模型序列化器,是序列化器基类的子类,在工作中除了Serializer基类,最常用的序列化基类
"""


class Student1Serializer(serializers.Serializer):
    """学生信息序列化器"""

    # 1.转换的字段说明
    # 字段 = serializer.字段类型(选项=选项值)

    id = serializers.IntegerField()
    name = serializers.CharField()
    sex = serializers.CharField()
    age = serializers.IntegerField()
    info = serializers.CharField()

    # 2.如果当前序列化器继承的是Modelserializer,则需要声明需要调用的模型信息
    # class Meta:
    #     model = 模型名
    #     fields = ["数据库字段名1","数据库字段名2","数据库字段名3",....,"数据库字段名n",] 或 "__all__"

    # 3.验证代码的对象方法(钩子函数)
    # def validate(self, attrs):  # validate是固定的
    #     pass
    #     return attrs
    #
    # def validate_<字段名>(self,data): # 方法名必须以validate_<字段名>来命名
    #     psss
    #     return data

    # 4.模型操作方法

    # def create(self, validated_data): # 添加数据后,字典自动变为模型对象
    #     pass
    #
    # def update(self, instance, validated_data): # 更新数据后,字典自动变为模型对象
    #     pass

3.4 视图(序列化器的调用)

from django.views import View
from django.http import JsonResponse
from .serializers import Student1Serializer
from app.models import *


class StudentView(View):
    def get(self, request):
        """序列化器-序列化器的调用-序列化一个模型对象数据"""
        # 1.获取数据集
        queryset = studentsInfo.objects.first()

        # 2.实例化序列化器,得到序列化器对象
        serializer = Student1Serializer(instance=queryset)

        # 3.调用序列化器对象的data属性获取序列i化后的数据
        data = serializer.data

        # 4.响应数据
        return JsonResponse(data=data, status=200, safe=False, json_dumps_params={"ensure_ascii": False})
	
    # 这里的get2是无效的,只是起到注释掉的作用,如果要序列化多个的话改为get就行了,上面的get要改为别的名字
    def get2(self, request):
        """序列化器-序列化器的调用-序列化多个模型对象数据"""
        # 1.获取数据集
        queryset = studentsInfo.objects.all()

        # 2.实例化序列化器,得到序列化器对象,转换多个要使用many=True
        serializer = Student1Serializer(instance=queryset, many=True)

        # 3.调用序列化器对象的data属性获取序列i化后的数据
        data = serializer.data

        # 4.响应数据
        return JsonResponse(data=data, status=200, safe=False, json_dumps_params={"ensure_ascii": False})

3.5 路由

sers/urls.py:

from django.urls import path, re_path
from . import views

urlpatterns = [
    path('students/', views.StudentView.as_view()),
]

drfdemo1/urls.py:

from django.urls import path, include

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('api/',include('app.urls')),
    path('api/', include('app01.urls')),
    path('sers/', include('sers.urls')),

]

3.6 api接口测试

序列化一条数据

GET 127.0.0.1:8000/sers/students/

{
    "id": 1,
    "name": "小明",
    "sex": "男",
    "age": 22,
    "info": "这个人很懒,什么也没有留下"
}

序列化多条数据

GET 127.0.0.1:8000/sers/students/

[
    {
        "id": 1,
        "name": "小明",
        "sex": "男",
        "age": 22,
        "info": "这个人很懒,什么也没有留下"
    },
    {
        "id": 2,
        "name": "小红",
        "sex": "女",
        "age": 18,
        "info": "这个人很懒,什么也没有留下"
    },
    {
        "id": 3,
        "name": "张三",
        "sex": "男",
        "age": 25,
        "info": "这个人很懒,什么也没有留下"
    },
    {
        "id": 4,
        "name": "李四",
        "sex": "男",
        "age": 24,
        "info": "这个人很懒,什么也没有留下"
    },
    {
        "id": 5,
        "name": "闵麒良",
        "sex": "男",
        "age": 23,
        "info": "河工胡歌"
    },
    {
        "id": 12,
        "name": "孙明辉",
        "sex": "男",
        "age": 23,
        "info": "这个人很懒,什么都没有留下"
    }
]

3.7 序列化器常用字段类型

字段 描述
IntegerField 整型
CharField 字符型
FloatField 浮点型
BooleanField 布尔型
EmailField 邮箱类型
DecimalField 保留小数点型
ImageField 图片型
FileField 文件型
ChoiceField 多重选择型
DateField 日期型
TimeField 时间型
DateTimeField 日期时间型
PrimaryKeyRelatedField 外键关联型

3.8 字段参数

参数名称 说明
max_length 字符串最大长度
min_length 字符串最小长度
max_value 数字最大值
min_value 数字最小值
read_only 默认False,若设置为True,表明对应字段只在序列化操作中起作用
write_only 默认作用False,若设置为True,表明对应字段只在反序列化操作中起作用
required 默认True,表明对应字段在反序列化操作进行数据校验时必须传入
defalut 字段设置的默认值,设置的同时,required值自动变为False
label 字段的描述
error_messages 字典类型,自定义错误描述,可针对长度、大小、是否必填来设置,如
posted @ 2022-10-24 17:09  minqiliang  阅读(60)  评论(0编辑  收藏  举报
-->