Tornado之初学者(二)

2017-12-04 08:01:27来源:cnblogs.com作者:谷雨yun人点击

分享

三、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'

微信扫一扫

第七城市微信公众平台