Tornado 是一個Python web框架和異步網(wǎng)絡(luò)庫 起初由 FriendFeed 開發(fā). 通過使用非阻塞網(wǎng)絡(luò)I/O, Tornado 可以支持上萬級的連接,處理 長連接, WebSockets, 和其他 需要與每個用戶保持長久連接的應(yīng)用.
站在用戶的角度思考問題,與客戶深入溝通,找到福安網(wǎng)站設(shè)計與福安網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋福安地區(qū)。
- web框架 (包括創(chuàng)建web應(yīng)用的 RequestHandler 類,還有很多其他支持的類).
- HTTP的客戶端和服務(wù)端實現(xiàn) (HTTPServer and AsyncHTTPClient).
- 異步網(wǎng)絡(luò)庫 (IOLoop and IOStream), 為HTTP組件提供構(gòu)建模塊,也可以用來實現(xiàn)其他協(xié)議.
- 協(xié)程庫 (tornado.gen) 允許異步代碼寫的更直接而不用鏈?zhǔn)交卣{(diào)的方式.
pip install tornado
?
?
- Application 對象是負(fù)責(zé)全局配置的, 包括映射請求轉(zhuǎn)發(fā)給處理程序的路由 表.
路由表是 URLSpec 對象(或元組)的列表, 其中每個都包含(至少)一個正則 表達(dá)式和一個處理類. 順序問題; 第一個匹配的規(guī)則會被使用. 如果正則表達(dá) 式包含捕獲組, 這些組會被作為 路徑參數(shù) 傳遞給處理函數(shù)的HTTP方法. 如果一個字典作為 URLSpec 的第三個參數(shù)被傳遞, 它會作為 初始參數(shù) 傳遞給 RequestHandler.initialize. 最后 URLSpec 可能有一個名字 , 這將允許它被 RequestHandler.reverse_url 使用.
?
- Tornado web 應(yīng)用程序的大部分工作是在 RequestHandler 子類下完成的. 處理子類的主入口點是一個命名為處理HTTP方法的函數(shù): get(), post(), 等等. 每個處理程序可以定義一個或者多個這種方法來處理不同 的HTTP動作. 如上所述, 這些方法將被匹配路由規(guī)則的捕獲組對應(yīng)的參數(shù)調(diào)用.
- 在處理程序中, 調(diào)用方法如 RequestHandler.render 或者 RequestHandler.write 產(chǎn)生一個響應(yīng). render() 通過名字加載一個 Template 并使用給定的參數(shù)渲染它. write() 被用于非模板基礎(chǔ)的輸 出; 它接受字符串, 字節(jié), 和字典(字典會被編碼成JSON).
- 在 RequestHandler 中的很多方法的設(shè)計是為了在子類中復(fù)寫和在整個應(yīng)用 中使用. 常用的方法是定義一個 BaseHandler 類, 復(fù)寫一些方法例如 write_error 和 get_current_user 然后子類繼承使用你自己的 BaseHandler 而不是 RequestHandler 在你所有具體的處理程序中.
?
?
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world。你好世界!!!")
class Index(tornado.web.RequestHandler):
def get(self):
self.write("這是一個首頁")
class Redirect(tornado.web.RequestHandler):
def get(self):
'''重定向'''
# self.redirect(r"/") # 重定向到根目錄
self.redirect(r"http://baidu.com") # 重定向到百度
class Error(tornado.web.RequestHandler):
def get(self):
'''設(shè)置網(wǎng)頁狀態(tài)500'''
self.set_status(500) # 頁面返回500狀態(tài)
class Pic(tornado.web.RequestHandler):
def get(self):
'''圖片'''
self.write('')
def make_app():
'''
tornado.web.Application([(網(wǎng)址1),(網(wǎng)址2)]) 根據(jù)路徑修改網(wǎng)址內(nèi)容
debug=True 報告異常信息
write_error(參數(shù)1:錯誤頁,參數(shù)2:錯誤異常提示消息) 異常處理
set_status(狀態(tài)信息) 設(shè)置響應(yīng)狀態(tài)信息
redirect() 重定向處理
get_current_user() 獲取用戶信息進(jìn)行用戶驗證
異步處理:
方式一:裝飾器
方式二:異步調(diào)用
'''
return tornado.web.Application([
(r"/", MainHandler),
(r"/index", Index),
(r"/redirect", Redirect),
(r"/error", Error),
(r"/pic", Pic),
],
debug=True) #'debug=True 作用:代碼有更新時 自動重啟
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
可以看見會根據(jù)Application里定義的路徑調(diào)用路徑
?
?
?
?
?
?