不重启服务的情况下直接添加路由暂时没有想到办法实现,不过有办法实现添加路由后的功能,大概思路就是用一个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,不过是目前能想到的最有效的方法,如果各位大佬有其他方法,欢迎评论指点一二,小弟感激不尽。。。。。