web.py開發web 第五章 視圖中使用sqlalchemy

    前兩章講了一些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修改以下。
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"。
相關文章
相關標籤/搜索