前兩章講了一些sqlalchemy的基礎使用,這一章要講的就是在視圖中調用sqlalchemy,同時這一章還要講下web.py的類視圖的一個使用技巧。
web.py支持中間件的設置,因此咱們先寫一個middleware.py來存放中間件。
middleware.py
python
# -*- coding: utf-8 -*- from models import * import web def set_orm(handler): #獲取sqlalchemy的session並存儲到web.ctx.orm中 web.ctx.orm = bindSQL() #執行視圖,若是出現異常回滾數據庫,正常結束則提交數據庫操做,最終刪除session try: return handler() except web.HTTPError: web.ctx.orm.rollback() raise except: web.ctx.orm.rollback() raise finally: web.ctx.orm.commit() web.ctx.orm.remove()而後在main.py中添加中間件,並定義基類引入sqlalchemy的session,將main.py修改以下。
#-*- coding:utf-8 -*- import web, middleware from web.contrib.template import render_jinja from models import * urls = ( "/", "index", ) app = web.application(urls, globals()) app.add_processor(middleware.set_orm) render = render_jinja( 'templates', encoding = 'utf-8', ) class BaseView(object): def __init__(self): #從web.ctx.orm獲取session放入基類的db中 self.db = web.ctx.orm class index(BaseView): def GET(self): #查詢user表並返回user的記錄數 query = self.db.query(User) return query.count() if __name__ == "__main__": app.run()這裏也許你會以爲定義self.db沒什麼意義,可是在不少時候,咱們要向第三方傳遞不少視圖中的信息,這時候只要將self傳遞過去,就什麼都有了。運行下main.py,若是你已經按照上一章完成了操做,那麼在這裏你會看到瀏覽器中輸出"1"。