博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Tornado使用mako 模板总结
阅读量:6988 次
发布时间:2019-06-27

本文共 3265 字,大约阅读时间需要 10 分钟。

hot3.png

import tornado.webimport tornado.ioloopimport tornado.authimport tornado.escapeimport tornado.optionsfrom tornado.options import define, optionsimport mako.lookupimport mako.templateimport osdefine('port', default=8888, help='run on given port', type=int)CURRENT_PATH= os.path.dirname(__file__)TEMPLATE_PATH = os.path.join(CURRENT_PATH, 'templates')STATIC_PATH = os.path.join(CURRENT_PATH, 'static')LOOK_UP = mako.lookup.TemplateLookup(directories=[TEMPLATE_PATH,], module_directory='/tmp/mako',                                      output_encoding='utf-8', encoding_errors='replace')class Application(tornado.web.Application):    def __init__(self):        handlers = [            (r'/', MainHandler),        ]        settings =  {            'cookie_secret':'',             'login_url':'',            'static_path':STATIC_PATH,            'xsrf_cookies':True,        }        super(Application, self).__init__(handlers, **settings)class BaseHandler(tornado.web.RequestHandler):    def initialize(self, lookup=LOOK_UP):        '''            Set template lookup object, Defalut is LOOK_UP        '''        self._lookup = lookup        def get_current_user(self):        user = self.get_secure_cookie('user')        if not user:            return        return tornado.escape.json_decode(user)    def render_string(self, filename, **kwargs):        '''            Override render_string to use mako template.            Like tornado render_string method, this method             also pass request handler environment to template engin.         '''        try:            template = self._loolup.get_template(filename)            env_kwargs = dict(                handler = self,                request = self.request,                current_user = self.current_user,                locale = self.locale,                _ = self.locale.translate,                static_url = self.static_url,                xsrf_form_html = self.xsrf_form_html,                reverse_url = self.application.reverse_url,            )            env_kwargs.update(kwargs)            return template.render(**env_kwargs)        except:            # exception handler            pass     def render(self, filename, **kwargs):         self.finish(self.render_string(filename, **kwargs))class MainHandler(BaseHandler):    @tornado.web.authenticated    def get(self):        self.render('index.html', messages=[])class AuthLoginHandler(BaseHandler, tornado.web.GoogleMixin):    @tornado.web.asynchronous    def get(self):        if self.get_argument('openid.mode', None):        self.get_authenticated_user(self.async_callback(self._on_auth))        return    self.authenticate.redirect()        def _on_auth(self, user):        if not user:            raise tornado.web.HTTPError(500, 'Google authenticate failed')        self.set_secure_cookie('user', tornado.escape.json_encode(user))        self.redirect('/')def main():    tornado.options.parse_command_line()    app = Application()    app.listen(options.port)    tornado.ioloop.IOLoop.instance().start()if __name__ == '__main__':    main()
如上代码所示,只需要在派生的BaseHandler override initilize 和 render_string即可. 其他Request handler只要
继承自BaseHandler即可.这样就不仅可以使用性能高效的mako模板,而且还能使用tornado模板提供的一些功能.

转载于:https://my.oschina.net/u/140191/blog/48017

你可能感兴趣的文章
java实现的web网络书店
查看>>
深入理解Plasma(四):Plasma Cash
查看>>
Shell脚本介绍(资源)
查看>>
SpringCloud SpringBoot 分布式微服务云架构 构建RESTful API
查看>>
查询改写参数配置
查看>>
Kubernetes 网络改进的三项实践分享
查看>>
SpringMVC的粗略整理(一)
查看>>
Visual Paradigm 教程[企业架构]:如何绘制ArchiMate图?
查看>>
Git 提交的正确姿势:Commit message 编写指南
查看>>
分享HTML5自动化构建工具gulp使用方法步骤
查看>>
PHP 包含文件
查看>>
BootStrap 资源汇总
查看>>
为Empathy增加QQ支持
查看>>
Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit:
查看>>
rabbitmq的使用笔记
查看>>
QT临时笔记
查看>>
一次、二次、三次指数平滑计算思想及代码
查看>>
TIDB 最佳实践
查看>>
linux 中mysql命令使用
查看>>
如何在 Laravel 中 “规范” 的开发验证码发送功能【社交系统ThinkSNS研发日记十一】...
查看>>