web 服务器路由初探

前言

做 python web 后端开发,有觉得 django,tornado 的路由配置很恶心的吗?

1、我们需要先去某个文件定义一张路由映射表,里面写上 url 和 RequestHander 映射关系

2、然后去另外一个文件写上 RequestHander 的具体逻辑,每次需要去单独维护,恶心死了,我想改变一下,干掉单独维护的映射表,想法主要来自 flask 和之前的一些尝试

代码实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
request_route = {
"GET": {},
"POST": {}
}


def api_register(name, method):

def wrapper(func):
if method == "GET":
request_route["GET"][name] = func
elif method == "POST":
request_route["POST"][name] = func
else:
raise Exception("openapi method error")

def wrapper_func(*args, **kwargs):
ret = func(*args, **kwargs)
return ret
return wrapper_func
return wrapper


@api_register(name="my_func_1", method="POST")
def my_func_1(name, password):
a = 100


@api_register(name="my_func_2", method="POST")
def my_func_2():
pass


@api_register(name="my_func_3", method="POST")
def my_func_3():
pass


print(request_route["POST"]["my_func_1"](123, 34))

这是核心代码实现,程序初始化,我们把所有的 api 注册到了 request_route 这个哈希对象中,然后把 request_route 和 web 服务器参数解析模块做对接,就可以实现动态路由了,比 django,tornado 的实现少了一个映射表,更简单。甚至我们可以用他来改造 django,tornado,做一些扩展

坚持原创技术分享,您的支持将鼓励我继续创作!