python龙卷风框架_WEB框架之Tornado

Tornado(龙卷风)和Django一样是Python中比较主流的web框架,Tornado 和现在的主流 Web 服务器框架也有着明显的区别:Tornado自带socket,并且实现了异步非阻塞并对WebSocket协议天然支持;

一、Tornado框架的基本组成

Tonado由 路由系统、视图、模板语言4大部分组成,如果习惯了使用Django你会感觉它功能单薄,但是只有这样才能足够轻量,如果用到什么功能就自己去GitHub上找现成的插件,或者自实现;以下将对这些基本组件进行逐一介绍。

Django功能概览:

socket:有

中间件:无(使用Python的wsgiref模块)

路由系统:有

视图函数:有

ORM操作:有

模板语言:有

simple_tag:有

cokies:有

session:有

csrf:有

xss:有

其他:缓存、信号、Form组件、ModelFormm、Admin

tornado功能概览:

socket:有(异步非阻塞、支持WebScoket)

路由系统:有

视图函数:有

静态文件:有

ORM操作:无

模板语言:有

simple_tag:有,uimethod,uimodule

cokies:有

session:无

csrf:有

xss:有

其他:无

Django和Tonado功能对比

二、Tornado自带功能

1、Tornado执行流程

#准备安装Tornado: pip install tornado

importtornado.ioloopimporttornado.webclass MainHandler(tornado.web.RequestHandler): #注意继承RequestHandler 而不是redirectHandler

defget(self):

self.write('hellow ,world')

application=tornado.web.Application([

(r'/index/',MainHandler) #路由

])if __name__ == '__main__':

application.listen(8888) #创建1个socket对象

tornado.ioloop.IOLoop.instance().start() #conn,addr=socket.accept()进入监听状态

View Code

第一步:执行脚本,监听 8888 端口

第二步:浏览器客户端访问 /index  -->  http://127.0.0.1:8888/index/

第三步:服务器接受请求,并交由对应的类处理该请求

第四步:类接受到请求之后,根据请求方式(post / get / delete ...)的不同调用并执行相应的方法

第五步:方法返回值的字符串内容发送浏览器

配置文件:

setings={'template_path':'templates',#配置模板路径

'static_path':'static', #配置静态文件存放的路径

'static_url_prefix':'/zhanggen/', #在模板中引用静态文件路径时使用的别名 注意是模板引用时的别名

"xsrf_cookies": True, #使用xsrf认证

'cookie_secret' :'xsseffekrjewkhwy'#cokies加密时使用的盐

}

application=tornado.web.Application([

(r'/login/',LoginHandler) ,#参数1 路由系统

(r'/index/',IndexHandler) ,#参数1 路由系统

],**setings #参数2 配置文件

)

View Code

2、路由系统

2.1、动态路由(url传参数)

app=tornado.web.Application(

[

(r'^/index/$',MainHandler),

(r'^/index/(\d+)$',MainHandler), #url传参

]

)

View Code

2.2、域名匹配

#支持域名匹配 www.zhanggen.com:8888/index/333333

app.add_handlers('www.zhanggen.com',[

(r'^/index/$', MainHandler),

(r'^/index/(\d+)$', MainHandler),

])

View Code

2.3、反向生成url

app.add_handlers('www.zhanggen.com',[

(r'^/index/$', MainHandler,{},"name1"), #反向生成url

(r'^/index/(\d+)$', MainHandler,{},"name2"),

])

路由

classMainHandler(tornado.web.RequestHandler):def get(self,*args,**kwargs):

url1=self.application.reverse_url('name1')

url2= self.application.reverse_url('name2', 666)print(url1,url2)

self.write('hello word')

视图

3、视图

tornado的视图才有CBV模式,url匹配成功之后先  视图执行顺序为initialize 、prepare、get/post/put/delete、finish;

importtornado.ioloopimporttornado.webclassMainHandler(tornado.web.RequestHandler):def initialize(self): #1

print()defprepare(self):pass

def get(self,*args,**kwargs):

self.write('hello word')def post(self, *args, **kwargs):pass

def finish(self, chunk=None):passsuper(self,MainHandler).finish()

View Code

3.1、请求相关

self.get_body_argument('user') :获取POST请求携带的参数

self.get_body_arguments('user_list') :获取POST请求参数列表(如chebox标签和select多选)

self.request.body.decode('utf-8'):获取json数据

self.get_query_argument('user') :获取GET请求携带的参数

self.get_query_arguments('user_list') :获取GET请求参数列表(如chebox标签和select多选)

self.get_argument('user') :获取GET和POST请求携带的参数

self.get_arguments('user_list'):获取GET和POST请求参数列表(如chebox标签和select多选)

注:以上取值方式如果取不到值就会报错,可以设置取不到值就取None;(例如 self.get_argument('user',None))

3.2、响应相关

self.write() :响应字符串

self.render():响应页面

self.redirect():页面跳转

4、模板语言

tornado的模板语言和Python语法一致

View Code

4.1、登录页面

#准备安装Tornado: pip install tornado

importtornado.ioloopimporttornado.webclass LoginHandler(tornado.web.RequestHandler): #注意继承RequestHandler 而不是redirectHandler

defget(self):

self.render('login.html')

setings={'template_path':'templates',#配置模板路径

'static_path':'static', #配置静态文件存放的路径

'static_url_prefix':'/zhanggen/' #在模板中引用静态文件路径时使用的别名 注意是模板引用时的别名

}

application=tornado.web.Application([

(r'/login/',LoginHandler) #参数1 路由系统

],**setings #参数2 配置文件

)if __name__ == '__main__':

application.listen(8888) #创建1个socket对象

tornado.ioloop.IOLoop.instance().start() #conn,addr=socket.accept()进入监听状态

View Code

Title

用户名

密码

提交

模板语言

4.2、引入静态文件

通过别名引入静态文件

static_url()方式引入静态文件

通过static_url()方法引入静态文件的好处:

1、使用static_url()可以不用考虑静态文件修改之后造成引用失效的情况;

2、还会生成静态文件url会有一个v=...的参数,这是tornado根据静态文件MD5之后的值,如果后台的静态文件修改,这个值就会变化,前端就会重新向后台请求静态文件,保证页面实时更新,不引用浏览器缓存;

4.3、上下文对象

如果模板语言中声明了变量,上下文对象必须对应传值,如果没有就设置为空,否则会报错;

self.render('login.html',**{'erro_msg':'' }) #模板中声明了变量,视图必须传值,如果没有就设置为空;

View Code

5、xsrf_tocken认证

setings={'template_path':'templates',#配置模板路径

'static_path':'static', #配置静态文件存放的路径

'static_url_prefix':'/zhanggen/', #在模板中引用静态文件路径时使用的别名 注意是模板引用时的别名

"xsrf_cookies": True, #使用xsrf认证

}

配置文件setings={"xsrf_cookies": True, }

Title

{%raw xsrf_form_html() %}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值