django REST framework-使用与不使用的区别?
首先,来回顾一下传统的基于模板引擎的 django 开发工作流:
绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。
编写视图函数的逻辑。视图中通常涉及数据库的操作。
在视图中渲染 HTML 模板,返回 HTTP 响应。
其次,基于 django-rest-framework 的 RESTful API 的开发,过程是完全类似的:
绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。
编写视图函数的逻辑,根据 HTTP 请求类型,对请求的资源进行相应操作,这个过程通常涉及数据库的操作。
使用约定的资源描述格式(例如 XML 或者 JSON)序列化资源并将数据返回给客户端(通过 HTTP 响应)。
对比发现,前两步几乎是完全相同的。不同点在于,在传统的基于模板引擎的开发方式中,资源使用 HTML 文档进行描述并返回给客户端,而在 RESTful API 的开发方式中,资源通常被描述为 JSON 或者 XML 的格式返回给客户端。
有的同学就要问了,虽然 django 的视图函数通常情况下返回 HTML 文档的响应,但是 django 也支持返回 XML 格式或者 JSON 格式的响应,那么为什么还要使用 django-rest-framework 呢?
事实上,的确能够在 django 中返回 JSON 或者 XML 格式的数据,但是 django 框架本身只提供了十分基础的功能。django-rest-framework 是基于 django 的拓展,专为 RESTful API 的开发而设计,提供了十分丰富的辅助类和函数,帮助我们方便地开发 API。下面就来简单介绍 django-rest-framework 为我们提供了哪些功能特性,这些功能和特性我们在接下来的实战中会进一步学习其用法,这里可以先从宏观层面,做一个简单的了解。
- 内容协商(Content Negotiation)。之前说过,在 RESFful 架构的系统中,资源以某种描述形式在客户端和服务器之间传递,django-rest-framework 根据客户端能够接受的资源格式,自动使用合适的资源描述工具,返回客户端可接受的资源。
- 认证与鉴权(Authentication and Permission)。客户端对资源的操作通常是受限的,有些资源只能由经过身份认证或具有相应权限的用户才能操作,django-rest-framework 提供了丰富的认证类和鉴权类,帮助我们对用户的身份和权限进行校验。
- 序列化(Serialization)。django 基于 Python 语言开发,因此资源通常由 Python 对象描述,那么在传递给客户端时,就要进行转换,例如将 Python 对象转换为 JSON 字符串,这个过程就叫做序列化。django 内置的序列化器功能有限,django-rest-framework 提供了功能更加丰富和强大的序列化器,让资源的序列化工作变得异常简单。
- 各种通用视图(Generic Views)。django 针对 Web 开发中常见的处理逻辑,提供了各种通用视图函数,以提高代码的复用性,减少开发者的工作量。django-rest-framework 同样针对 RESTful API 开发中常见的处理逻辑,提供了各种通用视图函数。
- 路由自动生成器(Router)。django-rest-framework 根据编写的视图函数,自动生成符合 RESTful 设计的 URL 路由。
- 文档(Documentation)。django-rest-framework 基于 OpenAPI 模式自动生成 API 文档,无需我们手动编写和维护。
除此以外,django-rest-framework 还提供了分页(Pagination)、API 版本控制(Versioning)、缓存(Caching)、限流(Throtting)等各种功能类。
相关文章:
django REST framework-使用与不使用的区别?
首先,来回顾一下传统的基于模板引擎的 django 开发工作流: 绑定 URL 和视图函数。当用户访问某个 URL 时,调用绑定的视图函数进行处理。 编写视图函数的逻辑。视图中通常涉及数据库的操作。 在视图中渲染 HTML 模板,返回 HTTP 响应…...
获取URL中的参数
获取URL中的参数 function getUrlParam(name) {var reg new RegExp("(^|&)" name "([^&]*)(&|$)");var r window.location.search.substr(1).match(reg);if (r ! null)return unescape(r[2]);return null; } 这个正则表达式就是一个URL路…...

一起学数据结构(9)——二叉树的链式存储及相关功能实现
目录 1. 二叉树的链式存储: 2. 二叉树的前序遍历: 3. 二叉树的中序遍历: 4. 二叉树的后序遍历: 5. 统计二叉树的结点总数 6.统计二叉树的叶子结点数: 7. 统计二叉树第层的结点数量: 8. 二叉树的销毁…...
vue 后端返回二进制流-前端通过blob对象下载文件-图片
前言 在实际开发中我们经常会遇见下载文件的场景,比如下载合同,下载文件 下载文件有2种方式,一种是后端返回二进制流,前端通过blob对象接受根据不同类型下载 还有一种把地址直接在浏览器新窗口打开浏览器打开pdf可以预览和下载&…...
vue el-dialog封装成子组件(组件化)
前言 实际开发过程中我们经常听见组件化开发,但在实际开发过程中(没有人审查时)怎么方便来 我们有时是因为时间不够,所以把所有代码写在一个页面。当业务逻辑复杂时可能会有1k多行 虽然不能要求自己写出高效复用性高的组件&…...
爬虫教程 一 requests包的使用
request 简介 requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。 response.text 和response.content的区别 response.text 类型:str解码类型: requests模块自动根据HTTP 头部对响应的编码作…...

Aria2NG连接aria2-pro提示认证失败的处理办法
本文档适用于已经安装了aria2-pro和AriaNg的小伙伴~ 第一次登录管理端会提示”认证失败“ 这是因为aria设置了密码,需要在设置中配置上密码即可 配置完密码重新加载就可以正常使用啦 下载速度明显比以前快了很多 下载参考文档 Docker安装下载神器aria2并使用过程记…...

MYSQL 连接
高频 SQL 50 题(基础版) - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 1378. 使用唯一标识码替换员工ID SELECT COALESCE(unique_id, NULL) AS unique_id,name FROM Employees LEFT JOIN EmployeeUNI ON Employees.…...
SeaTunnel 换maven源,解决插件下载慢
SeaTunnel 是使用的mvnw命令,可以先执行一下install-plugin.sh然后终止 理论上应该可以直接执行mvnw,他就会去安装下载maven,目录就是下面的目录 然后去服务器目录修改 setting.xml文件,设置镜像源即可 /root/.m2/wrapper/dists/apache-maven-3.8.4-bin/52ccbt68d252mdldqsfsn…...

安卓14通过“冻结”缓存应用程序腾出CPU,提高性能和内存效率
本月早些时候,我们听说更新到安卓14似乎提高了谷歌Pixel 7和Pixel 6的效率——提高了电池寿命,并在这个过程中减少了热量的产生。现在看来,安卓14的增效功能细节已经公布。 安卓侦探Mishaal Rahman在X(前身为Twitter)…...

jupyter崩溃OOM,out of memory,jupyter代码写不进去,保存不了。
最近写一个比较长的数据处理代码,有快千行,然后经常代码没有写入,然后直接网页崩溃,给我干蒙了。我已经是jupyter版本的问题,弄了半天,弄完,还是有这个问题。然后就查了一下,发现是j…...

一文带你快速掌握爬虫开发中的一些高级调试技巧
文章目录 1. 写在前面2. Reply XHR(重新发起请求)3. copy as fecth(修改参数请求)4. copy()复制变量5. Web网页全屏截图6. 控制台安装使用npm7. 控制台中引用上次执行结果8. 控制台表展示对象数组 1. 写在前面 做过爬虫开发的人都…...

6.(vue3.x+vite)路由传参query与params区别
前端技术社区总目录(订阅之前请先查看该博客) 效果截图 一:路由传参有两种方式:params与query params与query区别 1:param,路由带“/”,query带“?” 2:query传过来的参数会显示到地址栏中 而params传过来的参数可以显示参数或隐藏参数到地址栏中(vue-router 4.1.4不…...

C++string的使用
CSDN的uu们,大家好。这里是C入门的第十六讲。 座右铭:前路坎坷,披荆斩棘,扶摇直上。 博客主页: 姬如祎 收录专栏:C专题 目录 1.构造函数 1.1 string() 1.2 string(const char* s) 1.3 string(const …...
闲着也是闲着,自己写歌东西玩一玩,碰碰脑子,简单快乐一点,双人出数的小游戏,后续还带补充
主旨就是每个人出一个数,目前限制两人,之后考虑多人,然后对其取差值,获取到一个结果,比对结果的奇偶数,还可以看下两人出同一个数的概率,反正概率上是一个比较稳定的。 当然自己想玩的活也可以做…...

牛客网 -- WY28 跳石板
题目链接: 跳石板_牛客题霸_牛客网 (nowcoder.com) 解题步骤: 参考代码: void get_approximate(vector<int>& v,int n) {//求约数,从2到sqrt(n)即可,原因看图解//这里一定要等于sqrt(n),例如16…...

[正式学习java③]——字符串在内存中的存储方式、为什么字符串不可变、字符串的拼接原理,键盘录入的小细节。
一、字符串 1.字符串在内存中的存储方式 🔥在java中,内存中有两个地方可以存储字符串,一个是字符串池,一个是堆内存,串池中的字符串不会重复,而堆中的字符串每次都会开辟一块新的空间,因为维护…...

行情分析——加密货币市场大盘走势(10.18)
大饼昨日小幅度的下跌回调了,很快又上涨。目前看下来震荡向下刚刚开始,可以关注后续情况。大饼依然保持看空不做空,目前除了独立行情的币,就大饼非常强势。目前从MACD日线来看,还是保持多头趋势,预计明后两…...

高并发场景下常见的限流算法及方案介绍
应用场景 现代互联网很多业务场景,比如秒杀、下单、查询商品详情,最大特点就是高并发,而往往我们的系统不能承受这么大的流量,继而产生了很多的应对措施:CDN、消息队列、多级缓存、异地多活。 但是无论如何优化&…...

虹科分享 | 选择SAS还是NVMe?虹科网络基础带您一探究竟!
存储架构师需要通过确保他们选择的存储解决方案提供支持其生态系统所需的安全性、稳定性、可扩展性和管理特性来应对当今的业务挑战。当他们考虑采用新的存储技术时,在采用新技术之前,他们应该权衡和审查一些基本的考虑因素。新的存储协议不断进入市场&a…...

华为云Flexus+DeepSeek征文| 华为云Flexus X实例单机部署Dify-LLM应用开发平台全流程指南
华为云FlexusDeepSeek征文| 华为云Flexus X实例单机部署Dify-LLM应用开发平台全流程指南 前言一、相关名词介绍1.1 华为云Flexus X实例介绍1.2 Dify介绍1.3 DeepSeek介绍1.4 华为云ModelArts Studio介绍 二、部署方案介绍2.1 方案介绍2.2 方案架构2.3 需要资源2.4 本…...

嵌入式面试高频!!!C语言(四)(嵌入式八股文,嵌入式面经)
更多嵌入式面试文章见下面连接,会不断更新哦!!关注一下谢谢!!!! https://blog.csdn.net/qq_61574541/category_12976911.html?fromshareblogcolumn&sharetypeblogcolumn&…...
场景题-3
如何实现一个消息队列 拆解分析主流的几种消息队列 1、基本架构 生产者Producer、消费者Consumer、Broker:生产者发送消息,消费者接受消息,Broker是服务端,处理消息的存储、备份、删除和消费关系的维护。 主题和分区ÿ…...

Reactor和Proactor
reactor的重要组件包括:Event事件、Reactor反应堆、Demultiplex事件分发器、Eventhandler事件处理器。...

汽车安全体系:FuSa、SOTIF、Cybersecurity 从理论到实战
汽车安全:功能安全(FuSa)、预期功能安全(SOTIF)与网络安全(Cybersecurity) 从理论到实战的安全体系 引言:自动驾驶浪潮下的安全挑战 随着自动驾驶技术从L2向L4快速演进,汽车安全正从“机械可靠…...
Spring AI 项目实战(五):Spring Boot + AI + DeepSeek + Redis 实现聊天应用上下文记忆功能(附完整源码)
系列文章 序号文章名称1Spring AI 项目实战(一):Spring AI 核心模块入门2Spring AI 项目实战(二):Spring Boot + AI + DeepSeek 深度实战(附完整源码)3Spring AI 项目实战(三):Spring Boot + AI + DeepSeek 打造智能客服系统(附完整源码)4Spring AI 项目实战(四…...
Thinkphp6软删除
方法一 从控制器层直接操作 删除 此操作不会直接删除数据 而是在delete_time字段更新删除时间 ->useSoftDelete(delete_time,get_datetime())->delete() 查询 这里的数据库字段需要设置为默认NULL 查询的时候仅查询未更新删除时间的数据 ->whereNull("dele…...

集成电路设计:从概念到实现的完整解析优雅草卓伊凡
集成电路设计:从概念到实现的完整解析优雅草卓伊凡 一、集成电路设计:芯片制造的”灵魂蓝图” 1.1 什么是集成电路设计? 集成电路(IC)设计是指通过电子设计自动化(EDA)工具,将数百…...

SpringCloud学习笔记-2
说明:来源于网络,如有侵权请联系我删除 1.提问:如果注册中心宕机,远程调用还能成功吗 答:当微服务发起请求时,会向注册中心请求所有的微服务地址,然后在向指定的微服务地址发起请求。在设计实…...
PART 6 树莓派小车+QT (TCP控制)
1. 树莓派作为服务器的程序 (1)服务器tcp_server_socket程序 可以实现小车前进、后退、左转、右转、加减速(可能不行) carMoveControl.py import RPi.GPIO as GPIO import time import tty,sys,select,termios import socket…...