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类型序列化,但都可以将其转化成可以序列化的类型,再序列化. 功能需求都 ...
随机推荐
- Rikka with wood sticks(hdu5203)
Rikka with wood sticks Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/O ...
- Nginx 简单配置反向代理
nginx 配置反向代理,转发请求到另一个域名 在server中加入 location /${alias} { proxy_buffer_size 128k; proxy_buffers 32 32k ...
- kafka2.x常用命令笔记(一)创建topic,查看topic列表、分区、副本详情,删除topic,测试topic发送与消费
接触kafka开发已经两年多,也看过关于kafka的一些书,但一直没有怎么对它做总结,借着最近正好在看<Apache Kafka实战>一书,同时自己又搭建了三台kafka服务器,正好可以做 ...
- Winform中使用HttpClient与后端api服务进行交互
前端js可以使用ajax.axios发出http请求 在c#中winform.控制台等可以通过WebRequest.WebClient.HttpClient 有关三个类的性能对比大家可以自己搜一下,这 ...
- 基于Spring MVC + Spring + MyBatis的【银行账户信息管理系统】
资源下载:https://download.csdn.net/download/weixin_44893902/45604661 练习点设计: 模糊查询.删除.新增.修改 一.语言和环境 实现语言:J ...
- docker学习:docker---centos安装
查看目标镜像 docker search centos 拉取镜像 docker pull centos 查看镜像 docker images 启动镜像 docker run -itd --privil ...
- docker容器的本质
1. 容器其实就是Linux下一个特殊的进程: 2. Docker容器通过namespace实现进程隔离通过cgroups实现资源限制: 3. Docker镜像(rootfs)是一个操作系统的所有文件 ...
- haproxy常用配置
haproxy 理论 它可以反向代理http/tcp协议,七层和四层的负载均衡解决方案 七层的负载解决方案是因为他们支持高级特性,工作在用户空间,请求从用户空间转换到内核空间是非常浪费硬件资源的. h ...
- 关于 vim 的插件 snipmate 以及它的安装方式(使用国内源)
snipmate 是一个类似代码补全的东西,更好的地方在于自定义补全的内容. 最新的 snipmate 是在 https://github.com/garbas/vim-snipmate 而不是在官网 ...
- 访问 远程 tomcat 的管理页面 /manager/html 提示 403 的具体解决操作
1.前言 我在阿里云服务器放了个tomcat ,启动后 ,访问 /manager/html提示403无权访问 原因是 tomcat默认仅仅允许本地的浏览器访问,有ip限制 需要将ip限制去除 顺便把账 ...