tornado自定义实现django  include方法


  • 自定义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")
  • 效果展示

tornado自定义实现django include方法的更多相关文章

  1. Tornado 自定义Form,session实现方法

    一. 自定义Tornado 验证模块 我们知道,平时在登陆某个网站或软件时,网站对于你输入的内容是有要求的,并且会对你输入的错误内容有提示,对于Django这种大而全的web框架,是提供了form表单 ...

  2. django 2.0 中URL的include方法使用分析

    一.问题出现: 在使用Django2.0,配置全局URL时,希望指向某个APP的URL,配置如下: from django.contrib import admin from django.conf. ...

  3. Django中利用filter与simple_tag为前端自定义函数的实现方法

    转自:http://www.jb51.net/article/116303.htm 前言 Django的模板引擎提供了一般性的功能函数,通过前端可以实现多数的代码逻辑功能,这里称之为一般性,是因为它仅 ...

  4. 自定义tag标签的方法

    JSP1.0中可以通过继承TagSupport或者BodyTagSupport来实现自定义的tag处理方法. JSP2.0中也支持另外一种更为简单的自定tag的方法,那就是直接讲JSP代码保存成*.t ...

  5. tornado requesthandler可以重写的方法

    一 :RequestHandler 一般我们继承tornado.web.RequestHandler 1,RequestHandler.initialize()一般用于初始化,第三个字典参数传入 cl ...

  6. 《Entity Framework 6 Recipes》中文翻译系列 (26) ------ 第五章 加载实体和导航属性之延缓加载关联实体和在别的LINQ查询操作中使用Include()方法

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-7  在别的LINQ查询操作中使用Include()方法 问题 你有一个LINQ ...

  7. Servlet---RequestDispatcher.include方法

    为了实现代码重用,需要将某些代码和数据放在一个或多个Servlet中,以供其他Servlet使用,提供了RequestDispatcher.include方法,首先通过getServletContex ...

  8. Android自定义View的实现方法,带你一步步深入了解View(四)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17357967 不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回 ...

  9. tornado和django的结合使用 tornado Server for django WSGI APP

    #!/usr/bin/env python # Run this with # Serves by default at # http://localhost:8080/hello-tornado a ...

随机推荐

  1. Spring Ioc 依赖查找

    Spring ioc 有依赖查找和依赖注入,之前不太明白依赖查找是什么意思,翻了一大堆博客看了好多定义也不太清楚 ,后来看了小马哥视频,他通过代码演示,清楚地讲解了什么是 依赖查找以及几种依赖查找的方 ...

  2. Flask 偏函数、g对象、flask-session、数据库连接池、信号、自制命令、flask-admin

    目录 一.偏函数 二.g对象 g对象和session的区别 三.flask-session 四.数据库连接池 pymsql链接数据库 数据库连接池版 utils/sql.py 五.信号 六.命令fla ...

  3. Python习题集(二)

    每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! https://www.cnblogs.com/poloyy/category/1676599.html 题目 a = [1, 2 ...

  4. Fluent算例精选|03利用VOF和蒸发-冷凝模型

    通过学习本算例您将获得? 1.学会基本的VOF模型设置流程 2.学会利用蒸发-冷凝模型来模拟传热沸腾 目录 1摘要4 2传热沸腾模型介绍4 3前处理4 4求解设置5 4.1启动Fluent5 4.2网 ...

  5. vue前端登录

    登陆流程 1.用户登录从后台获取 token,菜单数据 2.将token和菜单数据存入sessionStorage,token用来校验用户是否已经登录 2.将返回的菜单数据前端生成对应菜单列表 3.处 ...

  6. ERP系统功能及部署方式

    ERP是对企业经营过程中的一些事项进行系统化管理的一种软件,所以ERP软件包含企业经营过程中需要用到的多种功能管理模块,并且ERP软件有两种部署方式.下面一起来了解一下相关的知识吧! ERP系统的功能 ...

  7. C++技法杂记

    C++ 技法杂技杂记 1. 枚举 1.1 枚举继承(Enum Inheritance) struct Enum{ enum{ One = 1, Two, Last }; }; struct EnumD ...

  8. Mysql性能优化:为什么要用覆盖索引?

    导读 相信读者看过很多MYSQL索引优化的文章,其中有很多优化的方法,比如最佳左前缀,覆盖索引等方法,但是你真正理解为什么要使用最佳左前缀,为什么使用覆盖索引会提升查询的效率吗? 本篇文章将从MYSQ ...

  9. 给rm命令加保险

    众所周知,脑残可以学习,但是手残没法治.相信每一位喜欢用终端操作电脑的同学都曾手误使用 rm 命令把不该删除的文件删了.然而,使用 rm 删除的文件是不会进去回收站的. 所以,最好的方法就是我们自定义 ...

  10. 模块 hashlib 加密 签名 防篡改

    hashlib 模块 加密算法: hash (152位)散列 哈希 不可逆得 密码背后就是 hash 程序退出hash 值就变了 ,hash值得结果有可能重复 MD5 (128位) 讯息摘要演算法 基 ...