Tornado之初学者(二)

python学习网 2017-12-04 00:54:02

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

 

阅读(779) 评论(0)