摘要:而這里的方法則是告訴來讀取模板文件,并將結果返回給瀏覽器。依舊可以使用,等條件控制語句,但是要記得以結尾。替換字符串中的字符為編碼形式。模塊模塊是封裝模板中包含的標記樣式以及行為的可復用組件。
表單和模板
import os.path import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler): def get(self): self.render("index.html") class PoemPageHandler(tornado.web.RequestHandler): def post(self): noun1 = self.get_argument("noun1") noun2 = self.get_argument("noun2") verb = self.get_argument("verb") noun3 = self.get_argument("noun3") self.render("poem.html", roads=noun1, wood=noun2, made=verb, difference=noun3) if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application( handlers=[(r"/", IndexHandler), (r"/poem", PoemPageHandler)], template_path=os.path.join(os.path.dirname(__file__), "templates") ) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
這個表單包括了多個文本,其中的內容在用戶點擊提交之后以POST請求的方式發(fā)送到/poem。Tornado為了響應這個請求會自動跳到poem.html,并且插入你在表單中填寫的值。
渲染摸板這和我在第一章里看到的例子差不多RequestHandler傳給tornado.web.Application對象。但是還是有區(qū)別的,首先是傳遞了一個template_path參數(shù)。template_path參數(shù)告訴Tornado在哪里尋找模板文件。而這里的self.render()方法則是告訴Tornado來讀取模板文件,并將結果返回給瀏覽器。
然而這里的index.html并不完整,它的確是一個已經寫好的HTML標記,但是一般情況下我們會輸出我們所希望HTML結合程序傳入給模板的值。{{}}所括起來的字符串,括起來的字符串就是占位符,我們在渲染模板的時候會希望以實際的值代替。這里還是可以通過render()函數(shù)傳遞所希望表達出來的關鍵字參數(shù)。例如這里的:
self.render("poem.html", roads=noun1, wood=noun2, made=verb, difference=noun3)
這里就告訴模板我們將傳入的參數(shù)。
這里的{{}}可以填充任意的Python表達式:
>>> from tornado.template import Template >>> print Template("{{2+3}}").generate() 5 >>> print Template({{"gogogojuststudy"[-5:]}}").generate() study >>>
同樣可以在Tornado模板中使用條件和循環(huán)語句??刂普Z句以{% %}包圍。
一般以{%if condition%}。依舊可以使用for,while等條件控制語句,但是要記得以{%end %}結尾。
這里有其他的一些默認提供的一些便利的函數(shù):
escape() #替換字符串中的&、為他們對應的HTML字符
url_escape() #使用urlib。quote_plus替換字符串s中的字符為URL編碼形式。
squeeze() #過濾字符串,把連續(xù)的多個空白字符替換成一個空格模板擴展
Tornado可以方便我們擴展一個已經存在的模板,只需要在新的模板文件頂部放上{%extends “filename.html”%}這里便是使得新的HTML文件繼承了父HTML文件的所有標簽。
這里我們就需要用到塊了,block語句可以幫助我們改變一些模板元素。每個{%block %}對應一個{% end%}。
UI模塊是封裝模板中包含的標記、樣式以及行為的可復用組件。它所定義的元素通常用于多個模板交叉復 用或在同一個模板中重復使用。模塊本身是一個繼承自Tornado的UIModule類的簡單Python類,并定義 了一個render()方法。
import tornado.web import tornado.httpserver import tornado.ioloop import tornado.options import os.path from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class HelloHandler(tornado.web.RequestHandler): def get(self): self.render("hello.html") class HelloModule(tornado.web.UIModule): def render(self): return "Hello, world!
" if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application( handlers=[(r"/", HelloHandler)], template_path=os.path.join(os.path.dirname(__file__), "templates"), ui_modules={"Hello": HelloModule} ) server = tornado.httpserver.HTTPServer(app) server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
這個例子里ui_module字典里只有一項,這里把名為Hello模塊的引用和定義的HELLOMODULE結合起來。當我們調用HelloHandler并渲染hello.html時,可以使用{% module Hello()%}模板標簽來包含HelloModule中render()方法返回的字符串。
例如在這里:
UI Module Example {% module Hello() %}
這里通過模板標簽自身的位置調用HelloModule返回的字符串進行填充。
嵌入JavaScript和CSS為了給這些模塊提供更高的靈活性,Tornado允許你使用embedded_css和embedded_javascript方法嵌 入其他的CSS和JavaScript文件
不僅僅是可以返回一個JavaScript和CSS規(guī)則,而且更加靈活的是在閉合的標簽前添加完整的HTML標記。
你可以使用javascript_files()和css_files()來 包含完整的文件,不論是本地的還是外部的。
def css_files(self): return "/static/css/newreleases.css"
def javascript_files(self): return"https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js"
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/37646.html
摘要:對參數(shù)類型進行檢驗,這里為當參數(shù)類型不合適是會拋出一個異常。將使用的第二個參數(shù)值作為默認值。而請求將從格式中取得指定的文本。這里需要正則表達式相關的知識,到了后面的學習中,必要時再去深入學習。到目前我們使用了,還支持任何合法的請求。 參考書籍《Introduction to Tornado》1.1 Tornado是什么?Tornado是使用Python編寫的一個強大的、可擴展的Web服...
摘要:首先是的請求接著是的請求在本次分享中,我們介紹了的請求,包括請求,并將介紹如何使用和來測試該本次分享到此結束,歡迎大家交流 ??Tornado是現(xiàn)在的主流 Web 服務器框架,它與大多數(shù) Python 的框架有著明顯的區(qū)別:它是非阻塞式服務器,而且速度相當快。得利于其非阻塞的方式和對 epoll 的運用,Tornado 每秒可以處理數(shù)以千計的連接,這意味著對于實時 Web 服務來說,T...
摘要:學習筆記七數(shù)學形態(tài)學關注的是圖像中的形狀,它提供了一些方法用于檢測形狀和改變形狀。學習筆記十一尺度不變特征變換,簡稱是圖像局部特征提取的現(xiàn)代方法基于區(qū)域圖像塊的分析。本文的目的是簡明扼要地說明的編碼機制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開始之前,我們先來看這樣一個提問: pyth...
摘要:從的開始分析的源碼很容易可以看出,通過繼承類定義自己的處理類,來處理請求。類的對象來處理的路由將于處理類組成,關聯(lián)起來。調用的來將和綁定在一起初始化一個的對象,由其來處理請求的路由,來利用建立的規(guī)則。 從tornado的 Hello,world 開始分析tornado的源碼 pythonimport tornado.ioloop import tornado.web class M...
閱讀 1213·2021-11-17 09:33
閱讀 3623·2021-09-28 09:42
閱讀 3353·2021-09-13 10:35
閱讀 2512·2021-09-06 15:00
閱讀 2456·2021-08-27 13:12
閱讀 3620·2021-07-26 23:38
閱讀 1864·2019-08-30 15:55
閱讀 550·2019-08-30 15:53