Tornado 框架的使用

2022-05-04 12:12:12 字數 3809 閱讀 1301

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...