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类型序列化,但都可以将其转化成可以序列化的类型,再序列化. 功能需求都 ...
随机推荐
- 【LeetCode】886. Possible Bipartition 解题报告(Python)
[LeetCode]886. Possible Bipartition 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu ...
- B. The Meeting Place Cannot Be Changed
B. The Meeting Place Cannot Be Changed time limit per test 5 seconds memory limit per test 256 megab ...
- 看完这篇 Linux 权限后,通透了!
我们在使用 Linux 的过程中,或多或少都会遇到一些关于使用者和群组的问题,比如最常见的你想要在某个路径下执行某个指令,会经常出现这个错误提示 . permission denied 反正我大概率见 ...
- Linux下设置普通用户使用sudo命令
1.登录root用户 2.增加root用户对文件sudoers的写权限 chmod u+w /etc/sudoers 3.编辑sudoers,把用户mysql添加进去 vi /etc/sudoers ...
- APICloud超实用经验分享——平台功能
从2016年开始使用APICloud进行app项目开发,到现在也有五六年了.在此过程中伴随着APICloud一起成长,踩过一些坑,自己的技术也提升不少.在APICloud 推出avm框架一年之后,ID ...
- python 使用hashlib进行md5加密
使用场景,某个接口或某个场景的数据需要做md5处理,就可以通过hashlib模块进行md5加密,如一个接口,需要传入md5加密后的数据 导入模块 import hashlib def exchange ...
- js 使用 substr 和substring 的区别记录
根据 提示,已经很清楚区别了 区别都是第二个参数 ,substr 是长度 ,而substring 仍是索引数
- Allwinner F1C100s coremark测试
ccu register base:0x01c20000 devmem 0x01c20000 The PLL output=(24MHz*N*K)/(M*P) N=31 K=1 M=1 P=/1 re ...
- Anaconda3+CUDA10.1+CUDNN7.6+TensorFlow2.6安装(Ubuntu16)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 机器学习术语表——Beta
机器学习术语表 Beta 提示:你可以通过中文名称拼音首字母快速检索. C 超参数|Hyperparameter 在机器学习中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据.通 ...