前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tornado学习笔记

tornado学习笔记

作者头像
py3study
发布2020-01-19 15:48:34
4520
发布2020-01-19 15:48:34
举报
文章被收录于专栏:python3python3

一.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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档