Django REST framework基础:序列化
时间:2019-11-18
本文章向大家介绍Django REST framework基础:序列化,主要包括Django REST framework基础:序列化使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
表结构
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
稍后补充。。。
原文地址:https://www.cnblogs.com/huay/p/11880306.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux下Mysql定时任务备份数据的实现办法
- PHP抽象类和接口用法实例详解
- php+lottery.js实现九宫格抽奖功能
- PHP实现一个按钮点击上传多个图片操作示例
- php实现 master-worker 守护多进程模式的实例代码
- Ubuntu 18.04 Server 设置静态IP 的办法
- PHP依赖注入容器知识点浅析
- centos克隆linux虚拟机的完整步骤分享
- laravel框架中间件简单使用方法示例
- PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
- Smarty模板语法详解
- PHP保留两位小数的几种方法
- PHP七种数据类型知识点总结
- PHP中__set()实例用法和基础讲解
- laravel框架分组控制器和分组路由实现方法示例