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


如何解放路由管理

  1. 痛点

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

  1. 解决方案

既然路由文件随着业务的扩展越来越庞大,那就去掉路由文件。
制定对应规则,路由通过API文件名根据一定的规则对应类名,然后自动导入对应实现类,注册到Web框架中。
2.1 制定规则

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

代码目录结构,列一下简单的项目文件目录,下面以flask框架为例:
app.py是启动文件。
resources是API接口代码文件夹。
services是为API接口服务的函数封装文件夹。
如果项目还有依赖文件,也可以单独再建其他文件夹。
项目的API接口代码均放在resources文件夹下,且此文件夹只能写接口API服务代码。
接口名称命名以_连接单词,而对应文件里的类名文件名称的单词,不过换成是驼峰写法。
类的导入则通过文件名对应到类名,实现自动映射注册到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
路由入口文件会自动映射,映射规则为:
前缀 / 项目文件夹[...] / 文件名
其中 前缀为整个项目的路由前缀,可以定义,也可以不定义,比如api-ab项目,可以定义整个项目的路由前缀为 ab/
resource下面项目文件夹如果有,则会自动拼接,如果没有,则不会读取。
举例:
前缀为空,上图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参数是将已经线上存在的路由替换新规则生成的路由,这样旧项目也是可以优化使用这套规则。

  1. 应用到项目中

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

app.py 中代码

总结: 至此,通过制定一定规则,解放路由管理文件方案完成。 欢迎各位一起讨论其余比较好的方案。如果你跟我一样都喜欢python,也在学习python的道路上奔跑,欢迎你加入python学习群:839383765 群内每天都会分享最新业内资料,分享python免费课程,共同交流学习,让学习变(编)成(程)一种习惯!

原文地址:https://blog.51cto.com/14186420/2355803

时间: 2024-08-22 05:22:15

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

Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结构. 支持事务.分片.主从复之.支持RDB(内存数据保存的文件)和AOF(类似于MySQL的binlog)两种持久化方式.3.0加入订阅分发.Lua脚本.集群等特性. 命令参考:http://doc.redisfans.com 中文官网:http://www.redis.net.cn 安装(都大同小

python web 开发学习路线

自己目前学习python web 开发, 经过两个月的摸索,目前对web开发有了浅显的认识,把自己的学习过程贴出来.1.python入门推荐老齐<从零开始学python>,<python简明教程>,这两本书很适合小白入门(像我一样长期徘徊在编程门外的人)2.python进阶推荐<python学习手册>,python学习手册的前半部分与在入门教程中的基础部分相重复,后面部分对python的介绍更细致,比如面向对象的这部分对于小白理解相对容易.还有一本<python

《Python Web开发与接口测试》

为什么学习本书: 是否想学习Python web开发而找不到很好的入门教程. 是否很想知道当你点击一个按钮后,程序到底经过哪些过程把你想要的页面展现在你面前. 是否想告诉别人,不就是开发嘛,我也会. 是否想知道接口到底是什么,它是如何被开发出来的,我们又如何对它进行测试? 为什么是Django? 我们总是很难去决定一件事情.比如,我到底该学Java 呢还是C# 呢? 到底测试的工资高还是开发的高?我学习了Python之后,想学习web开发,是Django 还是Flask 好学.强大和灵活? 搞J

《Python入门》Linux 下 Python Web开发环境搭建笔记

之前写过 Windows 7下Python Web开发环境搭建笔记,今天写一下在Linux系统下搭建Python Web的开发测试环境. 我使用的系统是:ubuntu 14.04 server,根据个人经验,CentOS 6.5 下也适用. 关于Python的版本 进入Python的网站,鼠标移到导航条上的下载,我们会发现提供两下主版本的下载链接! 这两个之间存在什么差别呢? 个人理解,2.7.x的版本为更加稳定的版本,而3.x的版本则是比较前卫的版本,包含了很多新功能新特性之类的: 但如果想要

windows下python web开发环境的搭建

windows下python web开发环境: python2.7,django1.5.1,eclipse4.3.2,pydev3.4.1 一. python环境安装 https://www.python.org/ftp/python/2.7/python-2.7.amd64.msi 不多说,装完后把C:\Python27加入到path环境变量里. 然后就溜溜python,看看version啦.OK,next step. 二. python web开发框架django安装 django是一个采用

Python web开发:几个模板系统的性能对比(转)

http://blog.chedushi.com/archives/910 结论: 点评一下吧.django就是个渣,不多废话了.webpy的代码很简洁,可惜速度太慢了.bottle看起来快一点,不过也没有多出彩.tornado本身速度很快,不过模板--也就是如此吧.真的值得一用的,只有jinja2,mako,cheetah三个.速度都小于了5ms,单核每秒可以生成200个页面,16核机器上大概就能跑到3000req/s,性能比较高.jinja2的速度比较折衷,配置灵活,语法类似django是他

哪个python web开发视频最好?

?程序员说:Python web框架尤为重要!python的web框架实在是太多了,但它们也各有各的优势.那么,哪个python web开发视频最好?如果你还没找到,不妨看看这个. python课程web知识点:http://pan.baidu.com/s/1jIMdU2i Python流行的主要原因是代码的优雅,特别是简洁和可读性.当谈到Web开发的时候会想到是什么使Python成为越来越多的开发人员的核心语言?与PHP不同,它不是为web而设计的,并且Python中没有集成核心Web功能.

python web开发1

第一个python web开发.涉及:flask架构,mysql数据库.功能:日记本.开发.flask架构,mysql数据库.功能:日记本. 1 from flask import Flask,render_template 2 from flask import request 3 import pymysql 4 5 6 7 #实例 flask这个类 8 app = Flask(__name__) 9 10 # 11 @app.route('/') 12 def Index(): 13 re

python Web开发的参考书

在网上找了一些 感觉这几个还可以 Web接口开发与自动化测试--基于Python语言 Flask Web开发:基于Python的Web应用开发实战 Python高效开发实战:Django.Tornado.Flask.Twisted Python项目开发实战 HTML5移动平台的Java Web实用项目开发 http://chenx1242.blog.51cto.com/10430133/1914949 http://www.ziqiangxuetang.com/django/django-tem