0

使用する

  • フラスコ
  • Flask-sqlalchemy
  • Sqlalchemy
  • Jquery
  • Datatables(jqueryプラグイン)
  • Jeditable(jqueryプラグイン)

このユーザークラスを検討してください(flask-sqlalchemyドキュメントから直接):

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

datatablesはajaxリクエストを作成し、テーブルにデータを入力します。次に、各tdはjeditableを使用してその場で編集可能になります。tdが変更されるとすぐに、jeditableは以下を含むlocalhost/modifyへのPOSTリクエストを行います。

  • 行ID(ユーザークラスと同じID)
  • 新しい変更された値
  • 変更されたテーブルの列(引数のために、id / username / emailの3つの列があると仮定します)(int)

ここで、localhost / modifyを処理する関数で、行IDを取得し、ユーザーオブジェクトを作成して、その特定の行をデータベースにクエリし、変更する必要のあるプロパティを確認し、新しい値で変更してコミットします。データベースに。これが私がこれまでに得たものです:

@app.route('/modify', methods=['GET', 'POST'])
def modify()
    if request.method == 'POST' :
        user = user.query.get(form.row_id)
        if form.column_id == int(0):
            user.id = form.value
        elif form.column_id == int(1):
            user.username = form.value
        elif form.column_id == int(2):
            user.email = form.value
        else:
            pass
        db.session.commit()
    return 'ok'

このように、はい、それは機能しますが、より美しいアプローチでなければなりません。これはあまり...pythonicではないようです

ミハイ

4

1 に答える 1

2

列IDのマップを使用して名前を属性付けします。

colmap = {
    0: 'id',
    1: 'username',
    2: 'email',
}

@app.route('/modify', methods=['GET', 'POST'])
def modify()
    if request.method == 'POST' :
        user = user.query.get(form.row_id)
        try:
            setattr(user, colmap[form.column_id], form.value)
        except KeyError:
            pass
        db.session.commit()
    return 'ok'
于 2011-07-17T15:25:44.053 に答える