01-options
在前面的示例中我們都是將服務端口的參數寫死在程序中,很不靈活。
tornado爲我們提供了一個便捷的工具,tornado.options模塊——全局參數定義、存儲、轉換。
02-tornado.options.define()
用來定義options選項變量的方法,定義的變量可以在全局的tornado.options.options中獲取使用,傳入參數:
name 選項變量名,須保證全局唯一性,否則會報“Option ‘xxx’ already defined in …”的錯誤;
default 選項變量的默認值,如不傳默認爲None;
type 選項變量的類型,從命令行或配置文件導入參數的時候tornado會根據這個類型轉換輸入的值,轉換不成功時會報錯,可以是str、float、int、datetime、timedelta中的某個,若未設置則根據default的值自動推斷,若default也未設置,那麼不再進行轉換。可以通過利用設置type類型字段來過濾不正確的輸入。
multiple 選項變量的值是否可以爲多個,布爾類型,默認值爲False,如果multiple爲True,那麼設置選項變量時值與值之間用英文逗號分隔,而選項變量則是一個list列表(若默認值和輸入均未設置,則爲空列表[])。
help 選項變量的幫助提示信息,在命令行啓動tornado時,通過加入命令行參數 –help 可以查看所有選項變量的信息(注意,代碼中需要加入tornado.options.parse_command_line())。
03-tornado.options.options
全局的options對象,所有定義的選項變量都會作爲該對象的屬性。
04-tornado.options.parse_command_line()
轉換命令行參數,並將轉換後的值對應的設置到全局options對象相關屬性上。追加命令行參數的方式是–myoption=myvalue
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options # 新導入的options模塊
tornado.options.define("port", default=8000, type=int, help="run server on the given port.") # 定義服務器監聽端口選項
class IndexHandler(tornado.web.RequestHandler):
"""主路由處理類"""
def get(self):
"""對應http的get請求方式"""
self.write("Hello Python Tornado!")
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application([
(r"/", IndexHandler),
])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(tornado.options.options.port)
tornado.ioloop.IOLoop.current().start()
05-tornado.options.parse_config_file(path)
從配置文件導入option,配置文件中的選項格式如下:
myoption = “myvalue”
myotheroption = “myothervalue”
在使用prase_config_file()的時候,配置文件的書寫格式仍需要按照python的語法要求,其優勢是可以直接將配置文件的參數轉換設置到全局對象tornado.options.options中;然而,其不方便的地方在於需要在代碼中調用tornado.options.define()來定義選項,而且不支持字典類型,故而在實際應用中大都不使用這種方法。
在使用配置文件的時候,通常會新建一個python文件(如config.py),然後在裏面直接定義python類型的變量(可以是字典類型);在需要配置文件參數的地方,將config.py作爲模塊導入,並使用其中的變量參數。
06-日誌
當我們在代碼中調用parse_command_line()或者parse_config_file()的方法時,tornado會默認爲我們配置標準logging模塊,即默認開啓了日誌功能,並向標準輸出(屏幕)打印日誌信息。
如果想關閉tornado默認的日誌功能,可以在命令行中添加–logging=none 或者在代碼中執行如下操作:
from tornado.options import options, parse_command_line
options.logging = None
parse_command_line()