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 ...
随机推荐
- 简析平衡树(四)——FHQ Treap
前言 好久没码过平衡树了! 这次在闪指导的指导下学会了\(FHQ\ Treap\),一方面是因为听说它可以可持久化,另一方面则是因为听说它是真的好写. 简介 \(FHQ\ Treap\),又称作非旋\ ...
- AtCoder Grand Contest 038 简要题解
从这里开始 比赛目录 Problem A 01 Matrix Code #include <bits/stdc++.h> using namespace std; typedef bool ...
- [转载]3.14 UiPath图片操作截图的介绍和使用
一.截图(Take Screenshot)的介绍 截取指定的UI元素屏幕截图的一种活动,输出量仅支持图像变量(image) 二.Take Screenshot在UiPath中的使用 1.打开设计器,在 ...
- 刷完欧拉计划中难度系数为5%的所有63道题,我学会了Rust中的哪些知识点?
我为什么学Rust? 2019年6月18日,Facebook发布了数字货币Libra的技术白皮书,我也第一时间体验了一下它的智能合约编程语言MOVE,发现这个MOVE是用Rust编写的,看来想准确理解 ...
- 用siege测试接口高并发
siege -c 255 -r 2555 "http://10.1.1.6:3001/decode POST <./api.json" -t 100s
- 源码分析-----ThreadPoolExecutor
创建一个线程池: import time from concurrent.futures import ProcessPoolExecutor, as_completed def get_html(n ...
- 【1】hexo+github搭建个人博客的过程记录
前提: 1.新建一个github仓库 2.安装配置Node.js 3.安装配置Git 前提 步骤1.新建一个github仓库 打开github网站,(注册)登录账号,新建一个仓库; 注:仓库名称要求, ...
- Spring Boot 静态页面跳转
本篇博客仅为自己提个醒:如何跳转页面而不麻烦控制器. 当我们创建 Spring Boot 项目时(勾选了 Thymeleaf 和 Web),目录结构会是如下: 其中图二是我创建了一个 h ...
- WPF精修篇 多数据触发器
原文:WPF精修篇 多数据触发器 有多属性触发器 就有多数据触发器 <Grid> <CheckBox x:Name="c1" Content="许可协议 ...
- Mac下Homebrew将程序文件存在什么位置
一般情况是这么操作的: 1.通过brew install安装应用最先是放在/usr/local/Cellar/目录下. 2.有些应用会自动创建软链接放在/usr/bin或者/usr/sbin,同时也会 ...