将变量转换为类变量(不知道要命名的是什么)

时间:2011-07-17 15:20:36

标签: python flask flask-sqlalchemy

使用

  • 烧瓶
  • 烧瓶SQLAlchemy的
  • SQLAlchemy的
  • Jquery的
  • Datatables(jquery插件)
  • Jeditable(jquery插件)

考虑这个用户类(直接来自flask-sqlalchemy docs):

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

数据表发出ajax请求并填充表。然后每个td都可以在jeditable的情况下编辑。一旦修改了td,jeditable就会向localhost / modify发出POST请求,其中包含:

  • 行ID(来自用户类的相同ID)
  • 新修改后的值
  • 被更改的表的列(为了参数,我们假设有三列id / username / email)(int)

现在,我希望在处理localhost / modify的函数中我获取行id,创建用户对象并查询该特定行的db,查看需要修改的属性,使用new修改它值并提交给db。这是我到目前为止所得到的:

@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

米哈伊

1 个答案:

答案 0 :(得分: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'