国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

tronado學習

2019-11-14 17:28:47
字體:
來源:轉載
供稿:網友

請求處理程序和請求參數:

原創首發:http://www.survivalescaperooms.com/zxlovenet/p/4128644.html

程序將URL映射到tornado.web.RequestHandler的子類上去。
# code 1class MainHandler(tornado.web.RequestHandler):   def get(self):       self.write("You requested the main page") class StoryHandler(tornado.web.RequestHandler):   def get(self, story_id):       self.write("You requested the story " + story_id) application = tornado.web.Application([   (r"/", MainHandler),   (r"/story/([0-9]+)", StoryHandler),])
get_argument() 方法獲取查詢字符串參數。
self.request.files 可以訪問上傳文件。
在繼承類中通過 self.request.arguments.items() 方法獲取所有返回對象。
 
重寫RequestHandler的方法函數:
程序調用 initialize() 函數,這個函數的參數是 Application 配置中的關鍵字 參數定義。initialize 方法一般只是把傳入的參數存 到成員變量中,而不會產生一些輸出或者調用像 send_error 之類的方法。
程序調用 PRepare()。無論使用了哪種 HTTP 方法,prepare 都會被調用到,因此 這個方法通常會被定義在一個基類中,然后在子類中重用。prepare可以產生輸出 信息。如果它調用了finish(或send_error` 等函數),那么整個處理流程 就此結束。
程序調用某個 HTTP 方法:例如 get()、post()、put() 等。如果 URL 的正則表達式模式中有分組匹配,那么相關匹配會作為參數傳入方法,見下圖:
 
見 code 1,RequestHandler中一些方法函數需要在其子類中重新定義。
# handler/base.py
 
get_current_user()    # 處理獲得當前用戶
 
重定向:
通過 self.redirect 或 RedirectHandler 。
application = tornado.wsgi.WSGIApplication([   (r"/([a-z]*)", ContentHandler),   (r"/static/tornado-0.2.tar.gz", tornado.web.RedirectHandler,    dict(url="http://github.com/downloads/facebook/tornado/tornado-0.2.tar.gz")),], **settings)
 
模板支持 {% 控制語句 %}、{{ 表達式 }}
可以通過 extends 和 block 實現模板繼承。
 
 
Cookie和Cookie安全:
通過下面方式加強安全性
class MainHandler(tornado.web.RequestHandler):   def get(self):       if not self.get_secure_cookie("mycookie"):           self.set_secure_cookie("mycookie", "myvalue")           self.write("Your cookie was not set yet!")       else:           self.write("Your cookie was set!") application = tornado.web.Application([   (r"/", MainHandler),], cookie_secret="61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=")

 

另一種配置寫法:
class MainHandler(BaseHandler):   @tornado.web.authenticated   def get(self):       name = tornado.escape.xhtml_escape(self.current_user)       self.write("Hello, " + name) settings = {   "cookie_secret": "61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=",   "login_url": "/login",}application = tornado.web.Application([   (r"/", MainHandler),   (r"/login", LoginHandler),], **settings)

 

@tornado.web.authenticated    # 用于用戶認證
cookie_secret    # 用于加密cookie
login_url    # 記錄重定向地址
xsrf_cookies    # 開關XSRF防范機制
 
靜態文件和主動式文件緩存:
"static_path": os.path.join(os.path.dirname(__file__), "static")
static_url() 函數會將相對地址轉成一個類似于 /static/images/logo.png?v=aae54 的 URI,v 參數是 logo.png 文件的散列值, Tornado 服務器會把它發給瀏覽器,并以此為依據讓瀏覽器對相關內容做永久緩存。
由于 v 的值是基于文件的內容計算出來的,如果你更新了文件,或者重啟了服務器 ,那么就會得到一個新的 v 值,這樣瀏覽器就會請求服務器以獲取新的文件內容。 如果文件的內容沒有改變,瀏覽器就會一直使用本地緩存的文件,這樣可以顯著提高頁 面的渲染速度。
 
本地化:
 
UI模塊:
class HomeHandler(tornado.web.RequestHandler):   def get(self):       entries = self.db.query("SELECT * FROM entries ORDER BY date DESC")       self.render("home.html", entries=entries) class EntryHandler(tornado.web.RequestHandler):   def get(self, entry_id):       entry = self.db.get("SELECT * FROM entries WHERE id = %s", entry_id)       if not entry: raise tornado.web.HTTPError(404)       self.render("entry.html", entry=entry) settings = {   "ui_modules": uimodules,}application = tornado.web.Application([   (r"/", HomeHandler),   (r"/entry/([0-9]+)", EntryHandler),], **settings){% module Entry(entry, show_comments=True) %}

 

非阻塞式異步請求:
 Tornado 當中使用了 一種非阻塞式的 I/O 模型,所以你可以改變這種默認的處理行為——讓一個請求一直保持 連接狀態,而不是馬上返回,直到一個主處理行為返回。要實現這種處理方式,只需要 使用 tornado.web.asynchronous 裝飾器就可以了。
 
調試模式和自動重載:
如果你將 debug=True 傳遞給 Application 構造器,該 app 將以調試模式 運行。在調試模式下,模板將不會被緩存,而這個 app 會監視代碼文件的修改, 如果發現修改動作,這個 app 就會被重新加載。在開發過程中,這會大大減少 手動重啟服務的次數。然而有些問題(例如 import 時的語法錯誤)還是會讓服務器 下線,目前的 debug 模式還無法避免這些情況。
 



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武功县| 安宁市| 建昌县| 哈密市| 赤壁市| 十堰市| 靖州| 囊谦县| 西贡区| 怀来县| 哈巴河县| 佛教| 宜兰市| 蓝田县| 鄄城县| 沁水县| 溧水县| 宝兴县| 肇州县| 大邑县| 特克斯县| 浦城县| 云安县| 喀喇| 柳林县| 鄂托克前旗| 淳安县| 大荔县| 龙里县| 郁南县| 乌拉特中旗| 城市| 连州市| 左云县| 西华县| 白玉县| 万盛区| 宜州市| 鄂托克旗| 大冶市| 阜城县|