问题列表
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
据说用装饰方法会报错,我没有试过,所有选用继承基类的方法。
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')
据说用装饰方法会报错,我没有试过,所有选用继承基类的方法。