序列化器的简单使用

序列化器的简单使用

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 字典类型,自定义错误描述,可针对长度、大小、是否必填来设置,如

作者:minqiliang

出处:https://www.cnblogs.com/minqiliang/p/16822102.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   minqiliang  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
-->
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示