一.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'
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()
tornado.ioloop.IOLoop.instance().start()

前端代码:

<!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>
												

tornado学习笔记的更多相关文章

  1. tornado 学习笔记1 引言

    从事软件开发这行业也快5年啦,其实从事的工作也不完全是软件开发,软件开发只是我工作中的一部分.其中包括课题研究.信息化方案设计.软件开发.信息系统监理.项目管理等工作,比较杂乱.开发的软件比较多,但是 ...

  2. Tornado学习笔记(一) helloword/多进程/启动参数

    前言 当你觉得你过得很舒服的时候,你肯定没有在进步.所以我想学习新的东西,然后选择了Tornado.因为我觉得Tornado更匹配目前的我的综合素质. Tornado学习笔记系列主要参考<int ...

  3. tornado 学习笔记2 Python web主流框架

    2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...

  4. Tornado学习笔记(三) 请求方式/状态码

    本章我们来学习 Tornado 支持的请求方式 请求方式 Tornado支持任何合法的HTTP请求(GET.POST.PUT.DELETE.HEAD.OPTIONS).你可以非常容易地定义上述任一种方 ...

  5. Tornado学习笔记(二) 路由/post/get传参

    本章我们学习 Tornado 的路由传参等问题 路由 路由的匹配 Tornado的路由匹配采用的是正则匹配 一般情况下不需要多复杂的正则,正则的基本规则如下(站长之家) 举个例子 (r'/sum/(\ ...

  6. tornado学习笔记19 Tornado框架分析

    19.1 Http服务器请求处理流程图 (1) 调用HTTPServer的bind方法,绑定Socket的监听端口号: (2) 调用HTTPServer的listen方法,初始化一个listen so ...

  7. tornado学习笔记11 Web应用中模板(Template)使用应用实践

    上一篇中(Web应用中模板的工作流程分析),已经分析了模板的渲染流程,以及相关参数获取及设置原理.这篇主要讲述模板在实际应用案例. 11.1 需求 根据用户输入的两次密码,判断两次密码是否一致,并将判 ...

  8. tornado 学习笔记15 _ServerRequestAdapter分析

         继承于HTTPMessageDeletegate,是HTTPMessageDeletegate的一种实现,用于处理请求消息. 15.1 构造函数 def __init__(self, ser ...

  9. tornado 学习笔记9 Tornado web 框架---模板(template)功能分析

            Tornado模板系统是将模板编译成Python代码.         最基本的使用方式: t = template.Template("<html>{{ myv ...

  10. tornado 学习笔记10 Web应用中模板(Template)的工作流程分析

             第8,9节中,我们分析Tornado模板系统的语法.使用以及源代码中涉及到的相关类,而且对相关的源代码进行了分析.那么,在一个真正的Web应用程序中,模板到底是怎样使用?怎样被渲染? ...

随机推荐

  1. Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件

    新服务器搭建环境总是有很多问题.在安装MS SQL SERVER 2014 EXPRESS的时候提示无法安装成功,需要先安装 .NET Framework 3.5!但是新问题又来了,使用Windows ...

  2. teradata 数据定义

    teradata 数据定义 创建表的可选项 是否允许记录重复 set 不允许记录重复 multiset 允许记录重复 数据保护 fallback       fallback    使用fallbac ...

  3. Huawei vlan 配置及vlan 间通讯

    Huawei Vlan配置及vlan 间通讯实例 组网需求:汇聚层交换机做为 PC 电脑的网关, PC3直连 SW2 属于 vlan 2,网关为 vlanif 2 接口地址192.168.2.1/24 ...

  4. java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)

    java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...

  5. MySql详解(三)

    MySql详解(三) 导入基础表 具体的SQL文件已经放入百度网盘,连接为:http://pan.baidu.com/s/1hseoVR2,后面的MySql内容都是按照这些基础表展开的. depart ...

  6. Math.min() / Math.max() 使用方法

    首先弄懂apply 和 call 都是js函数自带的方法.区别如下: apply和call的用法只有一个地方不一样,除此之外,其他地方基本一模一样 1. a.call(b,arg1,arg2…) 2. ...

  7. BZOJ2839:集合计数(容斥,组合数学)

    Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007. ...

  8. Spark项目之电商用户行为分析大数据平台之(五)实时数据采集

  9. 非阻塞 sleep

    在OpenResty里面选择使用库的时候,有一个基本的原则:尽量使用ngx Lua的库函数,尽量不用Lua的库函数,因为Lua的库都是同步阻塞的. 再来一个例子来说明阻塞API的调用对nginx并发性 ...

  10. VC++定义全局变量及extern用法

    基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern有两 ...