tornado在不重启服务的情况下添加路由的类似功能实现

不重启服务的情况下直接添加路由暂时没有想到办法实现,不过有办法实现添加路由后的功能,大概思路就是用一个handler,采用post或者传参的办法来判断指令实现相应操作,指令操作另外定义一个包,然后通过添加环境变量的办法动态导入这个包

import sys
sys.path.append('包的路径')
# 推荐使用os.path.join()来连接,可以避免不同系统的路径格式问题
impot package

然后就可以愉快地自定义函数,实现匹配html,然后返回html路径,交由tornado渲染
以下贴出用post获取请求然后判断请求实现动态匹配url的伪代码:

    def post(self, *args, **kwargs):
        post_orders = {}  # 一次性获取所有参数
        for key in self.request.arguments:
            post_orders[key] = self.get_argument(key)
        try:
            sys.path.append(包路径)
            import 包 
            html = 包.url_process(post_orders)
            self.render_html(html, xsrf_form_html=self.get_context())
        except Exception as e:
            self.redirect('/404')
            print(e)

下面是包.url_process的代码

url_route = {}


def url_process(post_data):
    """
    实现url路由类似功能
    :param post_data: post请求指令数据
    :return: html页面的url路径
    """
    url_route.setdefault('next', 'next.html')  # 设置next指令匹配next.html
    """
    根据指令的业务逻辑实现
    handler(post_data['start'])
    """
    return url_route[post_data['start']]  # 返回当post参数名为start,指令为post_data['start']时的html

def handler(post_order):
    pass

原理就是通过路由的原理,传递参数到这个特定的handler,动态导入自定义函数,在自定义函数实现业务逻辑,然后返回html交给特定的handler渲染,这个方法有点low,不过是目前能想到的最有效的方法,如果各位大佬有其他方法,欢迎评论指点一二,小弟感激不尽。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值