Tornado框架-基于正则的动态路由映射
1、在路由映射条件里用正则匹配访问路径后缀
2、给每一个正则匹配规则(?P<设置名称>)设置一个名称
3、在逻辑处理的get()方法或post()方法,接收这个正则名称,就会接收到用户访问的后缀路径
路由映射
app=tornado.web.Application(
handlers=[
(r"/" ,mainPage.IndexHandler),
(r"/image/(.*)" ,imagee.CImageHandler),#判断请求路径是否匹配image/,如果匹配执行CImageHandler方法
(r"/(?P<path>\w*.txt)",mainPage.txtPathHandler),#判断请求路径是否匹配字符串.txt,如果匹配执行txtPathHandler方法
(r"/index/(?P<num>\d*)/(?P<nid>\d*)", index.indexHandler)#判断请求路径是否匹配字符串index,如果匹配执行MainHandler方法
],
template_path = commonData.global_template_path,
static_path = commonData.global_static_path,
login_url = "/login"
)
#跳转到前端显示页面
class txtPathHandler(tornado.web.RequestHandler):
def get(self, path):
self.render(path)
#逻辑处理
class indexHandler(tornado.web.RequestHandler): #定义一个类,继承tornado.web下RequestHandler类
def get(self,num,nid): #get()方法,接收get方式请求
print(num,nid)
self.render("index.html")
正则匹配规则:
(?P<设置名称>)
匹配的字符集合整理:
\d 对于Unicode规则:匹配任意Unicode十进制数包括0-9。对于8位byte字符串,仅仅只匹配0-9
\s 匹配任意空格字符包括(空格,制表符,换行符,\r,\f,\v)包括许多其他的字符,比如,不同的语言分隔符也将不同,在ASCII里面,仅仅匹配[ \t\n\r\f\v]。
\S 与\s相反
\w 匹配unicode单词字符,大多数的字符,包括其他的语言的字符,数字与下划线,如果是ASCII标记,则只匹配[a-zA-Z0-9_] 。
\W 与\w相反
\number 匹配同编号组的内容,每一个组都有一个编号,编号从1开始,比如:(.+) \1 匹配'the the' or '55 55'。但是不匹配'thethe'(提示:两个之间有空格,此处的匹配串中间没有空格)。这样特殊的序列只可以匹配99个组。如果序号是0或者是3位8进制数,都不会被认为是一个组,而是被处理为对应进制所代表的字符。在中括号包含的即合理,所有的数字都毫无意外的被当成字符处理。
\A 仅仅匹配字符串首部,用来说明当前位置是一个字符串的首部。
\\A 在新行是没有用的,\A只匹配整个字符串的首部。
\b 匹配空字符串,但是只有在单词的后面或者前面才会匹配。一个单词背定义为一组字符序列。一般来说:\b是被定义在\W和\W之间一个分界符,或者\W与字符串首部和尾部。这也就是说:REr'\bfoo\b'匹配'foo', 'foo.', '(foo)', 'bar foo baz',但是不匹配'foobar' or 'foo3'.默认的Unicode字母数字都是在Unicode表达式中使用,但是也可以通过使用ASCIIflag进行切换((?A)或者re.A)。单词的分界线由归属地决定,如果使用了local flag。在单词序列中,\b代表删除符号(回溯一个字符,类比ASCII).
\B 匹配空字符串,但是只有他不是在单词首部或者尾部才会匹配,也就是说r'py\B'matches 'python', 'py3', 'py2', but not 'py', 'py.', or 'py!'.\B与\b所表达的意思相反。
\Z 匹配字符串末尾。
参考链接:https://blog.csdn.net/rubikchen/article/details/80490041