与 Flask 集成

从 Pony 0.7.4 版本开始,我们添加了对使用 PonyORM 与 Flask 的便捷支持。使用 pony.flask.Pony,您可以将 Flask 应用程序的 request 自动包装在 db_session 中。

from flask import Flask
from pony.flask import Pony

app = Flask(__name__)
Pony(app)

使用此代码,您定义的每个 view 函数都将被包装在 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 作为 User 实例。

@app.route('/friends')
@login_required
def friends():
    return render_template('friends.html', friends=current_user.friends)

您可以运行另一个 示例 来检查它。

python -m pony.flask.example