首页 > 其他分享 >序列化器的简单使用

序列化器的简单使用

时间:2022-10-24 17:11:44浏览次数:60  
标签:serializers name 简单 sex django 使用 序列化 data

序列化器的简单使用

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 字典类型,自定义错误描述,可针对长度、大小、是否必填来设置,如{“required”:“XXX字段不能为空”}

标签:serializers,name,简单,sex,django,使用,序列化,data
From: https://www.cnblogs.com/minqiliang/p/16822102.html

相关文章

  • 使用SuperWebSocket 构建实时 Web 应用
    Web应用的信息交互过程通常是客户端通过浏览器发出一个请求,服务器端接收和审核完请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来,这种机制对于信息变化不......
  • CentOS 6 使用 yum 安装MongoDB及服务器端配置
    安装MongoDB的方法有很多种,可以源代码安装,在Centos也可以用yum源安装的方法。由于MongoDB更新得比较快,我比较喜欢用yum源安装的方法。64位Centos下的安装步骤如下:1、准备工......
  • DiffUtil工具类使用-让recyclerview使用更高效
    DiffUtil工具类使用-让recyclerview使用更高效问题背景安卓开发过程中,recyclerview是很常见的滑动列表视图组件,数据刷新的时候,我们经常就是直接调用了mAdapter.notifyData......
  • kubernetes 客户端KubeClient使用及常用api
    KubeClient是kubernetes的C#语言客户端简单易用,KubeClient是.NETCore(目标​​netstandard1.4​​​)的可扩展KubernetesAPI客户端,github地址:​​https://github.com/tin......
  • 使用Shell脚本进行语句循环
    使用Shell脚本进行语句循环......
  • 为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 web
    ​​2018.NET开发者调查报告:.NETCore是怎么样的状态​​,这里我们看到了还有非常多的.net开发人员还在观望,本文给大家一个建议。这仅代表我的个人意见,我有充分的理由......
  • 使用sed操作文件段落
    文件a.txt内容示例:xxxyyy##BEGINaaabbbccc##END将BEGIN到END之间的内容输出sed-n"/BEGIN/,/END/p"a.txt将BEGIN到END之间的内容删除sed-i"/BEGIN/,/END/d"a......
  • nexus 部署和使用
    1、部署Nexus官网下载地址https://www.sonatype.com/download-oss-sonatype需要JAVA1.8版本创建部署目录并解压mkdir/usr/local/nexustar-xvfnexus-3.25.1-04-un......
  • 在 Windows Phone上使用QQConnect OAuth2
    QQ互联OAuth2.0.NETSDK发布以及网站QQ登陆示例代码这篇文章讲述的普通的ASP.NET站点上使用QQ互联,本篇文章主要介绍在WindowsPhone环境使用QQ互联OAut......
  • 使用RestSharp 库消费Restful Service
    本文向你推荐一个开源的库RestSharp轻松消费RestfulService。RestSharp是一个开源的.NET平台下REST和HttpAPI的客户端库,支持的平台有.NET3.5/4、Mono......