tornado是乙個輕量級python的web框架,他是非阻塞式的,而且速度非常快.得利於其 非阻塞的方式和對 epoll 的運用,tornado 每秒可以處理數以千計的連線,這意味著對於實時 web 服務來說,tornado 是乙個理想的 web 框架。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tornado.ioloop
import tornado.web
class mainhandler(tornado.web.requesthandler):
def get(self):
self.write("hello, world")
(r"/index", mainhandler),
])if __name__ == "__main__":
tornado.ioloop.ioloop.instance().start()
tornado的路由系統其實就是 url 和 類 的對應關係,這裡不同於其他框架,其他很多框架均是 url 對應 函式,tornado中每個url對應的是乙個類。
(r"/index", mainhandler),
(r"/story/([0-9]+)", storyhandler),
]) (r'/index',newshandler),
])
tornado中原生支援二級網域名稱的路由tornado 的模板支援「控制語句」和「表達語句」,控制語句是使用 包起來的
例如 。
表達語句是使用 } 包起來的,
例如 }。
tornado控制語句和對應的 python 語句的格式基本完全相同。我們支援 if、for、while 和 try,這些語句邏輯結束的位置需要用 做標記。還通過 extends 和 block 語句實現了模板繼承。
在使用模板前需要在setting中設定模板路徑:"template_path" : "tpl"例如:
邏輯語句
-----------------------------------------
繼承母版
在這裡寫內容
-----------------------------------------
匯入固定的小組件
escape: tornado.escape.xhtml_escape 的別名
xhtml_escape: tornado.escape.xhtml_escape 的別名
url_escape: tornado.escape.url_escape 的別名
json_encode: tornado.escape.json_encode 的別名
squeeze: tornado.escape.squeeze 的別名
linkify: tornado.escape.linkify 的別名
datetime: python 的 datetime 模組
handler: 當前的 requesthandler 物件
request: handler.request 的別名
current_user: handler.current_user 的別名
locale: handler.locale 的別名
_: handler.locale.translate 的別名
static_url: for handler.static_url 的別名
xsrf_form_html: handler.xsrf_form_html 的別名
當然了,還可以自定義自己的功能
對於靜態檔案,可以配置靜態檔案的目錄和前段使用時的字首,並且tornaodo還支援靜態檔案快取。
在設定中寫上:
settings =
--------------------------------------------
前端使用
為避免出現字首修改後前端全部都要修改的情況,還可以用乙個方法,使前端可以自動生成路徑的字首
tornado中可以對cookie進行操作,並且還可以對cookie進行簽名以放置偽造。
self.set_cookie("mycookie", "myvalue")
'''設定cookie'''
self.set_secure_cookie("mycookie", "myvalue")
'''設定加密cookie'''
設定cookie的時候可以加時間戳引數expires=...,意為到這個時間cookie失效
或者expires_day=3,則過期時間是3天,同時設定的話expires優先順序更高
注意:設定加密cookie的時候,需在setting中設定加密簽名
settings =
--------------------------------------------
self.get_cookie('mycookie')
'''獲取cookie'''
self.get_secure_cookie('mycookie')
'''獲取加密cookie'''
簽名cookie的本質是:
寫cookie過程:
將值進行base64加密
對除值以外的內容進行簽名,雜湊演算法(無法逆向解析)
拼接 簽名 + 加密值
讀cookie過程:
讀取 簽名 + 加密值
對簽名進行驗證
base64解密,獲取值內容
tornado中的跨站請求偽造和django中的相似.
設定:
settings =
使用:
ajax使用就在本地獲取cookie,攜帶cookie傳送請求
_xsrf = getcookie("_xsrf")
裝飾器 + future 從而實現tornado的非同步非阻塞
class asynchandler(tornado.web.requesthandler):
@gen.coroutine
def get(self):
future = future()
future.add_done_callback(self.doing)
yield future
# 或# tornado.ioloop.ioloop.current().add_future(future,self.doing)
# yield future
def doing(self,*args, **kwargs):
self.write('async')
self.finish()
當傳送get請求時,由於方法被@gen.coroutine裝飾且yield 乙個 future物件,那麼tornado會等待,等待使用者向future物件中放置資料或者傳送訊號,如果獲取到資料或訊號之後,就開始執行doing方法。
非同步非阻塞體現在當在tornaod等待使用者向future物件中放置資料時,還可以處理其他請求。
注意:在等待使用者向future物件中放置資料或訊號時,此連線是不斷開的。
tornado中的請求的一切都可以在self.request中找到.
待定
tornado框架SQLAlchemy的操作
在用到python的一些框架裡,需要進行前後端資料互動,其中資料庫的連線是必不可少的,之前自己使用sqlalchemy在進行資料庫連線時遇到了很多問題,以及一些流程不是很清楚。所以花了點時間進行了一下流程梳理。1.首先建立乙個空py檔案 這裡命名為connect.py 匯入包 from sqlalc...
tornado框架介紹
tar xvzf tornado 1.2.1.tar.gz cd tornado 1.2.1 python setup.py build sudo python setup.py install 安裝要求 需要先安裝 python2.7 mac os x 10.6 python 2.6 sudo e...
python web框架之Tornado的簡單使用
python web框架有很多,比如常用的有django,flask等。今天主要介紹tornado tornado是乙個用python寫的相對簡單的 不設障礙的web伺服器架構,用以處理上萬的同時的連線口,讓實時的web服務通暢起來。雖然跟現在的一些用python寫的web架構相似,比如django...