Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!

news2024/9/23 21:30:10

Django Rest Framework(DRF)是构建强大且灵活的Web API的优秀工具。它基于Django,提供了一套用于构建Web API的组件和工具,简化了API开发过程,同时保留了Django的优雅和强大。

一、Web应用模式

在开发Web应用时,通常有两种开发模式。

1、前后端不分离

前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,前端与后端的耦合度很高。

这种应用模式比较适合纯网页应用,但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而仅仅是数据本身,所以后端原本返回网页的接口不再适用于前端App应用,为了对接App后端还需再开发一套接口。

2、前后端分离

后端仅返回前端所需的数据,不再渲染HTML页面,不再控制前端的效果。

至于前端用户看到什么效果,从后端请求的数据如何加载到前端中,都由前端自己决定,网页有网页的处理方式,App有App的处理方式,但无论哪种前端,所需的数据基本相同,后端仅需开发一套逻辑对外提供数据即可。

前后端分离模式优点:

  • • 提升开发效率

  • • 完美应对复杂多变的前端需求

  • • 增强代码可维护性

二、什么是API 接口?

API(应用程序接口)是一组定义了软件组件如何互相交互的规范。

API 是一些功能、定义或者协议的集合,通过 API 接口实现计算机软件之间的相互通信。对外封装完善,调用时无需学习 API 内部源码,依据 API 文档功能说明书来使用即可。

API 同时也是一种中间件,为各种不同平台提供数据共享。

API接口的数据格式有哪些?

目前 API 接口支持 XLSX、JSON、XML、CSV、RDF 等数据格式,其中 JSON 和 XML 是主流的数据格式,几乎所有 API 接口都支持这两种数据格式。

RESTful API 是一种基于REST架构风格设计的API。它使用统一的接口和状态无关的通信方式来实现各种网络应用。这种设计风格使得RESTful API具有简单、灵活、可扩展和易于理解的特点,因此在Web开发中得到了广泛的应用。

Django Rest Framework 正是基于Rest架构风格设计的一款 后端API 框架。

三、RESTful API

RESTful 是一种定义 Web API 接口的设计风格,尤其适用于前后端分离的应用模式中。

这种风格的理念认为后端开发任务就是提供数据的,对外提供的是数据资源的访问接口,所以在定义接口时,客户端访问的URL路径就表示这种要操作的数据资源。

事实上,我们可以使用任何一个框架都可以实现符合restful规范的API接口。

1、数据安全

RESTful API 链接一般都采用https协议进行传输,以提高数据交互过程中的安全性。

2、接口特征

通常用api关键字标识接口url。

https://api.github.io/   
https://github.io/api

3、多数据版本共存

在url链接中标识数据版本。

https://api.github.io/v1   
https://github.io/api/v2

注:url链接中的v1、v2就是不同数据版本的体现(一种数据资源有多版本情况下,也适用于新旧版本间)

4、数据即是资源,均使用名词(可复数)

接口一般都是完成前后台数据的交互,交互的数据我们称之为资源。

https://api.github.io/v1/users

注:一般提倡用资源的复数形式,在url链接中千万不要出现操作资源的动词

错误示范:https://api.github.io/v1/delete-user

特殊的接口可以出现动词,因为这些接口一般没有一个明确的资源,或是动词就是接口的核心含义

https://api.github.io/login

5、资源操作由请求方式决定

操作资源一般都会涉及到增删改查,我们提供请求方式来标识增删改查动作。

https://api.github.io/users - get请求:获取所有用户   
https://api.github.io/users/1 - get请求:获取ID为1的用户   
https://api.github.io/users - post请求:新增一个用户   
https://api.github.io/users/1 - put请求:整体修改ID为1的用户   
https://api.github.io/users/1 - patch请求:局部修改ID为1的用户   
https://api.github.io/users/1 - delete请求:删除ID为1的用户

6、通过在url上传参的形式传递搜索条件

https://api.github.io/v1/projects?page=5&per_page=10  指定第几页,以及每页的记录数

7、错误处理,应返回错误信息

{       error: "服务器发生错误"   }

四、Django Rest Framework

1、DRF 简介

Django REST framework 是一个建立在Django基础之上的Web 应用开发框架,可以快速的开发REST API接口应用。

DRF优点:

  • 提供了定义序列化器Serializer的方法,可以快速根据 Django ORM 或者其它库自动序列化/反序列化;

  • 提供了丰富的类视图、Mixin扩展类,简化视图的编写;

  • 丰富的定制层级:函数视图、类视图、视图集合到自动生成 API,满足各种需要;

  • 多种身份认证和权限认证方式的支持 JWT;

  • 内置了限流系统;

  • 直观的 API web 界面;

  • 可扩展性,插件丰富

2、安装和设置

首先,确保你的项目已经安装了Django。然后,使用以下命令安装DRF:

pip install djangorestframework

接下来,在你的Django项目的settings.py中添加以下行:

INSTALLED_APPS = [       # ...       'rest_framework',   ]

然后,配置你的URL以包含DRF的路由:

from django.urls import path, include      
urlpatterns = [       
# ...       
path('api/', include('rest_framework.urls')),   
]

3、创建一个简单的API视图

现在,我们来创建一个简单的API视图。首先,定义一个序列化器:

from rest_framework import serializers      
class MyModelSerializer(serializers.ModelSerializer):       
    class Meta:           
        model = MyModel           
        fields = 'all'

然后,创建一个基于类的视图:

from rest_framework import generics   
from .models import MyModel   
from .serializers import MyModelSerializer      
class MyModelListView(generics.ListCreateAPIView):       
     queryset = MyModel.objects.all()       
     serializer_class = MyModelSerializer

最后,在你的urls.py中添加这个视图:

from django.urls import path   
from .views import MyModelListView      
urlpatterns = [       
# ...       
path('mymodel/', MyModelListView.as_view(), name='mymodel-list'),   
]

现在,你已经创建了一个简单的API视图,可以通过/api/mymodel/访问。

五、结语

本篇文章小圈只是做了一个简单的引入以及介绍,DRF有很多其他功能和选项,可以满足更复杂的API需求。比如:更丰富的类视图、身份认证与权限管理等,后续小圈会抽空根据案例为大家带来更精细化的DRF学习教程。现在我们可以通过深入研究DRF文档和示例,更好地利用这个强大的工具。

希望这篇博文能够帮助你开始使用Django Rest Framework,构建出强大且高效的Web API。祝大家编码愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1244302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

边海防可视化智能视频监控与AI监管方案,助力边海防线建设

一、背景与需求 我国有3万多公里的边境线和海岸线,随着我国边海防基础设施建设的快速发展,边海安防也逐渐走向智能化。传统人工巡防的方式已经无法满足边海智能化监管的需求,在沿海、沿边地区进行边海智慧安防视频监控系统等边海防基础设施建…

深度学习卷积神经网络的花卉识别 计算机竞赛

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基…

手写promise(3)-- 实例方法 静态方法

目录 实例方法 catch finally 静态方法 reslove reject race all allSettled any 实例方法 提供给promise实例的方法 包括catch 与finally catch Promise 实例的 catch() 方法用于注册一个在 promise 被拒绝时调用的函数。它会立即返回一个等效的 Promise 对象&…

jjwt使用说明-笔记

jjwt官网链接&#xff1a;https://github.com/jwtk/jjwt POM 依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.12.3</version> </dependency> <dependency><grou…

会议动态 | 祝贺2023 中国商品混凝土年会在上海隆重召开!

2023年11月19日-21日&#xff0c;由&#xff08;国家&#xff09;建筑材料工业技术情报研究所、中国散装水泥推广发展协会混凝土专委会主办的"笃信固本 行稳致远"——2023 第十九届全国商品混凝土可持续发展论坛暨2023中国商品混凝土年会在上海隆重召开&#xff01; …

什么是指针碰撞

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

Shell 通配符与正则表达元字符

Author&#xff1a;rab 目录 前言一、通配符1.1 *1.2 ?1.3 []1.4 {} 二、正则表达元字符2.1 *2.2 .2.3 ^2.4 $2.5 []2.6 \2.7 \<\>2.8 \{\} 总结 前言 不管是学任何语言&#xff0c;几乎都会涉及到通配符与正则的使用。有时候对于 Linux 初学者来说&#xff0c;往往会将…

线上问题排查实例分析|关于 Redis 内存泄漏

Redis 作为高性能的 key-value 内存型数据库&#xff0c;普遍使用在对性能要求较高的系统中&#xff0c;同时也是滴滴内部的内存使用大户。本文从 KV 团队对线上 Redis 内存泄漏定位的时间线维度&#xff0c;简要介绍 Linux 上内存泄漏的问题定位思路和工具。 16:30 问题暴露 业…

gitt开源项目的意义,公司为什么会对在gitt上有开源项目的人更大机会

Git是一种分布式版本控制系统&#xff0c;它可以帮助程序员管理代码的历史版本和协同工作。同时&#xff0c;Git也成为了开源项目的主要托管平台之一。Git的开源项目意义重大&#xff0c;因为这种开源项目托管平台可以帮助开发者将代码和项目分享给全球的开发者&#xff0c;并且…

linux网络之网络层与数据链路层

文章目录 一、网络层 1.IP协议 2.IP协议头格式 3.网段划分 4.特殊ip地址 5.IP地址的数量限制 6.私有ip和公网IP 7.路由 二、数据链路层 1.以太网 2.以太网帧格式 3.MAC地址 4.对比理解MAC地址和IP地址 5.MTU 6.ARP协议 ARP协议的工作流程 ARP数据报的格式 7.DNS 8.ICMP协议 9.N…

从六个方面对比Go和Python的差异

您是否想过 Go 与 Python 之间的主要区别是什么&#xff1f;随着对软件开发人员的需求不断增加&#xff0c;选择哪种编码语言可能会很困难。 ​ 在此&#xff0c;我们将从六个方面对比Go和Python,探讨 Go 和 Python之间的差异。我们将讨论它们的特点、优缺点&#xff0c;以便…

mongodb数据库的常用操作语句

说在前面的话 本文所有的操作示例&#xff0c;都以集合“HistoryTaskBase”为例。 一、查询 1、时间区间 查询“通知时间”介于2019-09-01到2019-10-01之间的数据。 db.getCollection(HistoryTaskBase).find({notifyTime:{$gte:ISODate(2019-09-01T00:00:00.000Z),$lte:ISOD…

Nginx:简介、安装与部署

一、Nginx简介 Nginx是一个很好的高性能Web和反向大力服务器&#xff0c;它具有很多非常优越的特性&#xff1a;在高连接并发的情况下&#xff0c;Nginx是Apahe服务器的不错的替代品&#xff1a;Nginx在美国是虚拟主机生意选择的软件平台之一。能够支持50000个并发连接数的响应…

《洛谷深入浅出基础篇》P4017最大食物链————拓扑排序

上链接&#xff1a;P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P4017 上题干&#xff1a; 题目背景 你知道食物链吗&#xff1f;Delia 生物考试的时候&#xff0c;数食物链条数的题目全都错了&#xff0c;因为她总是…

高质量短效SOCKS5代理IP是什么意思?作为技术你了解吗

小张是一位网络安全技术测试员&#xff0c;最近他接到了一个头疼的任务&#xff0c;那就是评估公司系统的安全性&#xff0c;因此他前来咨询&#xff0c;在得知SOCKS5代理IP可以帮他之后&#xff0c;他不禁产生疑问&#xff0c;这是什么原理&#xff1f;其实和小张一样的朋友不…

ELK企业级日志分析平台——kibana数据可视化

部署 新建虚拟机server5&#xff0c;部署kibana [rootelk5 ~]# rpm -ivh kibana-7.6.1-x86_64.rpm [rootelk5 ~]# cd /etc/kibana/[rootelk5 kibana]# vim kibana.ymlserver.host: "0.0.0.0"elasticsearch.hosts: ["http://192.168.56.11:9200"]i18n.local…

嵌入式开发从入门到入土

写在前面的话 嵌入式开发涉及的层面很广&#xff0c;它既有底层硬件的开发&#xff0c;又涉及上层应用的开发&#xff0c;也就是所谓的系统集成的硬件和软件。而C语言不仅具有汇编语言操作底层的优势&#xff0c;又具有高级开发语言的功能性强的特点&#xff0c;当之无愧地成为…

JavaScript框架 Angular、React、Vue.js 的全栈解决方案比较

在 Web 开发领域&#xff0c;JavaScript 提供大量技术栈可供选择。其中最典型的三套组合&#xff0c;分别是 MERN、MEAN 和 MEVN。前端框架&#xff08;React、Angular 和 Vue&#xff09;进行简化比较。 MERN 技术栈详解 MERN 技术栈包含四大具体组件&#xff1a; MongoDB&am…

保姆级 Keras 实现 YOLO v3 一

保姆级 Keras 实现 YOLO v3 一 一. YOLO v3 总览二. 特征提取网络特征提取网络代码实现 三. 特征融合特征融合代码实现 四. 网络输出模型输出代码实现 五. 网络模型代码实现六. 代码下载 如果要给 YOLO 目标检测算法一个评价的话, 就是快和准, 现在已经到了 v8, 但是我为什么还…

前端环境变量释义process.env与import.meta.env

视频教程 彻底搞懂前端环境变量使用和原理&#xff0c;超清楚_哔哩哔哩_bilibili 添加命令行参数 --modexxxxx 新建.env.xxxx文件,其中.env文件会在所有环境下生效 以VITE_开头&#xff0c;字符串无需加双引号 使用import.meta.env.VITE_xxxxx进行调用