zoukankan      html  css  js  c++  java
  • tornado学习笔记

    一.UIMOTHODS:

    1.在项目目录创建uimothods.py文件(名称可以任意)
    内容:
    def test2(self):
    return ('hello uimothods')

    2.tornado项目文件中导入并注册:
    #导入
    from utils import uimothods as mt
    #注册
    settings = {

    'ui_modules': mt
    }
    3.在html中调用uimethod
    {{test2()}}

    二.UImodules:
    1.在项目目录创建uimodules.py文件(名称可以任意)
    from tornado.web import UIModule
    from tornado import escape
    class test(UIModule):
        def render(self, *args, **kwargs):
            return ('<h1>UIMODULES</h1>') #返回html文件,不转义
            #return escape.xhtml_escape('<h1>UIMODULES</h1>') #对返回内容进行转义
        def embedded_javascript(self):#在html中插入js
            return 'a.js'
        def embedded_css(self):#在html中插入css
            return 'a.css'
    View Code
    2.tornado项目文件中导入并注册:
    #导入
    from utils import uimodules as md
    #注册
    settings = {

    'ui_modules': md
    }
    3.在html中调用uimodules
    {% module test(123) %}

    二者区别:uimothods用函数定义,uimodule用类的方式定义,且可以返回时直接在模板加入js/css等

    二。html转意。
    1.在uimodule中可以用:
    from
    tornado import escape
    escape.xhtml_escape('<h1>wupeiqi</h1>')
    2.在html中可以直接使用raw
    {{ raw test}}

    #1.全局转义,在Application中添加配置项

    autoescape=None,

    #2.在文档最开始添加

    {% autoescape None %} #实现整个文档转义

    #在开启全局和文档不转义的情况下,可以使用 escape() 来开启变量的转义

    {{ atag }}
    {{ escape(atag) }}

    #3.也可以使用 {% raw xxx %} 来输出不转义内容

    {% raw atag %}

    tornado是默认自动开启转义的,大家可以根据需求来选是否转义,但是要知道转义的本意是来防止浏览器意外执行恶意代码的,所以去掉转义的时候需要谨慎选择

    开发简单tornado Form功能

    VIEW代码:

    import re
    import tornado.web
    class EmailField:
        def __init__(self,name):
            self.name=name
            self.value=''
            self.error=''
            self.reg=".+@.+.(com|cn)$"
        def __str__(self):
            return '<input type="text" value="%s" name="%s">'%(self.value,self.name)
    
    class TextField:
        def __init__(self,name):
            self.name=name
            self.value=''
            self.error=''
            self.reg=".+"
        def __str__(self):
            return '<input type="text" value="%s" name="%s">'%(self.value,self.name)
    
    class LoginForm:
        def __init__(self):
            self.email=EmailField('email')
            self.username=TextField('username')
        def is_valid(self,request):
            value_dict={}#将用户通过校验的值保存到字典中
            flags=True  
            for k,v in self.__dict__.items():
                user_input=request.get_body_argument(k) #获取用户输入的值
                if re.match(v.reg,user_input):    #正则匹配用户输入的值
                    value_dict[k]=user_input
                else:
                    flags=False               #如果有一条匹配失败,结果返回false
                    if user_input =='':
                        v.error='%s字段不能为空'%k
                    else:
                        v.error='请输入正确的格式!'
                v.value=user_input            #如果用户输入错误将用户的输入返回到页面上!(保留错误结果)
            return flags,value_dict          #返回数据正则匹配结果及用户正则匹配成功的字段
    
    class login(tornado.web.RequestHandler):
        def get(self, *args,**kwargs):
            obj=LoginForm()
            self.render('login.html',**{'obj':obj})
        def post(self, *args, **kwargs):
            obj=LoginForm()
            res,val=obj.is_valid(self)
            if res:
                print('用户输入的正确数据',val)
                self.write('数据已提交成功!')
            else:
                self.render('login.html',**{'obj':obj})
    
    
    
    settings={
        'template_path':'template'
    }
    application=tornado.web.Application([
        (r'/login',login),
    ],**settings)
    if __name__ == '__main__':
        application.listen(80)
        tornado.ioloop.IOLoop.instance().start()
    View Code

     前端代码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form method="POST">
            <p>username{% raw obj.username %}{{obj.username.error}}</p>
            <p>email{% raw obj.email    %}{{obj.email.error}}</p>
            <p><input type="submit" value="提交"></p>
        </form>
    </body>
    </html>
    View Code




  • 相关阅读:
    http://maxie.cnblogs.com/
    有一种爱叫错过
    Lotuser进阶系列(转)——多目录环境中的单点登陆1
    DOMINO中实现PDF在线编辑控件 and so on......(三)
    DOMINO中实现PDF在线编辑控件 and so on......(一)
    Lotuser进阶系列(转)——多目录环境中的单点登陆2
    在两个代理之间传递参数
    利用 DSAPI 为 Domino Web 用户定制用户名和口令认证
    通过 Lotus Domino Java 代理消费 Web 服务
    代理中如何获取参数么?
  • 原文地址:https://www.cnblogs.com/dufeixiang/p/10196403.html
Copyright © 2011-2022 走看看