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 ...
随机推荐
- jquery源码学习-初始(1)
最近几天一直在研究jquery源码,由于水平太低看得昏头转向.本来理解的也不是很深刻,下面就用自己的想法来说下jquery是如何定义构造函数初始化的.如果有什么不对的地方,希望个位高手指出. 首先要了 ...
- Halcon的二维码解码步骤和解码技巧
一.二维码简介 1 . 类型多样,常见的有QR Code二维码. Data Matrix二维码等. 2.高密度编码,信息容量大. 3.容错能力强,具有纠错功能:二维码因穿孔.污损等引起局部损坏时,照样 ...
- asp.net core web 本地iis开发
发布后打开没有问题,直接配置到本地iis时,会提示如下错误 HTTP Error 502.5 - Process Failure
- Golang实现一个密码生成器
小地鼠防止有人偷他的果实,在家里上了一把锁.这个锁怎么来的呢?请往下看.. package main import ( "flag" "fmt" "m ...
- [SoapUI] 重载JSONComparator比对JSON Response,忽略小数点后几位,将科学计数法转换为普通数字进行比对,在错误信息中打印当前循环的case number及其他附加信息
重载JSONComparator比对JSON Response,忽略小数点后几位,将科学计数法转换为普通数字进行比对,在错误信息中打印当前循环的case number及其他附加信息 package d ...
- 构造函数constructor 与析构函数destructor(四)
拷贝构造函数:拷贝构造函数就是在用一个类对象来创建另外一个类对象时被调用的构造函数,如果我们没有显示的提供拷贝构造函数,编译器会隐式的提供一个默认拷贝构造函数. 拷贝构造函数的定义是X(const X ...
- 【Unity】2.1 初识Unity编辑器
分类:Unity.C#.VS2015 创建日期:2016-03-26 一.简介 本节要点:了解Unity编辑器的菜单和视图界面,以及最基本的操作,这是入门的最基础部分,必须掌握. 二.启动界面 双击桌 ...
- 控件无法安装的问题-Unable to execute file
官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/wordpaster/ 产品介绍:http://www.cnblogs.com ...
- nexus 参考文档
参考文档: http://books.sonatype.com/nexus-book/reference/index.html E:\e\nexus\nexus-2.12.0-01\conf\nexu ...
- OPCache使用示例
OPcache 有什么用? OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销. OPca ...