之前学习了模型序列化和普通序列化,我们用最简单的视图和url实现了对序列化的操作。

  而实际上,象之前那种由DRF自动生成所有的视图和url的情况,在应用是使用很少。而需要用户根据实际业务需求,自定义视图和url。

  DRF提供了丰富的视图类,可以满足程序员的各种需求,基本上一个需求可以用多种视图来满足。

1 导入包

  找到Applications/Exampls/views下的Schools.py文件,先导入以下包:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from GeneralTools.CustomSchema import CustomSchema
from coreapi import Field
from coreschema import String 

  APIView根据浏览器url请求中是否带有ID参数分为两类。

2 url不带参请求

  url不带参请求:浏览器请求时url中不带参数,主要用于查询和新增,与之对应的是get和post方法

  不带参请求的类名格式为:模型名+List

  在Schools.py中增加一个类,SchoolListView,代码如下:

class SchoolListView(APIView):
schema = CustomSchema(
manual_fields={
'post': [
Field(name='name', required=True, location='form', schema=String(description='学校名称')),
Field(name='email', required=False, location='form', schema=String(description='学校邮箱')),
Field(name='phone', required=True, location='form', schema=String(description='学校座机')),
Field(name='employment_rate', required=True, location='form', schema=String(description='就业率')),
Field(name='teacher_quantity', required=True, location='form', schema=String(description='教师人数')),
Field(name='student_quantity', required=True, location='form', schema=String(description='学生人数')),
Field(name='sms_code', required=True, location='form', schema=String(description='验证码')),
]
}
) @classmethod
def get(cls, request):
"""
【功能描述】用于查询所有学校信息</br>
【返回参数】</br>
        1 name:学校名称</br>
        2 email:学校电子邮箱</br>
        3 phone:学校座机</br>
        4 employment_rate:就业率</br>
        5 teacher_quantity:教师人数</br>
        6 student_quantity:学生人数</br>
"""
schools = Schools.objects.all()
serializer = SchoolsSerializer(schools, many=True)
return Response(serializer.data) @classmethod
def post(cls, request):
"""
【功能描述】用于新增学校信息</br>
【返回参数】</br>
        1 成功返回201</br>
        2 失败返回出错信息</br>
"""
serializer = SchoolsSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)

  为视图SchoolListViews增加一个url:path('SchoolList/', SchoolListView.as_view()),并在测试文档中测试,如图:

3 url带参数请求

  带参数请求,主要是需要url中带上记录ID进行请求,主要用于查询指定记录(对应get方法),更改指定记录(对应put方法),删除指定记录(对应delete方法)

  带参数请求的类名为:模型名+DetailView

  在Schools.py中增加一个类,SchoolDetailView,代码如下:

class SchoolDetailView(APIView):
schema = CustomSchema(
manual_fields={
'put': [
Field(name='name', required=True, location='form', schema=String(description='学校名称')),
Field(name='email', required=False, location='form', schema=String(description='学校邮箱')),
Field(name='phone', required=True, location='form', schema=String(description='学校座机')),
Field(name='employment_rate', required=True, location='form', schema=String(description='就业率')),
Field(name='teacher_quantity', required=True, location='form', schema=String(description='教师人数')),
Field(name='student_quantity', required=True, location='form', schema=String(description='学生人数')),
Field(name='sms_code', required=True, location='form', schema=String(description='验证码')),
]
}
) @classmethod
def get(cls, request, pk):
"""
【功能描述】根据ID查询指定记录</br>
【返回参数】</br>
        1 name:学校名称</br>
        2 email:学校电子邮箱</br>
        3 phone:学校座机</br>
        4 employment_rate:就业率</br>
        5 teacher_quantity:教师人数</br>
        6 student_quantity:学生人数</br>
"""
try:
school = Schools.objects.get(pk=pk)
except Schools.DoesNotExist:
raise status.HTTP_404_NOT_FOUND
serializer = SchoolsSerializer(school)
return Response(serializer.data) @classmethod
def put(cls, request, pk):
"""
【功能描述】根据ID修改指定记录
【返回参数】</br>
        1 name:学校名称</br>
        2 email:学校电子邮箱</br>
        3 phone:学校座机</br>
        4 employment_rate:就业率</br>
        5 teacher_quantity:教师人数</br>
        6 student_quantity:学生人数</br>
"""
try:
school = Schools.objects.get(pk=pk)
except Schools.DoesNotExist:
raise status.HTTP_404_NOT_FOUND
serializer = SchoolsSerializer(school, data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data) @classmethod
def delete(cls, request, pk):
"""
【功能描述】根据ID删除指定学校
【返回参数】</br>
        1 成功返回204</br>
        2 失败返回出错信息</br>
"""
try:
school = Schools.objects.get(pk=pk)
except Schools.DoesNotExist:
raise status.HTTP_404_NOT_FOUND
school.delete()
return Response(status=status.HTTP_204_NO_CONTENT)

  为视图SchoolDetailView增加一个url:path('SchoolDetail/<int:pk>', SchoolDetailView.as_view()),并在测试文档中测试,如图:

0013 基于DRF框架开发(01 基类视图 APIView)的更多相关文章

  1. 0014 基于DRF框架开发(02 基类视图 GenericAPIView)

    前端于对数据操作的请求基本上就分为四类:增删改查,即增加.删除.修改.查询. 而DRF把前端请求分为两个大类:带ID参数请求和不带ID参数请求. 不带ID参数请求包括:增加.分布多条查询 带ID参数请 ...

  2. 0008 基于DRF框架开发(01 DRF开发的基本流程)

    1 创建模型 由于之前在<004 工程配置>中,已在Applications/Organizations/models中创建了一个UserInfo模型.此处引用这个模型. from dja ...

  3. 0009 基于DRF框架开发(02 创建模型)

    上一节介绍了DRF开发的基本流程,共五个步骤: 1 创建模型 2 创建序列化器 3 编写视图 4 配置URL 5 运行测试 本节主要讲解创建模型. 构建学校,教师,学生三个模型,这三个模型之间的关系是 ...

  4. 0010 基于DRF框架开发(03 模型序列化器)

    序列化器:是指从数据库提取数据,转化前端所需要的数据格式并返回到前端. 反序列化器:是指把前端传回的数据,转换成数据库需要的格式,存入数据库. DRF提供了两种序列化器: 模型序列化器:是指和模型关联 ...

  5. 0012 基于DRF框架开发(04 序列化器的字段与选项)

    1 常用字段类型 字段 构造方式 BooleanField BooleanField() NullBooleanField NullBooleanField() CharField CharField ...

  6. 0011 基于DRF框架开发(04 普通序列化器)

    普通序列化器和模型无关,只是对针对提交字段的定义. 本文定义三个序列化器: 教师序列化器,学生序列化器,教师学生序列化器.这三个序列化器都使用普通序列化器. 1 教师序列化器 在Application ...

  7. 基于SSH框架开发的《高校大学生选课系统》的质量属性的实现

    基于SSH框架开发的<高校大学生选课系统>的质量属性的实现 对于可用性采取的是错误预防战术,即阻止错误演变为故障:在本系统主要体现在以下两个方面:(1)对于学生登录模块,由于初次登陆,学生 ...

  8. MapReduce教程(一)基于MapReduce框架开发<转>

    1 MapReduce编程 1.1 MapReduce简介 MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算,用于解决海量数据的计算问题. MapReduce分成了两个部分: ...

  9. drf框架serializers中ModelSerializer类简化序列化和反序列化操作

    0905自我总结 drf框架serializers中ModelSerializer类 基于seriallizer类进行简化 https://www.cnblogs.com/pythonywy/p/11 ...

随机推荐

  1. Github 小白简单教学

    Git和Github简单教程   原文链接:Git和Github简单教程 网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在 ...

  2. C#开源组件DocX处理Word文档基本操作(一)

    C#中处理Word文档,是大部分程序猿绕不过的一道门.小公司或一般人员会选择使用开源组件.目前网络上出现的帖子,大部分是NPOI与DocX,其它的也有.不啰嗦了,将要使用DocX的基本方法贴出来,供参 ...

  3. 上周 GitHub 热点速览 vol.08:系统设计必看 The System Design Primer

    作者:HelloGitHub-小鱼干 摘要:GitHub Trending 上周看点,老项目依旧抢眼,系统设计必看 Repo:The System Design Primer 周获 1k+ star, ...

  4. 关于responseType的值

    http请求有个responseType, 用来设置返回值,默认是'',等同于text,数据格式的转换是浏览器处理的 我们还会用到json,buffer,blob json:是我们经常遇到后端返回的数 ...

  5. 第三篇 SpringBoot整合log4j2详解

    源代码:https://pan.baidu.com/s/1d1Lwv1gIvVNltIKVWeEseA 提取码:wff0 SpringBoot整合Log4j2步骤: 1.删除spring-boot-s ...

  6. 《自拍教程29》Sublime_小脚本编写首选

    Sublime Sublime 是一个轻量.简洁.高效.跨平台的编辑器, 最新的是Sublime Text 3. Sublime对Python支持非常好,如果只是简单的编写批处理脚本编写, 或者小范围 ...

  7. C#后台异步消息队列实现

    简介 基于生产者消费者模式,我们可以开发出线程安全的异步消息队列. 知识储备 什么是生产者消费者模式? 为了方便理解,我们暂时将它理解为垃圾的产生到结束的过程. 简单来说,多住户产生垃圾(生产者)将垃 ...

  8. Android中四种补间动画的使用示例(附代码下载)

    场景 Android中四种补间动画. 透明度渐变动画 旋转动画 缩放动画 平移动画 注: 博客: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程 ...

  9. R语言常用的矩阵操作

    R语言是一门非常方便的数据分析语言,它内置了许多处理矩阵的方法.下面列出一些常用的矩阵操作方法示例. 矩阵的生成 > mat <- matrix(:, ncol = , nrow = , ...

  10. springBoot 中 logback配置文件详解

    logback介绍和配置详解 logback是Java的开源框架,性能比log4j要好.是springboot自带的日志框架.该框架主要有3个模块: logback-core:核心代码块(不介绍) l ...