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

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.hqwc.cn/news/211604.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jquery ajax 同步阻塞引起的UI线程阻塞的坑(loading图片显示不出来 )

Jquery ajax 同步阻塞引起的UI线程阻塞的坑(loading图片显示不出来,layer.load延迟)jax重新获取数据刷新页面功能,因为ajax属于耗时操作,想在获取数据且加载页面时显示加载遮罩层,结果发现了ajax的好多坑。…

使用Wireshark提取流量中图片方法

0.前言 记得一次CTF当中有一题是给了一个pcapng格式的流量包,flag好像在某个响应中的图片里。比较简单,后来也遇到过类似的情况,所以总结和记录一下使用Wireshark提取图片的方法。 提取的前提是HTTP协议,至于HTTPS的协议需要导入服…

随笔记录-springmvc_ResourceHandlerRegistry+ResourceHttpRequestHandler

环境:springboot-2.7.5 配置文件配置静态资源映射 springboot配置静态资源映射方式是通过 WebMvcAutoConfiguration 实现的 spring: # resources: # # 自springboot 2.5.5之后,该属性已经被废弃,使用spring.web.resources.static-locat…

Android设计模式--适配器模式

至诚之道,可以前知 一,定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 适配器模式在我们的开发中使用率极高,ListView,GridView&am…

redis运维(十八)pipeline

一 pipeline 流水线 说明: 这里讲解的不是jenkins的pipeline流水线这里pipeline: 管道 redis为什么要提供pipeline功能 事务和pipeline ① pipeline的理念 强调:单纯的pipeline跟事务没有关系redis-cli --pipe --> 使用了pipeline机制说明&a…

PPP/INS紧组合算法

前言:在学习紧组合之前学会GNSS/INS松组合是很有必要的,i2NAV团队开源的KF_GINS项目可以作为GNSS/INS松组合学习模板,本文章主要对武汉大学i2NAV发布的PPP/INS紧组合学习资源进行算法层面的总结,链接: 武汉大学多源智…

鸿蒙(HarmonyOS)应用开发——ArkTs学习准备

介绍 前面我们已经介绍了,如何安装HarmonyOS的IDE ,那么现在我们来介绍一下。HarmonyOS 开发的语言——ArkTs. ArkTS 是HarmonyOS的开发语言,他是typescript 的扩展,而typesrcipt是javascript的超集,如果你不太熟悉typescript语法…

Switch的使用及其注意事项

注意第五点要看清,case执行完后匹配没有成功,如过有Default,将会执行Default,如果有case在Default之后,而且Default没有break语句,那么将会继续执行case的语句,此时case中的常量表达式只起语句标…

Design Guidelines for 100 Gbps

文章目录 Stratix V GT Transceiver ChannelsCFP2 Host Connector Assembly and PinoutStratix V GT to CFP2 Interface Layout DesignBoard Stack Up DimensionsExample Design Channel PerformanceSimulation Results for Stratix V GT to CFP2 Connector Layout Design Desi…

面试cast:reinterpret_cast/const_cast/static_cast/dynamic_cast

目录 1. cast 2. reinterpret_cast 3. const_cast 3.1 加上const的情况 3.2 去掉const的情况 4. static_cast 4.1 基本类型之间的转换 4.2 void指针转换为任意基本类型的指针 4.3 子类和父类之间的转换 5. dynamic_cast 5.1 RTTI(Run-time Type Identification) 1.…