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(80) 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>
posted on 2018-12-29 15:50 it_man_xiangge 阅读(274) 评论(0) 编辑 收藏 举报