DRF框架之使用Django框架完成后端接口(API)的定义
学习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)的定义的更多相关文章
- Vue学习笔记-Django REST framework3后端接口API学习
一 使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7 (Windows x86- ...
- 自创Web框架之过度Django框架
目录 自创Web框架之过度Django框架 软件开发架构 HTTP协议 Web框架之"撸起袖子加油干" Web框架之通过wsgiref加油干 封装优化处理 动静网页 jinjia2 ...
- python主流框架简介和Django框架的使用
目录 一.手撸简易web框架 二.动静态网页 1. 静态网页 2. 动态网页 三.jinja2模板语法 1. jinja2的作用 四.python主流web框架 1. django 3. tornad ...
- python3.8.0 Django 开发后端接口api 部署到 Linux Centos7上
经历了两天的时候终于把本地使用python3 django开发的接口API部署到服务器上了,还是记录一下,以免之后忘记,哈哈 注意一点,就是,centos7是基于python2的,我这边默认的是pyt ...
- Pyhton-Web框架之【Django】
一.什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的 ...
- Django框架01 / http协议、web框架本质
Django框架01 / http协议.web框架本质 目录 Django框架01 / http协议.web框架本质 1.http协议 1.1 http协议简介 1.2 什么是http协议 1.3 H ...
- 第三百零三节,Django框架介绍——用pycharm创建Django项目
Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...
- 一 Django框架介绍——用pycharm创建Django项目
Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...
- Django框架——基础教程(总)
1. Django简介 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架 ...
随机推荐
- Perl中的bless的理解
bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. [xywang@mnsdev13: ...
- Visio流程图表
基本流程图: 流程图类别 基本流程图的四种类型 打开基本流程图 注意页面内引用跟跨页引用 就是两个按钮的作用 就是一个按钮的作用 点击跳转 按钮设置好之后可以输入数字 方便区分跳转 下面是跨职能流程图 ...
- jdbc链接Oracle数据库的封装
在src下创建properties文件 driver=oracle.jdbc.driver.OracleDriverurl=jdbc:oracle:thin:@//127.0.0.1:1521/XEu ...
- 我们基于kaldi开发的嵌入式语音识别系统升级成深度学习啦
先前的文章<三个小白是如何在三个月内搭一个基于kaldi的嵌入式在线语音识别系统的>说我们花了不到三个月的时间搭了一个基于kaldi的嵌入式语音识别系统,不过它是基于传统的GMM-HMM的 ...
- 【重学Node.js 第1&2篇】本地搭建Node环境并起RESTful Api服务
本地搭建Node环境并起RESTful Api服务 课程介绍看这里:https://www.cnblogs.com/zhangran/p/11963616.html 项目github地址:https: ...
- CountDownLanuch,CyclicBarrier,Semaphore,Lock
一.你在项目中用过CountDownLanuch,CyclicBarrier,Semaphore吗? 1.CountDownLanuch是一个同步的工具类,它允许一个或多个线程一直等待,直到其他线程执 ...
- 洛谷P1220 关路灯 题解 区间DP
题目链接:https://www.luogu.com.cn/problem/P1220 本题涉及算法:区间DP. 我们一开始要做一些初始化操作,令: \(p[i]\) 表示第i个路灯的位置: \(w[ ...
- [Micropython]TPYBoard v202 智能WIFI远控小车
转载请注明文章来源,更多教程可自助参考docs.tpyboard.com,QQ技术交流群:157816561,公众号:MicroPython玩家汇 前言---------------------- 之 ...
- log日志拦截
简介 主要记录一下项目中的日志拦截和异常拦截,由于之前公司项目为单体项目,所使用的日志拦截较为简单,只是用拦截器进行前后对日志的拦截,异常拦截直接使用@ExceptionHandler,而现在公司接口 ...
- 自己动手搭环境—unit 1.1、Struts2环境搭建
在手动配置action的基础上引入struts2-convention-plugin-2.x.x.jar以支持action的注解支持 修改的地方主要在struts.xml中 <?xml vers ...