一.解析器组件

-解析器组件是用来解析用户请求数据的(application/json), content-type 将客户端发来的json数据进行解析

-必须适应APIView

-request.data触发

二.序列化组件

2.1.django 自带组件serializer

2.1.1 from django.serializers import serialize
2.1.2 origin_data = Book.objects.all()
2.1.3 serialized_data = serialize("json", origin_data) 2.2 DRF的序列化组件
-get接口设计 本质上是基于解释器进行json数据解析的组件 接口就是url 存储的唯一资源 使用: 2.2.1 from rest_framework import serializers
2.2.2 创建一个序列化类
class BookSerializer(serializers.Serializer): publish_name = serializers.CharField(read_only=True, source="publish.name")
authors_list = serializers.SerializerMethodField() def get_authors_list(self, book_obj):
pass
2.2.3 开始序列化
origin_data = Book.objects.all()
serialized_data = BookSerializer(origin_data, many=True) return Response(serialized_data.data)
- post接口设计
总结:
1. serializers.Serializer无法插入数据,只能自己实现create
2. 字段太多,不能自动序列化
- get单条数据接口设计
1. 定义url
2. 获取数据对象
3. 开始序列化:serialized_data = BookSerializer(book_obj, many=False)
4. 返回数据:serialized_data.data
- delete
- put
1. 定义url
2. 获取数据对象
2.1 book_obj = Book.objects.get(pk=1)
3. 开始序列化(验证数据,save())
2.2 verified_data = BookSerializer(instance=book_obj, many=False)
4. 验证成功写入数据库,验证失败返回错误
4.1 verified_data.is_valid()

     #re_path(r'books/$', views.BookView.as_view()),
#re_path(r'books/(?P<pk>\d+)/$', views.BookFilterView.as_view()),

urls

 '''
class BookSerializer(serializers.Serializer):
# 这里字段一定要与models的一致
title = serializers.CharField(max_length=32)
price = serializers.DecimalField(max_digits=5, decimal_places=2)
# 一对多 具体告诉返回什么而不是对象,这里返回的是一个出版社的城市
publish = serializers.CharField(max_length=32, source='publish.city')
# 多对多 需要手动查找
authors_list = serializers.SerializerMethodField()
# get_ + authors_list
def get_authors_list(self, book_obj):
author_list = list()
# book_obj 是每一个书籍对象,通过和关联字段找到所有名字 for author in book_obj.authors.all():
author_list.append(author.name)
# 最后通过get_ 返回
return author_list
# 自定义post
def create(self, book_obj):
book_obj["publish_id"] = book_obj.pop("publish")
book = Book.objects.create(**book_obj)
return book
# 这样发现这个在字段多的表是
'''

使用详情

 #
# class BookView(APIView):
# def get(self,request):
# course_data=Book.objects.all()
# book_data =BookSerializer(course_data,many=True)
#
# return Response(book_data.data)
# # 笨方法
# def post(self,request):
# verified_data = BookSerializer(data=request.data)
# print("verified_data",verified_data)
# if verified_data.is_valid():
# book =verified_data.save()
# print("request.data",request.data)
# authors = Author.objects.filter(nid__in=request.data['author_list'])
# print("authors",authors)
# book.authors.add(*authors)
# return Response(verified_data.data)
# class BookFilterView(APIView):
# def get(self,request,nid):
# book_obj = Book.objects.get(pk=nid)
# serialized_data=BookSerializer(book_obj,many=False)
# return Response(serialized_data.data)
#
# def put(self,request,nid):
# book_obj = Book.objects.get(pk=nid)
# verified_data = BookSerializer(data=request.data,instance=book_obj)
# if verified_data.is_valid():
# verified_data.save()
# return Response(verified_data.data)
# else:
# return Response(verified_data.errors)
#
# def delete(self,request,nid):
# book_obj = Book.objects.get(pk=nid).delete()
# return Response()

创建对象详情

但是发现,使用这种会十分累,于是进行优化

视图组件进行接口优化

django rest framework 解析器组件 接口设计,视图组件 (1)的更多相关文章

  1. django rest framework 解析器组件 接口设计,视图组件 (2)

    1. 使用视图组件进行接口优化 1.1 使用视图组件的mixin进行接口逻辑优化 - 导入mixin from rest_framework.mixinx import ( ListModelMix, ...

  2. Django REST framework - 解析器和渲染器

    目录 Django REST framework - 解析器和渲染器 解析器 Django中的数据解析 DRF中的解析器 渲染器 Django REST framework - 解析器和渲染器 解析器 ...

  3. 07 Django REST Framework 解析器与渲染器

    01-解析器 REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求.还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型. 注意: 开发客户端应用程序时应该始终记 ...

  4.  Django REST framework解析器和渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...

  5. 3- vue django restful framework 打造生鲜超市 - model设计和资源导入

    3- vue django restful framework 打造生鲜超市 - model设计和资源导入 使用Python3.6与Django2.0.2(Django-rest-framework) ...

  6. spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器)

    spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器) 资源绑定视图解析器 + 内部资源(普通模式)视图解析器 并存方式 内部资源视图解析器: http:// ...

  7. admin源码解析以及仿照admin设计stark组件

    ---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...

  8. 序列化组件(get/put/delete接口设计),视图优化组件

    一 . 知识点回顾 1 . 混入类 , 多继承 class Animal(object): def eat(self): print("Eat") def walk(self): ...

  9. rest framework 解析器,渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 请求体相关字段: Accept:指定了接收的数据类型 Conte ...

随机推荐

  1. BERT、ERNIE以及XLNet学习记录

    主要是对 BERT: Pre-training of Deep Bidirectional Transformers for Language Understandingtichu提出的BERT 清华 ...

  2. Nacos集成Spring Cloud Gateway 基础使用

    项目结构 项目 端口 描述 nacos-provider 8000 服务 nacos-getway 8001 网关 nacos-provider项目依赖 <dependencies> &l ...

  3. 小i机器人

    //机器人回复 function xiaoirobot($openid, $content) { //定义app $app_key = ""; $app_secret = &quo ...

  4. 万亿数据下Hadoop的核心竞争力

    1.前言 在大数据时代,Hadoop有着得天独厚的优势.然而,每个企业的技术储备和需求特点不同,他们希望从海量的客户数据中挖掘真正的商业价值,像Google.Facebook.Twitter等这样的企 ...

  5. 31,Leetcode下一个排列 - C++ 原地算法

    题目描述 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列. 如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列). 必须原地修改,只允许使用额外常 ...

  6. springboot 解决Jackson导致Long型数据精度丢失问题

    代码中注入一个bean即可: /** * 解决Jackson导致Long型数据精度丢失问题 * * @return */ @Bean("jackson2ObjectMapperBuilder ...

  7. Kubernetes Nacos

    一.概览 Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单 ...

  8. Key ssd_300_vgg/block3_box/L2Normalization/gamma not found in checkpoint的解决方案

    在Tensorflow下使用SSD模型训练自己的数据集时,经过查找很多博客资料,已经成功训练出来了自己的模型,但就是在测试自己模型效果的时候,出现了如下错误. 2019-10-27 14:47:12. ...

  9. JavaIO学习:缓冲流

    缓冲流 1.缓冲流涉及到的类 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter 2.作用 提升流的读取.写入 ...

  10. disconf的简单使用与远程配置更改为使用本地配置

    这几天因为阿里云迁移到腾讯云的原因,原来服务器上的disconf不再使用了.在这段时间里,系统出现的bug很难寻找原因(项目起不来),现在想要把disconf远程配置更改成直接使用本地配置.首先,了解 ...