只介绍序列化操作: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

 

django之djangorestframework序列化操作的更多相关文章

  1. Django(八)下:Model操作和Form操作、序列化操作

    二.Form操作 一般会创建forms.py文件,单独存放form模块. Form 专门做数据验证,而且非常强大.有以下两个插件: fields :验证(肯定会用的) widgets:生成HTML(有 ...

  2. django(6)model表语句操作、Form操作、序列化操作

    1.model建表操作之创建索引.元数据 # 单表操作,创建表 class User(models.Model): name = models.CharField(max_length=32) ema ...

  3. Python json.dumps 特殊数据类型的自定义序列化操作

    场景描述: Python标准库中的json模块,集成了将数据序列化处理的功能:在使用json.dumps()方法序列化数据时候,如果目标数据中存在datetime数据类型,执行操作时, 会抛出异常:T ...

  4. 【Django】Django model与数据库操作对应关系(转)

    Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manag ...

  5. Django 缓存、序列化、信号

    一,缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcac ...

  6. Day23-Model操作,Form操作和序列化操作

    参考源出处:http://blog.csdn.net/fgf00/article/details/54629502 1. 搭建环境请参考:http://www.cnblogs.com/momo8238 ...

  7. Django的DRF序列化方法

    安装rest_framework -- pip install djangorestframework -- 注册rest_framework序列化 -- Python--json -- 第一版 用v ...

  8. day23 Model 操作,Form 验证以及序列化操作

    Model 操作 1创建数据库表 定制表名:       普通索引:             创建两个普通索引,这样就会生成两个索引文件   联合索引:           为了只生成一个索引文件,才 ...

  9. Django REST Framework序列化器

    Django序列化和json模块的序列化 从数据库中取出数据后,虽然不能直接将queryset和model对象以及datetime类型序列化,但都可以将其转化成可以序列化的类型,再序列化. 功能需求都 ...

随机推荐

  1. 【LeetCode】268. Missing Number 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 求和 异或 日期 题目地址:https://leet ...

  2. Vue总结第六天:Vuex (全局变量管理~多个页面共享数据)

    Vue总结第六天:Vuex (全局变量管理~多个页面共享数据) 目录 一.Vuex (全局变量管理~~多个页面共享数据) ✿ 更详细的可以看官网:开始 | Vuex 1.什么是Vuex? 2.核心概念 ...

  3. isEmpty 和 isBlank

    <org.apache.commons.lang3.StringUtils> isEmpty系列 StringUtils.isEmpty() ========> StringUtil ...

  4. IMPROVING ADVERSARIAL ROBUSTNESS REQUIRES REVISITING MISCLASSIFIED EXAMPLES

    目录 概 主要内容 符号 MART Wang Y, Zou D, Yi J, et al. Improving Adversarial Robustness Requires Revisiting M ...

  5. uniCloud爬虫获取网页数据

    'use strict'; let request = require('request') let cheerio = require('cheerio'); //爬虫 let iconv = re ...

  6. CS5211替代CH7511B|DP转LVDS控制板|替代CH7511B设计电路方案

    CS5211性能和参数可以替代CH7511B,PS8622,PS8625,LT7211等方案,用于设计DP转LVDS转换器,DP转LVDS控制板,DP转LVDS转接板等产品设计. CS5211是一个e ...

  7. Java EE数据持久化框架笔记 • 【目录】

    章节 内容 实践练习 Java EE数据持久化框架作业目录(作业笔记) 第1章 Java EE数据持久化框架笔记 • [第1章 MyBatis入门] 第2章 Java EE数据持久化框架笔记 • [第 ...

  8. MySQL数据操作与查询笔记 • 【第7章 连接查询】

    全部章节   >>>> 本章目录 7.1 内连接查询 7.1.1 交叉连接(笛卡尔积) 7.1.2 内连接查询概要 7.1.3 内连接案例 7.1.4 自然连接 7.2 多表连 ...

  9. Struts2中通过Ajax传递json数据

    1.导入Struts2所需要的jar包 下载Struts2的jar包时,可以下载struts-2.5.13-min-lib.zip,然后放到项目的/WebContent/WEB-INF/lib路径下s ...

  10. [Azure DevOps] 管理测试计划、测试套件和测试用例

    我喜欢测试计划,它能让团队清楚测试进度,还能妥善分配测试人员,更重要的是它能保证测试质量和效率.Azure DevOps 里提供了 Test Plans 这个模块用于管理测试计划. 1. Azure ...