自定义 URLmethod 模块
- from Custom.errors import *
- def include(base_url, expand_url):
- # base_url 必须是字符串类型
- if not isinstance(base_url, str):
- raise TypeError("base_url must be String type, but {} is not".format(str(base_url)))
- # 必须在拓展的 urls 里面有一个 urlpatterns 的对象, 如果没有就会引发 AttributeError
- getattr(expand_url, 'urlpatterns')
- if not isinstance(expand_url.urlpatterns, (list, tuple)):
- raise UrlError(
- "expand_url.urlpatterns must be a list or tuple, but {} is not".format(str(expand_url.urlpatterns)))
- urlpatterns = expand_url.urlpatterns
- new_urlpatterns = []
- for url in urlpatterns:
- items = []
- new_base_url = base_url + url[0] # 将原始的 url 和拓展的 url 拼接
- items.append(new_base_url)
- items.append(url[1])
- new_urlpatterns.append(tuple(items))
- return new_urlpatterns
- def extend(*args):
- # 将所有的 include 元素拓展成新的列表
- urlpatterns = []
- for urlpattern in args:
- if isinstance(urlpatterns, list):
- urlpatterns.extend(urlpattern)
- else:
- raise UrlError
- return urlpatterns
自定方法的使用
- from tornado.web import Application
- from tornado.ioloop import IOLoop
- from tornado.httpserver import HTTPServer
- from tornado.options import options, define
- from Custom.URL_method import include, extend
- from Robot import urls
- define('port', default=80, type=int)
- settings = {
- 'template_path': 'templates',
- 'static_path': 'static',
- 'debug': True
- }
- urlpatterns = extend(
- include("", urls),
- include(r'/qrcode', urls),
- )
- App = Application(handlers=urlpatterns, **settings)
- if __name__ == '__main__':
- options.parse_command_line()
- http = HTTPServer(App)
- http.listen(options.port)
- IOLoop.current().start()
自定义 url 模块
- from . import views
- urlpatterns = [
- (r'/index', views.IndexHandler),
- (r'/test', views.TestHandler)
- ]
views 模块
- from tornado.Web import RequestHandler
- class IndexHandler(RequestHandler):
- def get(self):
- self.write("hello")
- class TestHandler(RequestHandler):
- def get(self):
- self.write("test page")
效果展示
来源: http://www.bubuko.com/infodetail-3096638.html