前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tornado:构造一个分级路由

tornado:构造一个分级路由

作者头像
超级大猪
发布2019-11-22 09:39:21
8970
发布2019-11-22 09:39:21
举报
文章被收录于专栏:大猪的笔记

前言

在tornado中,并没有django那样NB的设计,很多东西要我们自己动手。比如django中司空见惯的分级路由。

构建

url_routers.py

提供两个函数用来做处理,代码:

代码语言:javascript
复制
# coding: utf-8
from __future__ import unicode_literals
from importlib import import_module
def include(module):
    res = import_module(module)
    urls = getattr(res, 'urls')
    return urls

def url_wrapper(urls):
    wrapper_list = []
    for url in urls:
        path, handles = url
        if isinstance(handles, (tuple, list)):
            for handle in handles:
                pattern, handle_class = handle
                wrap = ('{0}{1}'.format(path, pattern), handle_class)
                wrapper_list.append(wrap)
        else:
            wrapper_list.append((path, handles))
            print(wrapper_list)
    return wrapper_list

项目文件

controllers/test/urls.py

代码语言:javascript
复制
from __future__ import unicode_literals
from index import IndexHandler, Reverse
urls = [
    (r'hello/(\w+)', IndexHandler),
    (r'reverse/(\w+)', Reverse),
]

controllers/test/index.py

代码语言:javascript
复制
import tornado.web

class IndexHandler(tornado.web.RequestHandler):
    def get(self, name):
        greeting = self.get_argument('greeting', 'Hello')
        self.write(greeting + '{}, friendly user!'.format(name))

class Reverse(tornado.web.RequestHandler):
    def get(self, input_str):
        self.write(input_str[::-1])

最后,run.py启动项目

在这个项目中,其实只是用两个函数巧妙的拆分了urls路由。让代码帮我们拼接所有的urls。

代码语言:javascript
复制
# coding: utf-8
from __future__ import unicode_literals
import tornado.httpserver
import tornado.ioloop
import tornado.web
from url_router import include, url_wrapper
from controllers.test_hello.index import IndexHandler

from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)

application = tornado.web.Application(url_wrapper([
    (r"/(\w+)", IndexHandler),
    (r"/test/", include('controllers.test_hello.urls')),
]))

if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 构建
    • url_routers.py
      • 项目文件
        • 最后,run.py启动项目
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档