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'
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学习笔记的更多相关文章
- tornado 学习笔记1 引言
从事软件开发这行业也快5年啦,其实从事的工作也不完全是软件开发,软件开发只是我工作中的一部分.其中包括课题研究.信息化方案设计.软件开发.信息系统监理.项目管理等工作,比较杂乱.开发的软件比较多,但是 ...
- Tornado学习笔记(一) helloword/多进程/启动参数
前言 当你觉得你过得很舒服的时候,你肯定没有在进步.所以我想学习新的东西,然后选择了Tornado.因为我觉得Tornado更匹配目前的我的综合素质. Tornado学习笔记系列主要参考<int ...
- tornado 学习笔记2 Python web主流框架
2.1 Django 官方网址:https://www.djangoproject.com/ 简介:Django is a high-level Python Web framework that e ...
- Tornado学习笔记(三) 请求方式/状态码
本章我们来学习 Tornado 支持的请求方式 请求方式 Tornado支持任何合法的HTTP请求(GET.POST.PUT.DELETE.HEAD.OPTIONS).你可以非常容易地定义上述任一种方 ...
- Tornado学习笔记(二) 路由/post/get传参
本章我们学习 Tornado 的路由传参等问题 路由 路由的匹配 Tornado的路由匹配采用的是正则匹配 一般情况下不需要多复杂的正则,正则的基本规则如下(站长之家) 举个例子 (r'/sum/(\ ...
- tornado学习笔记19 Tornado框架分析
19.1 Http服务器请求处理流程图 (1) 调用HTTPServer的bind方法,绑定Socket的监听端口号: (2) 调用HTTPServer的listen方法,初始化一个listen so ...
- tornado学习笔记11 Web应用中模板(Template)使用应用实践
上一篇中(Web应用中模板的工作流程分析),已经分析了模板的渲染流程,以及相关参数获取及设置原理.这篇主要讲述模板在实际应用案例. 11.1 需求 根据用户输入的两次密码,判断两次密码是否一致,并将判 ...
- tornado 学习笔记15 _ServerRequestAdapter分析
继承于HTTPMessageDeletegate,是HTTPMessageDeletegate的一种实现,用于处理请求消息. 15.1 构造函数 def __init__(self, ser ...
- tornado 学习笔记9 Tornado web 框架---模板(template)功能分析
Tornado模板系统是将模板编译成Python代码. 最基本的使用方式: t = template.Template("<html>{{ myv ...
- tornado 学习笔记10 Web应用中模板(Template)的工作流程分析
第8,9节中,我们分析Tornado模板系统的语法.使用以及源代码中涉及到的相关类,而且对相关的源代码进行了分析.那么,在一个真正的Web应用程序中,模板到底是怎样使用?怎样被渲染? ...
随机推荐
- Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
新服务器搭建环境总是有很多问题.在安装MS SQL SERVER 2014 EXPRESS的时候提示无法安装成功,需要先安装 .NET Framework 3.5!但是新问题又来了,使用Windows ...
- teradata 数据定义
teradata 数据定义 创建表的可选项 是否允许记录重复 set 不允许记录重复 multiset 允许记录重复 数据保护 fallback fallback 使用fallbac ...
- Huawei vlan 配置及vlan 间通讯
Huawei Vlan配置及vlan 间通讯实例 组网需求:汇聚层交换机做为 PC 电脑的网关, PC3直连 SW2 属于 vlan 2,网关为 vlanif 2 接口地址192.168.2.1/24 ...
- java调用Linux执行Python爬虫,并将数据存储到elasticsearch--(环境脚本搭建)
java调用Linux执行Python爬虫,并将数据存储到elasticsearch中 一.以下博客代码使用的开发工具及环境如下: 1.idea: 2.jdk:1.8 3.elasticsearch: ...
- MySql详解(三)
MySql详解(三) 导入基础表 具体的SQL文件已经放入百度网盘,连接为:http://pan.baidu.com/s/1hseoVR2,后面的MySql内容都是按照这些基础表展开的. depart ...
- Math.min() / Math.max() 使用方法
首先弄懂apply 和 call 都是js函数自带的方法.区别如下: apply和call的用法只有一个地方不一样,除此之外,其他地方基本一模一样 1. a.call(b,arg1,arg2…) 2. ...
- BZOJ2839:集合计数(容斥,组合数学)
Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得它们的交集的元素个数为K,求取法的方案数,答案模1000000007. ...
- Spark项目之电商用户行为分析大数据平台之(五)实时数据采集
- 非阻塞 sleep
在OpenResty里面选择使用库的时候,有一个基本的原则:尽量使用ngx Lua的库函数,尽量不用Lua的库函数,因为Lua的库都是同步阻塞的. 再来一个例子来说明阻塞API的调用对nginx并发性 ...
- VC++定义全局变量及extern用法
基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern有两 ...