S11 day 93 RestFramework 之 序列化
1. 表建模
from django.db import models # Create your models here. #文章表
class Article(models.Model):
title =models.CharField(max_length=)
create_time =models.DateTimeField(auto_now_add=True)#第一次保存时间的日期.
# update_time =models.DateTimeField(auto_now=True)#每次更新的时间
type =models.SmallIntegerField(
choices=((,"原创"),(,"转载")),
default =
) #文章的类型
#来源
school =models.ForeignKey(to="School",on_delete=models.CASCADE)#级联删除casecade
tag =models.ManyToManyField(to="Tag") #文章来源表
class School(models.Model):
name =models.CharField(max_length=) # 文章标签表
class Tag(models.Model):
name =models.CharField(max_length=) #评论
class Comment(models.Model):
content=models.CharField(max_length=)
article =models.ForeignKey(to='Article',on_delete=models.CASCADE)
2. Url路由
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views urlpatterns = [
# url(r"^api/",include(app01_url)) url(r'^admin/', admin.site.urls),
url(r'^article_list/', views.article_list),
第一版序列化
from django.shortcuts import render,HttpResponse
from app01 import models
# Create your views here. #第一版:
def article_list(request):
# 去数据库查询所有的文章数据
query_set=models.Article.objects.all().values("id","title")
#序列化成json格式
import json
data=json.dumps(list(query_set),ensure_ascii=False)
#返回.
return HttpResponse(data)
输出结果:

第二版序列化
# # 第二版
from django.http import JsonResponse
def article_list(request):
# 去数据库查询所有的文章数据
query_set=models.Article.objects.all().values("id","title","create_time","type")
print("query_set",query_set)
# JsonResponse序列化的时候如果不是字典要用safe关键字
return JsonResponse(list(query_set),safe=False,)
输出结果:
query_set <QuerySet [{'id': , 'title': 'python文章', 'create_time': datetime.datetime(, , , , , , , tzinfo=<UTC>), 'type': }, {'id': , 'title': 'go文章', 'create_time': datetime.datetime(, , , , , , , tzinfo=<UTC>), 'type': }]>
[/Aug/ ::] "GET /article_list/ HTTP/1.1"

第三版序列化
# # 第三版
from django.http import JsonResponse
from rest_framework import serializers class ArticleSerializer(serializers.Serializer):
id =serializers.IntegerField()
title =serializers.CharField()
create_time=serializers.DateTimeField()
type =serializers.CharField(source="get_type_display")
school =serializers.CharField(source="school.name") #传了个属性
tag =serializers.SerializerMethodField()
#当choice字段和和FK 字段都可以用source获取值 def get_tag(self,obj):
print("====>",obj.tag.all())
tag_list =[]
for i in obj.tag.all():
tag_list.append(i.name)
return tag_list
#
def article_list(request):
query_set=models.Article.objects.all()
xbg =ArticleSerializer(query_set,many=True)
print("===》",xbg.data)
return JsonResponse(xbg.data,safe=False,)
输出结果:
print到的结果: [01/Aug/2018 15:49:20] "GET /article_list/ HTTP/1.1" 200 368
====> <QuerySet [<Tag: Tag object>, <Tag: Tag object>]>
===》 [OrderedDict([('id', 1), ('title', 'python文章'), ('create_time', '2018-07-31T17:10:35.690427Z'), ('type', '原创'), ('school', '沙河校区'), ('tag', ['python tag', 'linux tag'])]), OrderedDict([('id', 2), ('title', 'go文章'), ('create_time', '2018-07-31T17:10:35.886304Z'), ('type', '原创'), ('school', '上海校区'), ('tag', ['python tag', 'linux tag'])])]



第四版序列化
# 第四版 modelSeralizer
class ArticleModelSerilizer(serializers.ModelSerializer):
type =serializers.CharField(source="get_type_display") #取到 ,或2里的值.
class Meta:
model =models.Article
fields="__all__"
depth = def article_list(request):
query_set=models.Article.objects.all()
xbg =ArticleModelSerilizer(query_set,many=True)
print("===》",xbg.data)
return JsonResponse(xbg.data,safe=False,)
输出结果:
[/Aug/ ::] "GET /article_list HTTP/1.1"
===》 [OrderedDict([('id', ), ('type', '原创'), ('title', 'python文章'), ('create_time', '2018-07-31T17:10:35.690427Z'), ('school', OrderedDict([('id', ), ('name', '沙河校区')])), ('tag', [OrderedDict([('id', ), ('name', 'python tag')]), OrderedDict([('id', ), ('name', 'linux tag')])])]), OrderedDict([('id', ), ('type', '原创'), ('title', 'go文章'), ('create_time', '2018-07-31T17:10:35.886304Z'), ('school', OrderedDict([('id', ), ('name', '上海校区')])), ('tag', [OrderedDict([('id', ), ('name', 'python tag')]), OrderedDict([('id', ), ('name', 'linux tag')])])])]
[/Aug/ ::] "GET /article_list/ HTTP/1.1"

S11 day 93 RestFramework 之 序列化的更多相关文章
- RestFramework之序列化组件
一.restframework的序列化组件的使用 1.导入序列化组件与模型类 from rest_framework import serializers from app01.models impo ...
- python Django rest-framework 创建序列化工程步骤
11创建项目 2创建应用 3stting添加应用(apps)-添加制定数据库-修改显示汉字(zh-hans)-上海时区(Asia/Shanghai) 4主路由添加子路由 5应用里创建子路由 6创建数据 ...
- S11 day 94 RestFramework 之 APIView视图
VIEW视图(Django自带的) 1. url url(r'login/$', views.login.as_view()), 2.点开 as_view() , as_view()为类方法. l ...
- rest-framework之序列化组件
一:django自带序列化组件 Django内置的serializers(把对象序列化成json字符串) from django.core import serializers def test(re ...
- django rest-framework 1.序列化 二
在上一节说了Serializers的使用类似Django的From,在Django中有From也有ModelFrom,Serializers也是有个ModelSerializers,下面在讲讲rest ...
- django rest-framework 1.序列化 一
上图为项目完整的目录结构 一.入门 需要先安装需要使用到包 pip install django pip install djangorestframework 先来创建一个新项目 django-ad ...
- Django的restframework的序列化组件之对单条数据的处理
之前我们学习的都是处理书籍或者出版社的所有的数据的方法,下面我们来看下处理单个书籍,或者单个出版社的方法 这个时候我们就需要重新写一个类,这个类的方法,就需要有3个参数,参数1是self,参数2是re ...
- S11 day 95 RestFramework 之 视图
1. 基于APIVIEW视图序列化 我们会发现两个类有好多重复的代码.所以我们引入了GenericAPIView (继承了APIView) 2.Generic ApiVIew和 ListModel ...
- Django:RestFramework之-------序列化器
8.序列化 功能: 对请求数据进行验证 对Queryset进行序列化 8.1一个简单序列化: import json from api import models from rest_framewor ...
随机推荐
- 通过html5 的EventSource来进行数据推送
以往我们要获取服务器的数据更新,一般通过ajax的定时请求,不过这样效率就低了.我们通过html5的EventSource可以很方便的获取服务器的数据更新,不过IE好像不支持. 例1如下: ind ...
- springMVC使用@RequestParam用于处理简单类型的绑定
使用@RequestParam常用于处理简单类型的绑定. value:参数名字,即入参的请求参数名字,如value=“item_id”表示请求的参数区中的名字为item_id的参数的值将传入: req ...
- Python打杂之路
1.任务要落到纸上好记性不如烂笔头,再好的记性也不如写到纸上明确无误,写到纸上就不用担心会漏掉哪项工作.平时,我们总是在忙着一项工作的同时还惦记着下一项工作,把工作都记下后,我们就可以专注于一项工作, ...
- maven 发布打包部署 命令
一.配置好jdk 二.下载安装maven http://maven.apache.org/download.cgi 三.添加环境变量 1. 添加 M2_HOME 和 MAVEN_HOME 环境变量到 ...
- wm_concat函数
wm_concat函数 wm_concat函数 一般分类 — 作者 zzy020128 @ 12:21 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以",& ...
- laravel中的old()函数
1.控制器 2.模板
- db2学习笔记
a.服务端安装 v11.1_win64_expc.zip 官网下载 b.客户端安装 Toad for DB2 Freeware 6.1 百度找找 .建数据库 create database HRA_G ...
- connect strings sql server
https://www.connectionstrings.com/sql-server/ Server=myServerAddress[,port];Database=myDataBase;User ...
- linux的零碎知识
一 nfs服务器 1 NFS的介绍:是Network File System的简写,是网络文件系统.用于分散式文件系统的协定,由sun公司开发的,在1984年向外公布的. 2 NFS的功能:是通 ...
- 37 The Benefits of Cutting Salt 减少盐分摄取量的益处
The Benefits of Cutting Salt 减少盐分摄取量的益处 ①Just when you had figured out how to manage fat in your die ...