三、tornado.web.Application 1、Application:tornado.web.Aplication新建一個應用,可通過直接實例化這個類或實例化它的子類來新建應用; 2、handlers:實例化時至少需要傳入參數handlers,handlers為元素為元組的列表,元組中第一 ...
三、tornado.web.Application
1、Application:tornado.web.Aplication新建一個應用,可通過直接實例化這個類或實例化它的子類來新建應用;
2、handlers:實例化時至少需要傳入參數handlers,handlers為元素為元組的列表,元組中第一個元素為路由,第二個元素為路由對應的RequestHandler處理類;路由為正則表達式,當正則表達式中有分組時,訪問時會將分組的結果當做參數傳入模板中;
3、settings:還有一個實例化時經常用到的參數settings,這個參數是一個字典:
①template_path:設置模板文件(HTML文件);
②static_path:設置靜態文件(如圖像、CSS文件、JavaScript文件等)的路徑;
③debug:設置成True時開啟調試模式,tornado會調用tornado.autoreload模塊,當Python文件被修改時,會嘗試重新啟動伺服器併在模板改變時刷新瀏覽器(在開發時使用,不要在生產中使用);
④ui_modules:設置自定義UI模塊,傳入一個模塊名(變數名)為鍵、類為值的字典,這個類為tornado.web.UIModule的子類,在HTML中使用{% module module_name %}時會自動包含module_name類中render方法返回的字元串(一般為包含HTML標簽內容的字元串),如果是HTML文件,返回的就是HTML模板中內容的字元串。
4、資料庫:可以在Application的子類中連接資料庫“self.db = database”,然後在每個RequestHandler中都可以使用連接的資料庫“db_name = self.application.db.database”。
1 # 定義了模板路徑和靜態文件路徑後,在使用到模板和靜態文件的地方就不需要逐一添加和修改了 2 settings = { 3 'template_path': os.path.join(os.path.dirname(__file__), 'templates'), 4 'static_path': os.path.join(os.path.dirname(__file__), 'static'), 5 'debug': True, 6 } 7 8 # 對應的RequestHandler類代碼未貼出來 9 app = tornado.web.Application( 10 handlers=[(r'/',MainHandler),
11 (r'/home', HomePageHandler),
12 (r'/demo/([0-9Xx\-]+)', DemoHandler), # 有分組時會將分組結果當參數傳入對應的模板中
13 ],
14 **settings
15 )
1 class Application(tornado.web.Application): 2 def __init__(self): 3 handlers = [ 4 (r'/', MainHandler), 5 (r'/demo/([0-9Xx\-]+)', DemoHandler), 6 ] 7 8 settings = dict( 9 template_path=os.path.join(os.path.dirname(__file__), 'templates'), 10 static_path=os.path.join(os.path.dirname(__file__), 'static'), 11 ui_modules={'Mymodule': Mymodule}, 12 debug=True, 13 ) 14 15 # 這裡使用的資料庫是MongoDB,Python有對應的三方庫pymongo作為驅動來連接MongoDB資料庫 16 conn = pymongo.MongoClient() 17 self.db = conn['demo_db'] 18 tornado.web.Application.__init__(self, handlers, **settings) 19 20 class DemoHandler(tornado.web.RequestHandler): 21 def get(self): 22 demo_db = self.application.db.demo_db # 直接使用連接的資料庫 23 sets = demo_db.find() 24 self.render( 25 'demo.html', 26 sets=sets, 27 ) 28 29 class Mymodule(tornado.web.UIModule): 30 def render(self): 31 return self.render_string('modules/mod.html',) 32 33 # 定義css文件路徑 34 def css_files(self): 35 return '/static/css/style.css' 36 37 # 定義js文件路徑 38 def javascript_files(self): 39 return '/static/js/jquery-3.2.1.js'