Django-rest-framework 接口实现 了解 GenericAPIView
进化写法GenericAPIView
面向对象的封装 将同样的 方法以及对象 封装到一起
将 对数据库相关的 功能封装到一起 GenericAPIView
在
from rest_framework.generics import GenericAPIView中实现了这个类# 继承APIView
class GenericView(APIView):
''' 继承这个类 重写 两个变量 queryset serializer_class ''' # 定义要查询的 model对象 queryset
queryset = None # 定义要使用的 序列化类
serializer_class = None # 定义方法 重新查询 类变量 因为类变量有缓存的问题 重新查询保证 是最新的数据
def get_queryset(self, *args, **kwargs):
return self.queryset.all() # 定义获取 queryobj 的 方法 在对单条信息操作时使用
def get_object(self, request, pk, *args, **kwargs):
return self.get_queryset(*args, **kwargs).filter(pk=pk).first()
增删改查查 对应的 关系
- 新增: post: create
- 删除: delete: destroy
- 修改: put: update
- 查所有: get: list
- 查一条: get: retrieve
注意:
- 如果直接使用的 话 将方法的 名字改为 对应的 小写的请求
# python mixin(混合类):不能单独使用,和其它类搭配起来使用(利用了Python支持多继承)
class ListMixin(object):
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
ser_obj = self.serializer_class(queryset, many=True)
return Response(ser_obj.data)
# 创建一条记录
class CreateMixin(object):
def create(self, request, *args, **kwargs):
ser_obj = self.serializer_class(data=request.data)
if ser_obj.is_valid():
ser_obj.save()
return Response("ok")
else:
return Response(ser_obj.errors)
# 获取具体某一条记录
class RetrieveMixin(object):
def retrieve(self, request, pk, *args, **kwargs):
obj = self.get_object(request, pk, *args, **kwargs)
if obj:
# 2. 将书籍对象 序列化成 json格式的数据
ser_obj = self.serializer_class(obj)
# 3. 返回响应
return Response(ser_obj.data)
else:
return Response("无效的id")
class UpdateMixin(object):
def update(self, request, pk, *args, **kwargs):
obj = self.get_object(request, pk, *args, **kwargs)
if obj:
ser_obj = self.serializer_class(instance=obj, data=request.data, partial=True) # form组件中也有类似的实现
if ser_obj.is_valid():
ser_obj.save()
return Response(ser_obj.data)
else:
return Response(ser_obj.errors)
else:
return Response("无效的id")
class DestroyMixin(object):
def destroy(self, request, pk, *args, **kwargs):
obj = self.get_object(request, pk, *args, **kwargs)
if obj:
obj.delete()
return Response("删除成功")
else:
return Response("无效的id")
重写的 定义 方法 因为将方法名改了 django 在dispatch 方法 反射请求的 时候找不到对应的 方法 Generic
# 重新定义一个 中间类 继承 需要的操作
class ListCreateView(GenericView, ListMixin, CreateMixin):
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
可以通过 更改类的继承来调用对应的 方法
视图中CBV 只需要重写两个类变量 并继承相应的类
- 此写法 要使用原始的 方法名 原生请求 -->
get /post/put/delete
# 作者
class AuthorListView(GenericView, ListMixin, CreateMixin):
queryset = models.Author.objects.all()
serializer_class = AuthorModelSerializer class AuthorDetailView(GenericView, RetrieveMixin, UpdateMixin, DestroyMixin):
queryset = models.Author.objects.all()
serializer_class = AuthorModelSerializer
- 此写法 要使用原始的 方法名 原生请求 -->
**rest_framework 中有已经定义好的 工具类 直接继承 本篇用于 了解 DRF **
Django-rest-framework 接口实现 了解 GenericAPIView的更多相关文章
- day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能
目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...
- [Django REST framework - 自动生成接口文档、分页]
[Django REST framework - 自动生成接口文档.分页] 自动生成接口文档 # 后端人员写好接口,编写接口文档,给前端人员看,前端人员依照接口文档开发 # 公司里主流 -后端,使用w ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- Django Rest framework 之 认证
django rest framework 官网 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest fra ...
- django rest framework restful 规范
内容回顾: . django请求生命周期 -> 执行遵循wsgi协议的模块(socket服务端) -> 中间件(路由匹配) -> 视图函数(业务处理:ORM.模板渲染) -> ...
- Django Rest framework 之 视图
RESTful 规范 django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) ...
- Django Rest Framework源码剖析(八)-----视图与路由
一.简介 django rest framework 给我们带来了很多组件,除了认证.权限.序列化...其中一个重要组件就是视图,一般视图是和路由配合使用,这种方式给我们提供了更灵活的使用方法,对于使 ...
- Django Rest FrameWork 全部API
Django Rest FrameWork .Requests 请求 客服端发送给服务器的请求 .Responses 响应 rest框架支持响应不同格式的内容 .Views 视图 base基础类视图 ...
- Django序列化&django REST framework
第一章.Django序列化操作 1.django的view实现商品列表页(基于View类) # 通过json来序列化,但手写字典key代码量较大,容易出错:还有遇到时间,图片序列化会报错 from g ...
- DRF框架(django rest framework)
1,DRF框架? Django REST framework 框架是一个用于构建Web API 的强大而又灵活的工具.通常简称为DRF框架 或 REST framework. Django REST ...
随机推荐
- vue elementUI enter 回车 (转载)
表单提交时需要处理输入框的回车事件 一.vue原生 原生input标签可以用@keyup.enter="onSubmit" 如:<input v-on:keyup.enter ...
- innodb mvcc实现机制
多版本并发控制 大部分的MySQL的存储 引擎,比如InnoDB,Falcon,以及PBXT并不是简简单单的使用行锁机制.它们都使用了行锁结合一种提高并发的技术,被称为MVCC(多版本并 发控制).M ...
- mybatis_03_ mapper代理方式实现MyBatis的Dao编写
不是用mapper代理方式也能够实现,但是不推荐 Mapper代理的开发方式,程序员只需要编写mapper接口(相当于dao接口)即可.Mybatis会自动的为mapper接口生成动态代理实现类. 不 ...
- WPF中在XAML中实现数据类型转换的两种方法
熟悉数据绑定的朋友都知道,当我们在Model中获取一个对象的数据,常常需要对其进行数据转换后显示在UI界面上,比如你用bool类型存储了一个人的性别,但是在界面上却需要经过转化后显示为男或女: 今天又 ...
- virtualbox中 Kali Linux安装增强功能
1. 将VBoxLinuxAdditions.run文件copy出来 2. 赋予执行权限 chmod +x VBoxLinuxAdditions.run 3. 安装 ./VBoxLinuxAdditi ...
- C#如何通过属性名称反射出属性本身
A a = new A(); Type t = typeof(A); var v1 = t.GetField("n").GetValue(a);//获取字段值,你的类A.n是字段, ...
- canvas-a10isPointPath.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JAVA 多线程(1):synchronized
入坑3年,对线程总是一知半解,最多停留在copy,决定还是仔细看看这方面的东西,一点点的记录让自己理解,对一些重要的概念进行记录和理解(包括参考作者的原话与个人理解) 参考链接:https://www ...
- elementUI 时间格式化(一般方法)
1.html: ... <el-table-column prop="updateTime" label="更新时间" width="160&q ...
- Ios12怎么投屏到电脑 苹果手机投屏电脑的方法
苹果手机是一款外观精致时尚的手机,吸引这许多用户争先恐后的购买,然后苹果手机的系统不同于我们传统使用的安卓系统,它采用的是苹果自主研发的IOS系统,有许多操作与安卓手机不同,那么苹果手机怎么用呢?下面 ...