分享

帶著筆記學程式 ? Bottle SQLAlchemy Beaker 的節錄

 londonKu 2012-10-14

這裡是 pysimple-todo 裡的主代碼.
主要記錄一下如何使用 SQLAlchemy 的存取和整合 Beaker 到 Bottle 當中
同時也因為近日比較多 Simple Todo 的 Porting 所以就基於這東西實作了

詳細代碼可以到我的 GitHub 中取得

  1.  #!/usr/bin/env python
  2.  # -*- coding: utf-8 -*-
  3.  
  4.  import os, sys, model, message
  5.  from bottle import debug, route, run, template, static_file, request, redirect, default_app
  6.  from sqlalchemy.orm import relation, sessionmaker
  7.  
  8.  # Load session middleware
  9.  sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'library'))
  10.  from beaker.middleware import SessionMiddleware
  11.  
  12.  # Const variable
  13.  TITLE = "Simple Todo"
  14.  WWW_ROOT = os.path.abspath(os.path.dirname(__file__))
  15.  
  16.  # ORM session
  17.  session_marker = sessionmaker(bind=model.engine)
  18.  orm_session = session_marker()
  19.  
  20.  # Index
  21.  @route('/')
  22.  def index():
  23.      todos = orm_session.query(model.Todo).order_by('-id')
  24.  
  25.      return template("index", title=TITLE, todos=todos, flush_message=message.flush_message())
  26.  
  27.  # Create
  28.  @route('/new', method='POST')
  29.  def new():
  30.      name = request.forms.get("name").decode("utf-8");
  31.     
  32.      if len(name) > 0:
  33.          record = model.Todo(topic=name, status=False)
  34.          orm_session.add(record)
  35.          orm_session.commit()
  36.         
  37.          message.success(u"新增事項成功")
  38.      else:
  39.          message.error(u"沒有輸入項目")
  40.         
  41.      redirect("/")
  42.         
  43.  # Delete
  44.  @route('/delete/:id')
  45.  def delete(id):
  46.      todo = orm_session.query(model.Todo).filter_by(id=id).first()
  47.     
  48.      if todo:
  49.          orm_session.delete(todo)
  50.          orm_session.commit()
  51.         
  52.          message.success(u"刪除事項成功")
  53.      else:
  54.          message.error(u"找不到記錄")
  55.  
  56.      redirect("/")
  57.     
  58.  # Finish
  59.  @route('/finish/:id')
  60.  def finish(id):
  61.      todo = orm_session.query(model.Todo).filter_by(id=id).first()
  62.     
  63.      if todo:
  64.          orm_session.query(model.Todo).filter_by(id=id).update({
  65.              model.Todo.status: True
  66.          })
  67.          orm_session.commit()
  68.         
  69.          message.success(u"完成事項成功")
  70.      else:
  71.          message.error(u"找不到記錄")
  72.  
  73.      redirect("/")
  74.     
  75.  # Unfinish
  76.  @route('/unfinish/:id')
  77.  def unfinish(id):
  78.      todo = orm_session.query(model.Todo).filter_by(id=id).first()
  79.     
  80.      if todo:
  81.          orm_session.query(model.Todo).filter_by(id=id).update({
  82.              model.Todo.status: False
  83.          })
  84.          orm_session.commit()
  85.         
  86.          message.success(u"恢復事項成功")
  87.      else:
  88.          message.error(u"找不到記錄")
  89.         
  90.      redirect("/")
  91.     
  92.  # Edit
  93.  @route('/edit/:id')
  94.  def edit(id):
  95.      todo = orm_session.query(model.Todo).filter_by(id=id).first()
  96.     
  97.      if todo:
  98.          return template("edit", title=TITLE, todo=todo, flush_message=message.flush_message())
  99.      else:
  100.          message.error(u"找不到記錄")
  101.          redirect("/")
  102.  
  103.  @route('/save', method="POST")
  104.  def save():
  105.      id = request.forms.get("id").decode("utf-8");
  106.      name = request.forms.get("name").decode("utf-8");
  107.  
  108.      if id is None or id == "":
  109.          message.error(u"找不到記錄")
  110.      elif len(name) < = 0:
  111.          message.error(u"沒有輸入項目")
  112.      else:
  113.          todo = orm_session.query(model.Todo).filter_by(id=id).first()
  114.         
  115.          if todo:
  116.              orm_session.query(model.Todo).filter_by(id=id).update({
  117.                  model.Todo.topic: name
  118.              })
  119.              orm_session.commit()
  120.  
  121.          message.success(u"編輯事項成功")
  122.  
  123.      redirect("/")
  124.  
  125.  # Static file
  126.  @route('/static/:path#.+#')
  127.  def static_folder(path):
  128.      return static_file(path, root=os.path.join(WWW_ROOT, 'static'))
  129.  
  130.  # Boot
  131.  if __name__ == "__main__":
  132.      debug(True)
  133.     
  134.      app = default_app()
  135.      session_options = {
  136.          'session.type': 'file',
  137.          'session.cookie_expires': 300,
  138.          'session.data_dir': './data',
  139.          'session.auto': True
  140.      }
  141.      app = SessionMiddleware(app, session_options)
  142.      run(host='localhost', port=8082, reloader=True, app=app)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多