13. 同Flask的集成
从Pony 0.7.4版本开始,我们增加了对Flask的支持,
通过pony.flask.Pony
,你可以使用恰当的方式自动封装你的Flask应用程序请求
from flask import Flask
from pony.flask import Pony
app = Flask(__name__)
Pony(app)
通过这段代码,你的每个视图函数都会被 db_session
封装,所以你不需要再关心它们。
Flask-Login
您也可以轻松地使用Flask-Login扩展:
from flask import Flask, render_template
from flask_login import LoginManager, UserMixin, login_required
from pony.flask import Pony
from pony.orm import Database, Required, Optional
from datetime import datetime
app = Flask(__name__)
app.config.update(dict(
DEBUG = False,
SECRET_KEY = 'secret_xxx',
PONY = {
'provider': 'sqlite',
'filename': 'db.db3',
'create_db': True
}
))
db = Database()
class User(db.Entity, UserMixin):
login = Required(str, unique=True)
password = Required(str)
last_login = Optional(datetime)
db.bind(**app.config['PONY'])
db.generate_mapping(create_tables=True)
Pony(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'
@login_manager.user_loader
def load_user(user_id):
return db.User.get(id=user_id)
你可以使用LoginManager.current_user
作为用户实例。
@app.route('/friends')
@login_required
def friends():
return render_template('friends.html', friends=current_user.friends)
你可以运行另一个例子来检查
python -m pony.flask.examplease