dotcloud + webpy + jinja2 + sqlalchemy + uwsgi

问题列表
1.集成jinja2模板引擎
2.开启Session功能
3.集成Sqlalchemy



1.集成jinja2模板引擎
code(setting.py):
import os
import web
#引入jinja2
from jinja2 import Environment,FileSystemLoader


def render_template(template_name, **context):
    extensions = context.pop('extensions', [])
    globals = context.pop('globals', {})


    jinja_env = Environment(
            loader=FileSystemLoader(os.path.join(os.path.dirname(__file__), '../templates').replace('\\','/')),
            extensions=extensions,
            )
    print '-------------------%s-------------------------'   % (os.path.join(os.path.dirname(__file__), 'templates'))
    jinja_env.globals.update(globals)


    #jinja_env.update_template_context(context)
    return jinja_env.get_template(template_name).render(context)


在页面中引用方式如下(views.py):


class Login:


def  GET(self):
        form = loginForm()
        return render_template("login.html",form=form)




2.开启Session功能
在启动文件中添加如下代码(wsgi.py)
session = web.session.Session(app, web.session.DiskStore('sessions'),
    initializer={'loggedin':'False',  'userId':'',  'email':''})


def session_hook():
    web.ctx.session = session


app.add_processor(web.loadhook(session_hook))


在代码中引用方式如下:
import web
web.ctx.session.loggedin = True
具体原理请参照cookbook




3.集成sqlalchemy
在启动文件中添加如下代码(wsgi.py):


engine = create_engine('mysql+mysqldb://hostname/dbname?charset=utf8', encoding='utf8' ,echo=True)


def load_sqla(handler):
    web.ctx.orm = scoped_session(sessionmaker(autoflush=True, bind=engine))
    try:
        return handler()
    except web.HTTPError:
       web.ctx.orm.commit()
       raise
    except:
        web.ctx.orm.rollback()
        raise
    finally:
        web.ctx.orm.commit()




app = web.application(urls, locals())
app.add_processor(load_sqla)


在代码中引用方式如下:


import web
user = web.ctx.orm.query(User)
具体原理请参照cookbook



4.用户登录验证

#验证用户必须登录
class AuthBase:
    def __init__(self):
        loggedin = web.ctx.session.loggedin
        if loggedin == 0:
            raise web.seeother('/login')


 据说用装饰方法会报错,我没有试过,所有选用继承基类的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值