• django之djangorestframework序列化操作


    只介绍序列化操作:serializers.ModelSerializer 与 serializers.Serializer

    使用序列化的目的:将数据序列化成  JSON 对象

    当页面上需要动态加载内容,后端需要利用 json 的格式向前端返回数据, 这是如果model模型中存在外键关联,则只能讲关联的ID发送给前端,从而无法正确显示数据,这是就需要通过序列化操作来包装

    一、安装djangorestframework:

      1. 进入运行环境终端

      2. 输入:pip install djangorestframework

      3. 需要在 django 项目的 settings.py 文件中进行配置:

        INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
           # 配置 rest_framework
        'rest_framework',
        ]

    二、serializers.ModelSerializer 操作(推荐使用)

        models.py:创一个模型

    from django.db import models
    # 新闻类型 数据库模型
    class Newscategory(models.Model):
        newsname = models.CharField(max_length=100)
    # 新闻 数据库模型
    class News(models.Model):
        # 标题
        title = models.CharField(max_length=100,null=False)
        # 描述
        desc = models.CharField(max_length=200)
        # 缩略图地址
        thumbnailUrl = models.URLField()
        # 新闻内容
        newsContent = models.TextField()
        # 发布日期
        pub_time = models.DateTimeField(auto_now_add=True)
        # 新闻类型(外键关联模型:Newscategory)
        category = models.ForeignKey('Newscategory',on_delete=models.SET_NULL,null=True)

       serializers.py:创建一个序列化模块,并添加序列化类

    # 导入序列化操作模块:serializers
    from
    rest_framework import serializers from .models import News, Newscategory# 对 NewsCategory 模型进行序列化 class NewsCategorySerializer(serializers.ModelSerializer): class Meta: model = Newscategory fields = ('id', 'newsname') # 对 News 模型进行序列化 class NewsSerializer(serializers.ModelSerializer): # 指定字段 category 使用的序列化是 NewsCategorySerializer() # 因为在 News 模型中,字段 category 是一个外键,如果直接序列化,那么只会返回 category 的外键id # 序列化后,可以返回序列化后的数据,格式大致为:{'title':'xxx',category:{'id':1,'newsname':'xxxx'}} category = NewsCategorySerializer()class Meta: # 指定需要序列化的模型 model = News # 指定需要序列化的字段 fields = ('title', 'desc', 'thumbnailUrl', 'pub_time', 'category')

       views.py:创建一个视图函数(API),测试我们写的序列化操作是否正确

      # 导入序列化模块中的序列化类,如:from serializers import NewsSerializer
      from django.http import JsonResponse
      def serializersTest:   
        # 获取数据
        news = News.objects.order_by('-pub_time').all()
        # 将 news 对象进行序列化
      # 属性 many=True:设置是否将 news 所有字段序列化
         # 实例化序列化对象,如果不设置会抛出异常:Got AttributeError when attempting to get a value for field `title` on serializer `NewsSerializer`.
          news_serializer = NewsSerializer(news,many=True)
          # 获得序列化后的结果(json数据)
         data = news_serializer.data
        # 序列化后是一个JSON对象,将Json对象放回到前端   
    return JsonResponse(data=data)

    测试步骤:

        1. 将views.py中的serializersTest映射到urls.py中

        2. 在浏览器中直接对地址进行访问:会返回一串Json字符串(也可以使用接口测试工具进行测试:postman等)

    三. serializers.Serializers操作:

      与django中的表单操作类似,具体上百度查看相关文档,如csdn:https://blog.csdn.net/l_vip/article/details/79156113

     

  • 相关阅读:
    objective c 中基本类型的操作
    [转载]Server.MapPath和Request.MapPath()的用法
    [转载]mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法
    [转载]忘记token怎么加入k8s集群
    ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded; 的解决办法
    [转载]AutoMapper 9.0的改造
    [转载]k8s注册节点提示Docker SystemdCheck]: detected cgroupfs" as the Docker cgroup dr iver. The r ecommended dr fiver is" systemd"
    [转载]Linux的Vi命令详解
    [转载]查看虚拟机里的Centos7的IP
    [转载]centos关闭swap分区
  • 原文地址:https://www.cnblogs.com/jingxuan-li/p/9516785.html
Copyright © 2020-2023  润新知