django rest framework 解析器组件 接口设计,视图组件 (1)
一.解析器组件
-解析器组件是用来解析用户请求数据的(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)的更多相关文章
- django rest framework 解析器组件 接口设计,视图组件 (2)
1. 使用视图组件进行接口优化 1.1 使用视图组件的mixin进行接口逻辑优化 - 导入mixin from rest_framework.mixinx import ( ListModelMix, ...
- Django REST framework - 解析器和渲染器
目录 Django REST framework - 解析器和渲染器 解析器 Django中的数据解析 DRF中的解析器 渲染器 Django REST framework - 解析器和渲染器 解析器 ...
- 07 Django REST Framework 解析器与渲染器
01-解析器 REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求.还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型. 注意: 开发客户端应用程序时应该始终记 ...
- Django REST framework解析器和渲染器
解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...
- 3- vue django restful framework 打造生鲜超市 - model设计和资源导入
3- vue django restful framework 打造生鲜超市 - model设计和资源导入 使用Python3.6与Django2.0.2(Django-rest-framework) ...
- spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器)
spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器) 资源绑定视图解析器 + 内部资源(普通模式)视图解析器 并存方式 内部资源视图解析器: http:// ...
- admin源码解析以及仿照admin设计stark组件
---恢复内容开始--- admin源码解析 一 启动:每个APP下的apps.py文件中. 首先执行每个APP下的admin.py 文件. def autodiscover(): autodisco ...
- 序列化组件(get/put/delete接口设计),视图优化组件
一 . 知识点回顾 1 . 混入类 , 多继承 class Animal(object): def eat(self): print("Eat") def walk(self): ...
- rest framework 解析器,渲染器
解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 请求体相关字段: Accept:指定了接收的数据类型 Conte ...
随机推荐
- python读写、创建文件、文件夹等等
python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...
- DP问题(2) : hdu 1421
题目转自hdu 1421,题目传送门 题目大意: 给你n个物品,你要搬走2*k个(也就是搬k次) 每次搬需要花费v,v=(ai-aj)2 (i表示左手拿的物品重量,j表示右手拿的物品的重量) 要求所有 ...
- lombok 异常:Lombok needs a default constructor in the base class less... (Ctrl+F1) Inspe
这是 Lombok 旧版本的一个bug,之前用的版本是 1.16.22,然后抛出了这个异常,只需要进行版本升级即可,我升级到了当前最新版,如下所示: <!-- https://mvnreposi ...
- CUDA编程学习笔记1
CUDA编程模型是一个异构模型,需要CPU和GPU协同工作. host和device host和device是两个重要的概念 host指代CPU及其内存 device指代GPU及其内存 __globa ...
- Beta冲刺(5/7)——2019.5.27
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...
- microbit之mpython的API
附录:常用API函数汇总 一.显示 display.scroll("Hello, World!") 在micro:bit点阵上滚动显示Hello, World!,其中Hello, ...
- 信安周报-第04周:系统函数与UDF
信安之路 第04周 前言 这周自主研究的任务如下: 附录解释: SQLi的时候应对各种限制,可以使用数据库自带的系统函数来进行一系列变换绕过验证 eg:字符串转换函数.截取字符串长度函数等 注入的时候 ...
- web api对接小程序基本签名认证
using BMOA.Application.System; using BMOA.Common; using BMOA.Web.Models; using Newtonsoft.Json; usin ...
- 解决Hangfire 导致服务器内存飙涨
最近因为项目需要调度作业服务,之前看张队推荐过一篇https://www.cnblogs.com/yudongdong/p/10942028.html 故直接拿过来实操,发现很好用,简单.方便 执行 ...
- Winform中实现ZedGraph不显示y=0这条刻度线
场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...