当前位置:   article > 正文

web.py开发web 第五章 视图中使用sqlalchemy

怎么样用视图函数调用sqlalchemy

    前两章讲了一些sqlalchemy的基础使用,这一章要讲的就是在视图中调用sqlalchemy,同时这一章还要讲下web.py的类视图的一个使用技巧。
    web.py支持中间件的设置,所以我们先写一个middleware.py来存放中间件。
middleware.py

  1. # -*- coding: utf-8 -*-
  2. from models import *
  3. import web
  4. def set_orm(handler):
  5. #获取sqlalchemy的session并存储到web.ctx.orm中
  6. web.ctx.orm = bindSQL()
  7. #执行视图,如果出现异常回滚数据库,正常结束则提交数据库操作,最终删除session
  8. try:
  9. return handler()
  10. except web.HTTPError:
  11. web.ctx.orm.rollback()
  12. raise
  13. except:
  14. web.ctx.orm.rollback()
  15. raise
  16. finally:
  17. web.ctx.orm.commit()
  18. web.ctx.orm.remove()
     然后在main.py中添加中间件,并定义基类引入sqlalchemy的session,将main.py修改如下。
main.py
  1. #-*- coding:utf-8 -*-
  2. import web, middleware
  3. from web.contrib.template import render_jinja
  4. from models import *
  5. urls = (
  6. "/", "index",
  7. )
  8. app = web.application(urls, globals())
  9. app.add_processor(middleware.set_orm)
  10. render = render_jinja(
  11. 'templates',
  12. encoding = 'utf-8',
  13. )
  14. class BaseView(object):
  15. def __init__(self):
  16. #从web.ctx.orm获取session放入基类的db中
  17. self.db = web.ctx.orm
  18. class index(BaseView):
  19. def GET(self):
  20. #查询user表并返回user的记录数
  21. query = self.db.query(User)
  22. return query.count()
  23. if __name__ == "__main__":
  24. app.run()
    这里也许你会觉得定义self.db没什么意义,但是在很多时候,我们要向第三方传递很多视图中的信息,这时候只要将self传递过去,就什么都有了。运行下main.py,如果你已经按照上一章完成了操作,那么在这里你会看到浏览器中输出"1"。

转载于:https://my.oschina.net/zhengnazhi/blog/120849

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/527481
推荐阅读
相关标签
  

闽ICP备14008679号