社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python Web开发:教你如何解放路由管理,新手教程!

python • 6 年前 • 448 次点击  


在前面呢小编准备了一份Python Web开发的学习资料,需要的同学可以加小编QQ群:696541369获取!


如何解放路由管理

1. 痛点

随着业务的飞速发展,API接口越来越多,路由管理文件从几十号变成几百上千行,且每次上新服务,需要在修改路由文件代码,带来一定的风险。

2. 解决方案

  • 既然路由文件随着业务的扩展越来越庞大,那就去掉路由文件。

  • 制定对应规则,路由通过API文件名根据一定的规则对应类名,然后自动导入对应实现类,注册到Web框架中。

2.1 制定规则

下面这套规则只是其中一种方案,可以针对项目情况制定对应的规则,然后实现相关代码,但是整体思路基本一样。

  1. 代码目录结构,列一下简单的项目文件目录,下面以flask框架为例:

  2. app.py是启动文件。

  3. resources是API接口代码文件夹。

  4. services是为API接口服务的函数封装文件夹。

  5. 如果项目还有依赖文件,也可以单独再建其他文件夹。

  6. 项目的API接口代码均放在resources文件夹下,且此文件夹只能写接口API服务代码。

  7. 接口名称命名以_连接单词,而对应文件里的类名文件名称的单词,不过换成是驼峰写法。

  8. 类的导入则通过文件名对应到类名,实现自动映射注册到web框架中。

规则举例如下:

如上图,resources下有一个hello_world接口,还有一个ab项目文件夹,ab下面还有一个hello_world_python接口以及子项目文件夹testab,testab下面也有一个hello_world_python.

  • 接口文件的文件名命名规范:

  • 文件名命名均为小写,多个单词之间使用'_'隔开,比如hello_world.py 命名正确,helloWorld.py命名错误。

  • 接口文件里的接口类Class命名是以文件名字转为驼峰格式,且首字母大写。比如hello_world.py 对应的接口类是 HelloWorld

  • 举例: hello_world.py

  • hello_world_python.py

  1. 路由入口文件会自动映射,映射规则为:

  2. 前缀 / 项目文件夹[...] / 文件名

  3. 其中 前缀为整个项目的路由前缀,可以定义,也可以不定义,比如api-ab项目,可以定义整个项目的路由前缀为 ab/

  4. resource下面项目文件夹如果有,则会自动拼接,如果没有,则不会读取。

  5. 举例

  6. 前缀为空,上图resources中的三个接口对应的路由为:


2.2 代码实现

python很多框架的启动和路由管理都很类似,所以这套规则适合很多框架,测试过程中有包括flask, tornado, sanic, japronto。 以前年代久远的web.py也是支持的。

完整代码地址:

https://github.com/CrystalSkyZ/PyAutoApiRoute

2.2.1 实现下划线命名 转 驼峰命名 函数,代码演示:


2.2.2 实现根据字符串导入模块函数, 代码演示:


2.2.3 检索resources文件夹,生成路由映射,并导入对应实现类, 代码演示如下:


  • et_route_tuple函数作用是通过字符串导入类,并将路由和类以元组的方式添加到数组中。

  • check_file_right函数作用是过滤文件夹中不合法的文件。

  • recursive_find_route函数采用递归查找resources中的文件。

  • existing_route参数是将已经线上存在的路由替换新规则生成的路由,这样旧项目也是可以优化使用这套规则。

3. 应用到项目中

以flask框架为例,其余框架请看github中的代码演示。

app.py 中代码


总结: 至此,通过制定一定规则,解放路由管理文件方案完成。 欢迎各位一起讨论其余比较好的方案。


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/29288
 
448 次点击