Tornado 学习笔记

一、基本操作

import tornado.ioloop
import tornado.web

# 模板引擎
class MainHandler(tornado.web.RequestHandler):
    def get(self,*args,**kwargs):
        # self.write('Hello world')
        self.render('template.html',mag='')
        self.redirect('template.html')
    def post(self,*args,**kwargs):
        
        value = slef.get_argument('')  # 获取post提交的数据
        cookie = slef.get_cookie()  # 获取cookie信息
        self.render('template.html',mag='')
        self.redirect('template.html',)

# 配置文件
settings = {
    "template_path":'views',
    "cookie_secret":'nhskha'
}

# 路由系统
application = tornado.web.Application([
    (r"/index",MainHandler),
],**settings)



if __name__ == "__main__":

    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
获取信息:
slef.get_argument('')  # 获取post提交的数据
slef.get_arguments()  # 获取post提交的全部数据

cookie 操作:
slef.set_cookie()  # 设置cookie信息
slef.get_cookie()  # 获取cookie信息
slef.set_secret_cookie('cookie') # 加密cookie
必须settings中配置自己加密的字符串
slef.get_secret_cookie('cookie') # 解密cookie

获取文件:
slef.request.files['']

self._headers # 获取请求头信息


ps:不同的功能可以分拆到不同的功能文件夹中;实现功能独立。for循环必须return

二、模板引擎

{{ li[0] }} # 获取列表信息
{% for i in range(10) %}
{% end %}
# 所有需要结束的都以end结尾

自定义模板标签
可通过 UIMothod UIModule 进行自定义方法和模板

{% module 类名() %}

2.1、自定义模板

module.py文件:定义模板类与方法

from tronado.web import UIModule
from tornado import escape

class Custom(UIModule):

    def embedded_css(self):# 嵌入式css样式
        return "css样式"
    
    def css_files(self):
        return 'css静态文件'

    def embedded_javascript(self):# 嵌入javascript代码
        return "javascript代码"
    
    def javascript_files(self):
        return 'javascript静态文件'

    def render(self,*args,**kwargs):
        return "<h1>返回内容</h1>" # 不设置转译是什么东西直接输出
        # return escape.xhtml_escape('<h1>返回内容</h1>') 转译html标签为字符串

method.py文件:自定义方法

from tornado import escape
def tab(self,val):
    print(self,val) # slef:<class 'tornado.httputil.HTTPServerRequest'>
    return 'UIMethod' # 返回html标签会直接输出,在settings中需要配置

自定义方法需要在settings进行注册,才能在html文件中使用

import method as mt
import module as mm
settings = {
    'ui_methods':mt,# 注册自定义方法
    'ui_modules':mm,# 注册自定义模板
    'static_path':'/static/' # 指定静态文件
}

html使用

<html>
<head>
<title>使用自定义模板</title>
</head>
<body>
<!-- 自定义方法的使用 -->
{{ tab(11) }} <!-- 转译html标签为字符串 -->
{% raw tab(11) %} <!-- 不转译html标签为字符串 -->

<!-- 模板的使用 -->
{% module Custom(22) %}

</body>
</html>

三、自定义开源组件

3.1、Tornado 自定义继承的一些事情

# 1、多继承 Python是可以多继承。
import tornado.ioloop
import tornado.web

class Foo(object):
    def initialize(self):# initialize是tornado.web.RequestHandler 父类中的方法
        self A = 123
        super(Foo,self).initialize() # 利用super() 可以执行其他自定义的类

# 模板引擎
class MainHandler(Foo,tornado.web.RequestHandler):
    def get(self,*args,**kwargs):
        self.write('Hello world') 

# 路由系统
application = tornado.web.Application([
    (r"/index",MainHandler),
],**settings)


if __name__ == "__main__":

    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
# 2、通用的继承方法
'''
    Foo 继承 tornado.web.RequestHandler 
    MainHandler 再继承 Foo 来实现类方法的扩展
'''
import tornado.ioloop
import tornado.web

class Foo(tornado.web.RequestHandler):
    def initialize(self):# initialize是tornado.web.RequestHandler 父类中的方法
        self A = 123
        super(Foo,self).initialize() # 利用super() 可以执行其他自定义的类

# 模板引擎
class MainHandler(Foo):
    def get(self,*args,**kwargs):
        self.write('Hello world') 

# 路由系统
application = tornado.web.Application([
    (r"/index",MainHandler),
],**settings)


if __name__ == "__main__":

    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

猜你喜欢

转载自blog.csdn.net/u011146423/article/details/83178264