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 ...
随机推荐
- 10-string类的length()返回值一起的问题
c++ string类length()(size())函数返回值–无符号数 首先,先来发现问题 string s = ""; for(int i = 0; i < s.len ...
- jmeter 常见问题汇总
文件读取中文乱码: 读取CSV文件,出现中文乱码,纠正方式如下: txt文件乱码 在用到该变量的请求上加上UTF-8 post请求 返回“ Content type 'application/x-ww ...
- How to use jQuery countdown plugin
Install We provide two installation methods: Bower bower install jquery.countdown Manual Download th ...
- [BAT] xcopy拷贝远程服务器共享文件到本地
net use * /del /yes NET USE Y: \\10.86.17.243\d$ Autotest123 /user:MSDOMAIN1\doautotester set source ...
- Memocache
http://blog.csdn.net/zhoufoxcn/article/details/6282099 http://blog.csdn.net/dinglang_2009/article/de ...
- Hibernate中常见的异常处理
本文引自:http://www.blogjava.net/sy1214520/archive/2008/10/21/235667.html 本文总结Hibernate中常见的异常. 1. net.sf ...
- bootstrap中让图片自适应不同的分辨率的方法
boostrap中加上这个样式class="img-responsive"图片就可以自适应,手机端同样适用 详细介绍请查看全文:https://cnblogs.com/qianzf ...
- 2018.09.27 bzoj2510: 弱题(概率dp+循环矩阵优化)
传送门 简单概率dp. 显然每次转移的式子可以用一个矩阵表示出来: 这个是循环矩阵. 因此只用维护第一行快速幂一波就行了. 代码: #include<bits/stdc++.h> #def ...
- Scrapy学习篇(十三)之scrapy-splash
之前我们学习的内容都是抓取静态页面,每次请求,它的网页全部信息将会一次呈现出来. 但是,像比如一些购物网站,他们的商品信息都是js加载出来的,并且会有ajax异步加载.像这样的情况,直接使用scrap ...
- memmove、memcpy、strcpy、memset的实现
memmove.memcpy.strcpy.memset 原型为: void *memmove( void* dest, const void* src, size_t count ); char* ...