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
django之djangorestframework序列化操作的更多相关文章
- Django(八)下:Model操作和Form操作、序列化操作
二.Form操作 一般会创建forms.py文件,单独存放form模块. Form 专门做数据验证,而且非常强大.有以下两个插件: fields :验证(肯定会用的) widgets:生成HTML(有 ...
- django(6)model表语句操作、Form操作、序列化操作
1.model建表操作之创建索引.元数据 # 单表操作,创建表 class User(models.Model): name = models.CharField(max_length=32) ema ...
- Python json.dumps 特殊数据类型的自定义序列化操作
场景描述: Python标准库中的json模块,集成了将数据序列化处理的功能:在使用json.dumps()方法序列化数据时候,如果目标数据中存在datetime数据类型,执行操作时, 会抛出异常:T ...
- 【Django】Django model与数据库操作对应关系(转)
Django对数据库的操作分用到三个类:Manager.QuerySet.Model. Manager的主要功能定义表级方法(表级方法就是影响一条或多条记录的方法),我们可以以models.Manag ...
- Django 缓存、序列化、信号
一,缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcac ...
- Day23-Model操作,Form操作和序列化操作
参考源出处:http://blog.csdn.net/fgf00/article/details/54629502 1. 搭建环境请参考:http://www.cnblogs.com/momo8238 ...
- Django的DRF序列化方法
安装rest_framework -- pip install djangorestframework -- 注册rest_framework序列化 -- Python--json -- 第一版 用v ...
- day23 Model 操作,Form 验证以及序列化操作
Model 操作 1创建数据库表 定制表名: 普通索引: 创建两个普通索引,这样就会生成两个索引文件 联合索引: 为了只生成一个索引文件,才 ...
- Django REST Framework序列化器
Django序列化和json模块的序列化 从数据库中取出数据后,虽然不能直接将queryset和model对象以及datetime类型序列化,但都可以将其转化成可以序列化的类型,再序列化. 功能需求都 ...
随机推荐
- 【剑指Offer】矩阵覆盖 解题报告(Python)
[剑指Offer]矩阵覆盖 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描 ...
- 【LeetCode】151. Reverse Words in a String 翻转字符串里的单词(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.co ...
- Another kind of Fibonacci(hdu3306)
Another kind of Fibonacci Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- 3998 - Prime k-tuple
{p1,..., pk : p1 < p2 <...< pk} is called a prime k -tuple of distance s if p1, p2,..., pk ...
- Mysterious For(hdu4373)
Mysterious For Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- 【项目管理】《IT项目管理》Kathy Schwalbe 第2章 IT项目管理和IT背景
1.对项目管理采取系统的观点有何意义?如何在项目管理中采用系统的观点? 意义:有效处理复杂的环境 采用系统方法,系统分析,系统管理.2.解释组织的四个框架.他们是如何帮助项目经理理解项目的组织环境的? ...
- Estimation of Non-Normalized Statistical Models by Score Matching
目录 概 主要内容 方法 损失函数的转换 一个例子 Hyv"{a}rinen A. Estimation of Non-Normalized Statistical Models by Sc ...
- Java中的构造方法「注意事项」
构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是调用构造方法. 语法: public 类名称(参数类型 参数名称){ 方法体 } 注意事项: 构造方法的名称必须和所在的类 ...
- git中submodule子模块的添加、使用和删除
git中submodule子模块的添加.使用和删除 原文链接:https://blog.csdn.net/guotianqing/article/details/82391665背景项目中经常使用 ...
- Linux-saltstack-1 saltstack的安装与基本配置
@ 目录 一.环境介绍 二.安装saltstack 1.配置安装yum源 2.安装salt-master 3.安装slat-minion 三.配置salt-master 1.指定master的地址 2 ...