学习DRF框架,首先我们就需要明白为什么要学习这个框架。

接下来我们就先用原生的Django框架来定义一个符合RESTful设计方法的接口(API)。

RESTful接口的需求如下:

GET     /books/         查询所有图书信息
POST /books/ 新增图书信息
GET /books/<pk>/ 查询指定id的图书信息
PUT /books/<pk>/ 修改指定id的图书信息
DELETE /books/<pk>/ 删除指定id的图书信息
响应数据 JSON

1. 定义查询所有图书信息的接口:

class BooksInfoView(View):
'''查询所有图书信息,新增图书信息'''
def get(self, request):
'''
查询所有图书信息
:return:JSON
''' # 查询所有图书模型:查询集
book_model_list = BookInfo.objects.all() # 构造JSON数据
book_list = []
for book in book_model_list:
book_dict = {
'id': book.id,
'btitle': book.btitle,
'bpub_date': book.bpub_date,
'bread': book.bread,
'bcomment': book.bcomment,
}
book_list.append(book_dict) # 响应JSON
# JsonResponse传递字典列表时,需要指定safe=False
return http.JsonResponse(book_list, safe=False)

2. 定义添加图书信息的接口:

因为,添加图书信息的路由和查询图书信息的路由一致,所以可以代码复用,直接在上一个视图中定义与请求方式同名的方法即可。

def post(self, request):
'''
新增图书信息
:return: JSON
'''
# 获取前端传递的数据
json_dict = json.loads(request.body.decode()) # 省略校验步骤 # 核心逻辑:将数据保存到数据库中
book = BookInfo.objects.create(
btitle = json_dict.get('btitle'),
bpub_date = json_dict.get('bpub_date'),
bread = json_dict.get('bread'),
bcomment = json_dict.get('bcomment')
) # 构造响应数据
book_dict = {
'id': book.id,
'btitle': book.btitle,
'bpub_date': book.bpub_date,
'bread': book.bread,
'bcomment': book.bcomment,
} # 响应JSON
# RESTful设计模式要求:增加后的数据需要返回给前端,并且响应status=201
return http.JsonResponse(book_dict, status=201)

这里要注意,RESTful设计方法中要求添加和修改后的数据必须返回给前端,并且响应状态码为201.

3. 定义查询指定id的图书信息接口:

class BookInfoView(View):
'''查询、修改、删除指定id的图书信息''' def get(self, request, pk):
'''
查询指定id的图书信息
:param pk: 指定的图书id
:return: JSON
'''
try:
# 查询图书信息
book = BookInfo.objects.get(id=pk)
except BookInfo.DoesNotExist:
return http.HttpResponseNotFound() # 构造JSON数据
book_dict = {
'id': book.id,
'btitle': book.btitle,
'bpub_date': book.bpub_date,
'bread': book.bread,
'bcomment': book.bcomment,
} # 响应JSON
return http.JsonResponse(book_dict)

因为,修改、删除指定id的图书信息,路由地址与查询指定id的图书信息一致,所以可以进行接口定义代码的复用。

def put(self, request, pk):
'''
修改指定id的图书信息
:param pk: 指定的图书id
:return: JSON
''' # 接受前端传递的数据
json_dict = json.loads(request.body.decode())
btitle = json_dict.get('btitle')
bpub_date = json_dict.get('bpub_date')
bread = json_dict.get('bread')
bcomment = json_dict.get('bcomment') # 省略校验 try:
# 查询图书信息
book = BookInfo.objects.get(id=pk)
except BookInfo.DoesNotExist:
return http.HttpResponseNotFound() # 核心逻辑:将新值覆盖旧值
book.btitle = btitle
book.bpub_date = bpub_date
book.bread = bread
book.bcomment = bcomment
book.save() # 构造JSON数据
book_dict = {
'id': book.id,
'btitle': book.btitle,
'bpub_date': book.bpub_date,
'bread': book.bread,
'bcomment': book.bcomment
} # 响应JSON
# 在RESTful设计风格中,要求返回后端修改后的数据,并响应status=201
return http.JsonResponse(book_dict, status=201) def delete(self, request, pk):
'''
删除指定id的图书信息
:param pk: 指定的图书id
:return: JSON
''' try:
# 查询图书信息
book = BookInfo.objects.get(id=pk)
except BookInfo.DoesNotExist:
return http.HttpResponseNotFound() # 核心逻辑:删除数据
book.delete() # 响应http:RESTful设计风格,要求删除数据响应http且status=204
return http.HttpResponse(status=204)

到此,我们就完成了使用原生的Django框架结合RESTful设计方法定义的接口(API)。

我们,可以发现我们进行了多次序列化与反序列化(获取JOSN数据、构造JSON数据)的代码的编写,造成了大量的代码冗余,极大地降低了我们开发的效率。

然而,DRF框架(Django REST framework)序列化与反序列化的操作进行了高度的封装,使用DRF框架可以极大提升我们日常的工作效率。

工作效率高了,老板高兴了,给你发奖了,你也高兴了。

这也就是我们为什么要学习DRF框架的原因。

DRF框架之使用Django框架完成后端接口(API)的定义的更多相关文章

  1. Vue学习笔记-Django REST framework3后端接口API学习

    一  使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7  (Windows x86- ...

  2. 自创Web框架之过度Django框架

    目录 自创Web框架之过度Django框架 软件开发架构 HTTP协议 Web框架之"撸起袖子加油干" Web框架之通过wsgiref加油干 封装优化处理 动静网页 jinjia2 ...

  3. python主流框架简介和Django框架的使用

    目录 一.手撸简易web框架 二.动静态网页 1. 静态网页 2. 动态网页 三.jinja2模板语法 1. jinja2的作用 四.python主流web框架 1. django 3. tornad ...

  4. python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上

    经历了两天的时候终于把本地使用python3 django开发的接口API部署到服务器上了,还是记录一下,以免之后忘记,哈哈 注意一点,就是,centos7是基于python2的,我这边默认的是pyt ...

  5. Pyhton-Web框架之【Django】

    一.什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的 ...

  6. Django框架01 / http协议、web框架本质

    Django框架01 / http协议.web框架本质 目录 Django框架01 / http协议.web框架本质 1.http协议 1.1 http协议简介 1.2 什么是http协议 1.3 H ...

  7. 第三百零三节,Django框架介绍——用pycharm创建Django项目

    Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...

  8. 一 Django框架介绍——用pycharm创建Django项目

    Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...

  9. Django框架——基础教程(总)

    1. Django简介 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架 ...

随机推荐

  1. Scala的正则表达式

    想使用scala的正则表达式,需要首先导入 import scala.util.matching.Regex 然后就可以使用了,实例如下: val pattern = new Regex(" ...

  2. 第二阶段:4.产品功能需求文档PRD:7.案例总结

     Dev就是一些开发 这就是一个评价表格 每次沟通都要记得记录以及总结反思

  3. Java锁对象和条件对象的使用

    锁对象 临界区:临界区是一个特殊的代码段,该代码段访问某种特殊的公共资源,该资源同一时间只允许一个线程使用. Java中可以使用锁对象创造一个临界区: myLock.lock(); try { 关键代 ...

  4. 1034 有理数四则运算 (20 分)C语言

    题目描述 本题要求编写程序,计算2个有理数的和.差.积.商. 输入描述: 输入在一行中按照"a1/b1 a2/b2"的格式给出两个分数形式的有理数,其中分子和分母全是整型范围内的整 ...

  5. ruby 编写控制台进度条

    ruby 中,$stdout.flush 让控制台当前行内容可以重写,以此我们可以做出进度条的效果. def set_progress(index, char = '*') print (char * ...

  6. Linux下安装oracle遇到启动监听服务器启动失败

    1.发现监听服务器没有启动,则  lsntctl start 启动监听服务器: 2.发现TNS-12555问题: 3.查找TNS-12555错误,找到一个满意的答案: chmod  777 /var/ ...

  7. 我该如何学习spring源码以及解析bean定义的注册

    如何学习spring源码 前言 本文属于spring源码解析的系列文章之一,文章主要是介绍如何学习spring的源码,希望能够最大限度的帮助到有需要的人.文章总体难度不大,但比较繁重,学习时一定要耐住 ...

  8. 从 posix_spawn() 函数窥探漏洞逃逸

    posix_spawn() 函数是用来在Linux上创建子进程的,头文件是 #include <spawn.h> ,语法如下: #include <spawn.h> int p ...

  9. .Net Core Web Api实践(三).net core+Redis+docker实现Session共享

    前言:上篇文章介绍了.net core+Redis+IIS+nginx实现Session共享,本来打算直接说明后续填坑过程,但毕竟好多坑是用docker部署后出现的,原计划简单提一下.net core ...

  10. 超级火的java自学网站

    学靠的是毅力和自律,一定要坚持,否则就会前功尽弃,我自己也一直在边学边工作,当然自学要配合好的学习资料. 我是通过这个地方去学习的,它可以添加学习计划,从java基础到高级,从后台到前端,从细节到框架 ...