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】05. 替换空格 解题报告 (Python & C++ & Java)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人微信公众号:负雪明烛 目录 题目描述 解题方法 方法一:新建可变长度的容器 方法二:原 ...
- 震撼,java面试题整合(良心制作)11万多字拿去。持续更新【可以收藏】
一.javaSE面试题整合 Java部分 JDK中哪些类是不能继承的?[信雅达面试题] [参考答案] 不能继承的是类是那些用final关键字修饰的类.一般比较基本的类型或防止扩展类无意间破坏原来方法的 ...
- 「算法笔记」Link-Cut Tree
一.简介 Link-Cut Tree (简称 LCT) 是一种用来维护动态森林连通性的数据结构,适用于动态树问题. 类比树剖,树剖是通过静态地把一棵树剖成若干条链然后用一种支持区间操作的数据结构维护, ...
- Exploring Architectural Ingredients of Adversarially Robust Deep Neural Networks
目录 概 主要内容 深度 宽度 代码 Huang H., Wang Y., Erfani S., Gu Q., Bailey J. and Ma X. Exploring architectural ...
- [决策树]西瓜数据graphviz可视化实现
[决策树]西瓜数据graphviz可视化实现 一.问题描述: 使用西瓜数据集构建决策树,并将构建的决策树进行可视化操作. 二.问题简析: 首先我们简单的介绍一下什么是决策树.决策树是广泛用于分类和回归 ...
- STM32零基础入门教程
本文主要是针对想了解STM32,手里又没有太多预算的小伙伴.市场上针对新手来说,比较合适的STM32开发版太贵,比如正点原子.树莓派等,便宜的教程又不详细,这对想白嫖的小伙伴来说不太有好,所以我选了一 ...
- DOTween实现缓动变值动效
DOTween.To(getter, setter, to, float duration) 是常用的一个变值方法(一定时间将某变量从起始值到终点值进行变化),可以便捷实现 滚分.涨进度条 等功能 但 ...
- spring controller获取web前端post数据乱码解决
web.xml文件加上如下代码<!-- post请求乱码拦截器 --><filter> <filter-name>CharacterEncodingFilter&l ...
- vue中computed的作用以及用法
在vue中computed是计算属性,主要作用是把数据存储到内存中,减少不必要的请求,还可以利用computed给子组件的data赋值. 参考地址:https://www.jianshu.com/p/ ...
- Jenkins Hackfest 用户体验文档报告
Jenkins 技术文档是我们项目的重要组成部分,因为它是正确使用 Jenkins 的关键.好的文档可以指导用户,并鼓励选择好的实现方式.这是用户体验的关键部分.在最近的 Jenkins UI/UX ...