表结构:

class Article(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=64)
create_time = models.DateField(auto_now=True)
type = models.SmallIntegerField(
choices=((1, '原创'), (2, '转载')),
default=1
)
source = models.ForeignKey(to='Source', on_delete=models.CASCADE)
tag = models.ManyToManyField(to='Tag') class Source(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32, unique=True, error_messages={"unique": '校区名称不能重复'}) class Tag(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32) class Comment(models.Model):
content = models.CharField(max_length=255)
article = models.ForeignKey(to='Article', on_delete=models.CASCADE)

单表的GET和POST:

路由:

url(r'source/', views.SourceView.as_view()),

序列化类:

class SourceSerializer(serializers.ModelSerializer):

    def validate_name(self, value):
if '草' in value:
raise ValidationError('不符合社会主义核心价值观')
return value class Meta:
model = models.Source
fields = "__all__"

视图:

class SourceView(APIView):

    def get(self, request, *args, **kwargs):
res = {"code": 0}
all_source = models.Source.objects.all()
ser_obj = SourceSerializer(all_source, many=True)
res["data"] = ser_obj.data
return Response(res) def post(self, request, *args, **kwargs):
res = {"code": 0}
ser_obj = SourceSerializer(data=request.data)
if ser_obj.is_valid():
# 数据没问题
ser_obj.save()
return Response(res)
else:
res["code"] = 1
res["error"] = ser_obj.errors
return Response(res)

外键的GET和POST:

路由:

url(r'comment/', views.Comment.as_view()),

序列化:

class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = models.Comment
fields = "__all__"
extra_kwargs = {
"content": {"error_messages": {"required": "评论内容不能为空"}},
"article": {"error_messages": {"required": "文章不能为空"}}
}

视图:

class Comment(APIView):
def get(self, request, *args, **kwargs):
res = {"code": 0}
all_data = models.Comment.objects.all()
ser_obj = CommentSerializer(all_data, many=True)
res["data"] = ser_obj.data
return Response(res) def post(self, request, *args, **kwargs):
res = {"code": 0}
ser_obj = CommentSerializer(data=request.data)
if ser_obj.is_valid():
ser_obj.save()
else:
res["code"] = 1
res["error"] = ser_obj.errors
return Response(res)

多对多的GET和POST:

路由:

url(r'article/', views.ArticleList.as_view()),

序列化:

class TagSerializer(serializers.ModelSerializer):

    class Meta:
model = models.Tag
fields = "__all__" class ArticleSerializer(serializers.ModelSerializer):
type = serializers.CharField(source="get_type_display")
tag = TagSerializer(many=True) class Meta:
model = models.Article
fields = ["id", "title", "type", "source", "tag"] class ArticleWriteSerializer(serializers.ModelSerializer): class Meta:
model = models.Article
fields = "__all__"
extra_kwargs = {
"tag": {
"error_messages": {
"does_not_exist": '"{pk_value}"对应的tag对象不存在。'
}
}
}

视图:

class ArticleList(APIView):
def get(self, request, *args, **kwargs):
res = {"code": 0}
article_list = models.Article.objects.all()
ser_obj = ArticleSerializer(article_list, many=True)
res["data"] = ser_obj.data
return Response(res) def post(self, request, *args, **kwargs):
res = {"code": 0}
ser_obj = ArticleWriteSerializer(data=request.data)
if ser_obj.is_valid():
ser_obj.save()
else:
res["code"] = 1
res["error"] = ser_obj.errors
return Response(res)

超链接的序列化:

路由:

urlpatterns = [
url(r'articlelinked/', views.ArticleLinked.as_view()),,
url(r'source/(?P<pk>\d+)', views.SourceDetailView.as_view(), name='source-detail'),
]

序列化:

class ArticleHyperlinkedSerializer(serializers.HyperlinkedModelSerializer):
source = serializers.HyperlinkedIdentityField(view_name='source-detail', lookup_field='source_id', lookup_url_kwarg='pk') class Meta:
model = models.Article
fields = ["id", "type", "title", "source"]
depth = 1

视图:

class ArticleLinked(APIView):
def get(self, request, *args, **kwargs):
res = {"code": 0}
article_list = models.Article.objects.all()
ser_obj = ArticleHyperlinkedSerializer(article_list, many=True, context={'request': request})
res["data"] = ser_obj.data
return Response(res)

Django REST framework基础:序列化的更多相关文章

  1. Django Rest framework 之 序列化

    RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...

  2. Django rest framework 基础

    01: Django rest framework 基础 ​ ​ 1.1 什么是RESTful 1. REST与技术无关,代表的是一种软件架构风格(REST是Representational Stat ...

  3. Django REST framework基础:视图和路由

    DRF中的Request 在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等. 比如,区别于Dj ...

  4. Django Rest framework基础使用之 serializer

    rest-framework文档地址:http://www.django-rest-framework.org/ Django Rest framework是一个非常强大且灵活的工具包,用于构建web ...

  5. Django REST Framework的序列化器是什么?

    # 转载请留言联系 用Django开发RESTful风格的API存在着很多重复的步骤.详细可见:https://www.cnblogs.com/chichung/p/9933861.html 过程往往 ...

  6. Django Rest framework基础使用之View:APIView, mixins, generic, viewsets

    先看一张图,对DRF的各个APIView,Mixin,Viewset等有个基本印象: 具体使用方法: 1.APIView: DRF 的API视图 有两种实现方式: 一种是基于函数的:@api_view ...

  7. Django Rest Framework(2)-----序列化详解(serializers)

    REST framework中的序列化类与Django的Form和ModelForm类非常相似.我们提供了一个Serializer类,它提供了一种强大的通用方法来控制响应的输出,以及一个ModelSe ...

  8. Django restful Framework 之序列化与反序列化

    1. 首先在已建好的工程目录下新建app命名为snippets,并将snippets app以及rest_framework app加到工程目录的 INSTALLED_APPS 中去,具体如下: IN ...

  9. Django rest framework之序列化小结

       最近在DRF的序列化上踩过了不少坑,特此结合官方文档记录下,方便日后查阅. [01]前言    serializers是什么?官网是这样的”Serializers allow complex d ...

随机推荐

  1. Python接口自动化

    1.unittest单元测试框架&接口介绍 2.接口测试框架设计 3.接口的安全机制 4.Mock服务介绍&实现原理 5.Jenkins使用和配置 6 .发送邮箱设置

  2. 知其所以然~redis的原子性

    原子性 原子性是数据库的事务中的特性.在数据库事务的情景下,原子性指的是:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节. 对于Redis而言,命 ...

  3. 十一之买一台 vps搭建 玩玩

    直接上大家都熟悉的banwangong的网址买一台最便宜的机器,毕竟是试着玩么,买了一个月的,如果直接买还是冲年费的吧. 第一步,注册会员么,结果就出问题了,显示图片不符合标准 ,我就很纳闷,我填几个 ...

  4. JDBC设计理念浅析 JDBC简介(一)

    概念 JDBC是J2EE的标准规范之一,J2EE就是为了规范JAVA解决企业级应用开发制定的一系列规范,JDBC也不例外. JDBC是用于Java编程语言和数据库之间的数据库无关连接的标准Java A ...

  5. [十七]JavaIO之CharArrayReader 和 CharArrayWriter

    功能简介 CharArrayReader  和 CharArrayWriter, 字符数组作为数据源的字符读写  CharArrayReader  CharArrayWriter  只需要记住他们的根 ...

  6. [二]基础数据类型之Long详解

      Long   Long 基本数据类型long  的包装类 Long 类型的对象包含一个 long类型的字段     属性简介   值为  263-1 的常量,它表示 long 类型能够表示的最大值 ...

  7. js中如何在不影响既有事件监听的前提下新增监听器

    一. 需求澄清 比如某个按钮已经绑定了2-3个对Window对象的load事件的监听,现在需要添加一个新的对click事件的监听器,但在一定条件下才会同时触发原有的2-3个load监听器,否则只触发新 ...

  8. 浅谈Java虚拟机内存中的对象创建,内存布局,访问定位

    参考于 深入理解Java虚拟机 这里介绍HotSpot虚拟机(自带的虚拟机) 1.对象的创建 对于程序员来说,创建对象的方法: User user1 = new User(); User user2 ...

  9. 教你快速撸一个免费HTTPS证书

    摘要: 免费 HTTPS 证书,了解一下? HTTPS 已成为业界标准,这篇博客将教你申请Let's Encrypt的免费 HTTPS 证书. 本文的操作是在 Ubuntu 16.04 下进行,使用 ...

  10. Web前端 HTML知识总结

    HTML篇 一.HTML的概念 HTML:就是Hyper Text Markup Languaged的缩写,意思就是超文本标志语言 (超文本:功能比普通文本要强:标志语言:使用一组标签对内容进行描述的 ...