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应用框架 ...
随机推荐
- 超简单!pytorch入门教程(二):Autograd
一.autograd自动微分 autograd是专门为了BP算法设计的,所以这autograd只对输出值为标量的有用,因为损失函数的输出是一个标量.如果y是一个向量,那么backward()函数就会失 ...
- Python3 批量修改JPG图片尺寸
功能 批量修改当前文件夹下的jpg图片到设置的尺寸 将修改后的图片移动到 new_img 这个文件夹下 导入库 from PIL import Image # 处理图片模块 import os imp ...
- 利用Feed43为网站自制RSS源
什么是RSS,它可以做什么 快2020年了,RSS日渐式微,我也是去年机缘巧合下才开始使用的,以前只是听说过.RSS,全称Really Simple Syndication,又称简易信息聚合(也叫聚合 ...
- 【他山之石】jenkins忘记初始化密码解决办法
没有太好的方式,网上有的是这样子的,找到 /var/lib/jenkins/users/username/config.xml, 修改为一个已知的 hash 值 #jbcrypt:$2a$10$Dda ...
- Excel解除'工作表保护密码',并复原密码设定
前提要求 Office 2003(也就是老版的.xls文件) 用到宏操作 可以解除[审阅->保护工作表]的密码保护,其他的密码保护不能处理. 解决方案 打开需解除保护密码的Excel文件(.xl ...
- 洛谷$P2605\ [ZJOI2010]$基站选址 线段树优化$dp$
正解:线段树优化$dp$ 解题报告: 传送门$QwQ$ 难受阿,,,本来想做考试题的,我还造了个精妙无比的题面,然后今天讲$dp$的时候被讲到了$kk$ 先考虑暴力$dp$?就设$f_{i,j}$表示 ...
- CommandPattern(命令模式)-----Java/.Net
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式.请求以命令的形式包裹在对象中,并传给调用对象.调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该 ...
- CSS3(4)---动画(animation)
CSS3(4)---动画(animation) 之前有写过过渡:CSS3(2)--- 过渡(transition) 个人理解两者不同点在于 过渡 只能指定属性的 开始值 与 结束值,然后在这两个属性值 ...
- 小小知识点(十四)——Adobe photoshop cc 2018中简单抠图的一些基本操作
一 如何抠图 1. 右键弹出选择工具,随后鼠标左键选择快速选择工具 2.通过点击鼠标,选择想要的区域: Alt+鼠标右键 左右拖动鼠标可调整画笔大小 Alt+鼠标滑轮,可放大或缩小画布大小 ctrl ...
- 高斯消去法解线性方程组(MPI)
用一上午的时间,用MPI编写了高斯消去法解线性方程组.这次只是针对单线程负责一个线程方程的求解,对于超大规模的方程组,需要按行分块,后面会在这个基础上进行修改.总结一下这次遇到的问题: (1)MPI_ ...