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 之 序列化的更多相关文章

  1. RestFramework之序列化组件

    一.restframework的序列化组件的使用 1.导入序列化组件与模型类 from rest_framework import serializers from app01.models impo ...

  2. python Django rest-framework 创建序列化工程步骤

    11创建项目 2创建应用 3stting添加应用(apps)-添加制定数据库-修改显示汉字(zh-hans)-上海时区(Asia/Shanghai) 4主路由添加子路由 5应用里创建子路由 6创建数据 ...

  3. S11 day 94 RestFramework 之 APIView视图

    VIEW视图(Django自带的) 1.  url url(r'login/$', views.login.as_view()), 2.点开 as_view() , as_view()为类方法.  l ...

  4. rest-framework之序列化组件

    一:django自带序列化组件 Django内置的serializers(把对象序列化成json字符串) from django.core import serializers def test(re ...

  5. django rest-framework 1.序列化 二

    在上一节说了Serializers的使用类似Django的From,在Django中有From也有ModelFrom,Serializers也是有个ModelSerializers,下面在讲讲rest ...

  6. django rest-framework 1.序列化 一

    上图为项目完整的目录结构 一.入门 需要先安装需要使用到包 pip install django pip install djangorestframework 先来创建一个新项目 django-ad ...

  7. Django的restframework的序列化组件之对单条数据的处理

    之前我们学习的都是处理书籍或者出版社的所有的数据的方法,下面我们来看下处理单个书籍,或者单个出版社的方法 这个时候我们就需要重新写一个类,这个类的方法,就需要有3个参数,参数1是self,参数2是re ...

  8. S11 day 95 RestFramework 之 视图

    1. 基于APIVIEW视图序列化   我们会发现两个类有好多重复的代码.所以我们引入了GenericAPIView (继承了APIView) 2.Generic ApiVIew和 ListModel ...

  9. Django:RestFramework之-------序列化器

    8.序列化 功能: 对请求数据进行验证 对Queryset进行序列化 8.1一个简单序列化: import json from api import models from rest_framewor ...

随机推荐

  1. Java动态代理机制详解(类加载,JDK 和CGLIB,Javassist,ASM)

    class文件简介及加载 Java编译器编译好Java文件之后,产生.class 文件在磁盘中.这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码.JVM虚拟机读取字节码文件,取出 ...

  2. oracle基本查询入门(二) 子查询

    一.子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table); 子查询在主查询之前 ...

  3. Golang实现一个密码生成器

    小地鼠防止有人偷他的果实,在家里上了一把锁.这个锁怎么来的呢?请往下看.. package main import ( "flag" "fmt" "m ...

  4. 16进制string转成int

    http://blog.csdn.net/wl1524520/article/details/25706521

  5. Plugin 'Scala' is incompatible with this.installation

    ==问题=== 手动安装IDEA的Scala插件,报这个错误. ===原因=== IDEA的版本与Scala插件的版本不兼容. ===解决=== 1.查看一下IDEA的版本 2.下载对应版本的Scal ...

  6. static 成员函数

    和静态数据成员一样,静态成员函数是所有对象共享的,不是单独属于某一个对象,由于静态成员函数没有传递this指针,故static member function 只能访问static成员,不能访问非st ...

  7. 2018.09.08 bzoj1531: [POI2005]Bank notes(二进制拆分优化背包)

    传送门 显然不能直接写多重背包. 这题可以用二进制拆分/单调队列优化(感觉二进制好写). 所谓二进制优化,就是把1~c[i]拆分成20,21,...2t,c[i]−2t+1+1" role= ...

  8. 2018.07.26NOIP模拟 魔法数字(数位dp)

    魔法数字 题目背景 ASDFZ-NOIP2016模拟 题目描述 在数论领域中,人们研究的基础莫过于数字的整除关系.一般情况下,我们说整除总在两个数字间进行,例如 a | b(a能整除b)表示 b 除以 ...

  9. Docker挂载宿主机目录

    一.普通方式直接挂载 1.查看已有容器 docker ps 2.进入容器并挂载 docker run -it -v /root/work/docker:/root/hzbtest tomcat:7.0 ...

  10. 201709011工作日记--Volley源码详解(三)

    1. RequestQueue类 我们使用 Volley 的时候创建一个 request 然后把它丢到 RequestQueue 中就可以了.那么来看 RequestQueue 的构造方法,含有四个参 ...