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 ...
随机推荐
- 20-java 对象链表空没空呢
写了一个 对象链表,往里面add了一些对象,最后我想看下链表是否为空,用 == null 为假,也看不出, 看下长度? 好吧, size() = 1: 打印 null , 那到底是不是空 啊, ...
- Fragment----静态创建碎片
import android.os.Bundle; import android.app.Activity; import android.app.Fragment; import android.a ...
- linux文件管理2
1.显示文件内容 cat : 显示文件内容 tac : 倒序显示内容 2.更改文件权限 chmod :更改文件权限 -R 递归改变 chown :更改文件拥有者 -R 递归改变 chgrp :更改文件 ...
- struts框架值栈问题二之值栈的内部结构
2. 问题二 : 值栈的内部结构 ? * 值栈由两部分组成 > root -- Struts把动作和相关对象压入 ObjectStack 中--List > context -- Stru ...
- Spring框架中Bean管理的常用注解
1. @Component:组件.(作用在类上)可以作用在任何一个类上 2. Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的) * @Controller -- 作用在W ...
- Spring框架的IOC核心功能快速入门
2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...
- [freeCodeCamp] solution to HTTP JSON API SERVER passed!
var http = require('http') var url = require('url') function parsetime (time) { return { hour: time. ...
- rsyncd.conf
rsyncd.conf 28 Jan 2018 rsyncd.conf(5) 28 Jan 2018 NAME rsyncd.conf - configuration file for rsync i ...
- [BAT]批处理自动修改区域和语言选项
open a cmd window and type reg query "HKCU\Control Panel\International" which will show yo ...
- Python 的stat 模块
#!/usr/bin/env python#-*- encoding:UTF-8 -*- import os,time,stat fileStats = os.stat ( 'test.txt' ) ...