python实现路由功能_8. Python web框架开发 - 路由功能

前情回顾

前面开发web框架只写到Python web框架开发 - 实现动态页面返回。

8328e9c69b8bfccedf636045abae2ebe.png

思考这里就存在一个缺陷,虽然页面的确能够返回正确的html页面,但是后续如果不同的页面需要做不同的数据逻辑返回处理,该怎么区分出来呢?

路由功能

b7cf66d367ae8ce00564f5ac02fb619f.png

根据不同的请求,需要分发路由指向不同的处理逻辑功能。

开发思路

根据路径进行匹配,然后指向不同的处理函数

那么如何匹配找出请求过来的路径呢?例如请求过来的路径是./html/index.html。此情此景,可以使用正则匹配的方法。

测试如下:

In [1]: import re

In [7]: file_path = "./html/index.py"

In [22]: re.match(r"\./html",file_path).group()

Out[22]: './html'

In [23]: re.match(r"\./html/",file_path).group()

Out[23]: './html/'

In [24]: re.match(r"\./html/[^.]+",file_path).group()

Out[24]: './html/index'

In [25]: re.match(r"\./html/([^.]+)",file_path).group()

Out[25]: './html/index'

In [26]: re.match(r"\./html/([^ ]+)",file_path).group()

Out[26]: './html/index.py'

In [27]: re.match(r"\./html/([^ ]+)",file_path).group(1)

Out[27]: 'index.py'

# 好了,最后根据正则,就可以对应匹配出所需要的函数方法

In [28]: re.match(r"\./html/([^.]+)",file_path).group(1)

Out[28]: 'index'

In [29]:

根据已知的路径,如果找到有结果,那么就可以用返回的结果来进行判断调用哪个服务了。

使用正则匹配,调用不同的函数方法来执行返回数据

362544c6b8ef238ecd1b9b4c5aa54d05.png

测试运行如下:

ddabe08cdb5b15f49edf5d9ac882ad17.png

此时再请求另一个页面:http://127.0.0.1:7788/page_about.py

fd1d3b3c396bf3fe9eeef368f597bd49.png

因为还没有写page_about的方法,所以没有正常返回页面。

下面再补充一下方法:

2bc7a76048d13ddd7317dd7d52b533e0.png

再测试一下看看:

2df7670d125b6f30f9929bd2dbddafd3.png

好了,能够正常访问了。

通过定义一个路由字典映射不同函数的方法,能够正常根据匹配的函数名,调用不同的方法处理不同页面的逻辑了。

思考:如果这样的方法非常多,那么就要不断地补充这个字典映射表:

# 设置路由对应的字典

route_dict = {

"index" : index,

"page_about" : page_about,

..... 无限添加方法

}

这就比较费劲了。

还有可能会有人疑问,为什么要字典呢?直接使用匹配出来的函数名执行不就好了?因为正则匹配出来的是字符串,无法执行函数的。

2dd1e4940766f57eb79f55d9689a2253.gif

这样的话,我就要被添加方法的海洋所淹没

优化的方法,写一个修饰器,在调用函数方法的时候,将对应的函数自动写入字典之中,这样就不用自己手动去写了。

编写修饰器,自动将函数写入字典

d75d6526ae7bfde7eaba46fb0ae85a09.png

运行测试一下:

56cdd9c97dd9153a0952543c3ad70c39.png

好了,这样就能够正常访问了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值