一.解析器组件

-解析器组件是用来解析用户请求数据的(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. Shell脚本——显示系统上的登录用户数

    写一个脚本showlogged.sh,其用法格式为: showlogged.sh -v -c -h|--help 其中,-h选项只能单独使用,用于显示帮助信息:-c选项时,显示当前系统上登录的所有用户 ...

  2. 用java编写爬虫爬取电影

    一.爬取前提1)本地安装了mysql数据库2)安装了idea或者eclipse等开发工具 二.爬取内容 电影名称.电影简介.电影图片.电影下载链接 三.爬取逻辑1)进入电影网列表页, 针对列表的htm ...

  3. HTML ------- 对文本进行操作的元素

    1.HTML 标题(Heading) 在<h1>  -- <h6> 标签进行定义,<h1>定义最大标题,<h6>定义最小的标题 作用:标题会自动加粗,大 ...

  4. Git系列四之在本地服务器搭建gitlab仓库管理(centeros环境下)

    1.Git仓库管理 现在本地已经创建了git仓库,又在gitlab上创建了一个git仓库,并且让这两个仓库进行远程同步,这样gitlab仓库既可以备份也可以与他人协作管理远程仓库以及根据需要推送或拉取 ...

  5. 【题解】NOIP2015提高组 复赛

    [题解]NOIP2015提高组 复赛 传送门: 神奇的幻方 \([P2615]\) 信息传递 \([P2661]\) 斗地主 \([P2668]\) 跳石头 \([P2678]\) 子串 \([P26 ...

  6. Redis(六)管道(Pipelining)

    管道技术并不是Redis特有的,管道技术在计算机科学中有很多地方的应用. 来自wiki的解释: In computing, a pipeline, also known as a data pipel ...

  7. com.fasterxml.jackson.core.JsonGenerationException: Can not write a field name, expecting a value异常

    springboot对象返回,一直报生成json异常,经过检查,发现是自己在做xss防护时对出参进行了json的处理(copy代码不可取,囧) 异常信息 这里进行了出参处理了,但实际上只要对入参处理就 ...

  8. EF Code first主从表,删除更新从表

    以order和orderItem为例,从表orderItem里有主表的orderId 想通过order.orderitems.add()或者remove()方法直接更新从表的话,必须在从表建立联合主键 ...

  9. python 练习题:请利用循环依次对list中的每个名字打印出Hello, xxx!

    方法一: # -*- coding: utf-8 -*- # 请利用循环依次对list中的每个名字打印出Hello, xxx! L = ['Bart', 'Lisa', 'Adam'] n = 0 w ...

  10. 关于SQL server事务