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应用程序中,模板到底是怎样使用?怎样被渲染? ...
随机推荐
- 异常System.BadImageFormatException
[问题描述] Server Error in '/' Application. Could not load file or assembly 'WebDemo' or one of its depe ...
- UNIX高级环境编程(11)进程控制(Process Control)- 进程快照,用户标识符,进程调度
1 进程快照(Process Accounting) 当一个进程终止时,内核会为该进程保存一些数据,包括命令的小部分二进制数据.CPU time.启动时间.用户Id和组Id.这样的过程称为proces ...
- Linux 中 FQDN 查询及设置
FQDN:(Fully Qualified Domain Name)全限定域名:同时带有主机名和域名的名称 其实就是标注一个主机的完整域名.比如我的域名为 ifrom.top 那么它的邮件服务器的主机 ...
- extern “C”的作用详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码.加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C+ ...
- SecureCRT Win免安装版本,简单好用
SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件. 这个简单好用,程序员必备. 下载地址:SecureCRT. ...
- angularjs ngRoute和ui.router对比
ngRoute模块是angularjs自带的路由模块,ui.router是一个第三方路由模块,接下来将对两者进行一个对比: ng-router(angular-router.js) ng-view n ...
- python创建目录保存文件
创建目录 在Python中可以使用os.mkdir()函数创建目录(创建一级目录). 其原型如下所示: os.mkdir(path) 其参数path 为要创建目录的路径. 例如要在D盘下创建hello ...
- PHP常用算法和数据结构示例
<?php header("content-type:text/html;charset=utf-8"); $arr=array(3,5,8,4,9,6,1,7,2); ec ...
- 运行metamascara时出现的一些错误
The difference between mascara and the extension Mascara Is in alpha and some of it's behaviors are ...
- CentOS中配置Kafka集群
环境:三台虚拟机Host0,Host1,Host2 Host0:192.168.10.2 Host1: 192.168.10.3 Host2: 192.168.10.4 在三台虚拟机上配置zook ...