仅当客户端发送“保存请求”并同时维护会话上下文时,保存模型更改的最佳做法吗?

我有一个flask应用程序,客户可以在数据库中不断对模型中的对象进行更改。然后,当客户端显式发送“保存”请求时,应将对象的新状态保存到DB。如果客户端没有发送“保存”请求,我希望所有字段更改都被丢弃,并且对象状态在更改之前要恢复为原始状态,这样对象的下一次加载将处于其原始状态。 / p>

问题是我需要将对象上甚至未保存的更改保存到数据库,以便为客户端的下一个请求提供会话上下文。 会话中的未来请求需要对象的最新状态。但是,通过这种方法,我实际上完全失去了对象的原始状态。

下面的一些例子

#models.py - saves an object in the  dashboard field

class Dash(db.Model):

    id = db.Column(db.INTEGER,primary_key=True)
    name = db.Column(db.String(20),nullable=False)
    dashboard = db.Column(db.PickleType(),nullable=True)

在我的路线中,我有以下方法可以更新对象中的某个属性:

#routes.py

class setInputAPI(Resource):
    def post(self):
        dash = getdash() #gets latest DB object

        dash.value = request.json['new_val'] #changes an object attribute 

        updateDB(dash) #update db with new object so future requests have context
        return {'message':'success'}

#Helper functions
def getdash():
    dash_id = request.json['dash_id']
    dash = Dash.query.get_or_404(dash_id).dashboard
    return dash

def updateDB(dash):
    dash_id = request.json['dash_id']
    db.session.query(Dash).filter(Dash.id == dash_id).update({'dashboard': dash})
    db.session.commit()

发送上述setInputAPI请求后,我的数据库状态将被更新以反映客户端的更改,而客户端甚至没有发送保存请求。因此,我丢失了所有原始数据,如果客户端在以后的会话中重新加载该对象,他们将看到更改的对象,而不是最后保存的对象。

可能的解决方案是创建一个重复的表,该表仅跟踪对象的最后保存状态并加载该状态。

所以我可以有2个表-一个用于跟踪last_saved状态,另一个用于跟踪current_unsaved状态。

但是我不得不想象必须有更好的方法来做到这一点,因为这似乎很麻烦?

viktors 回答:仅当客户端发送“保存请求”并同时维护会话上下文时,保存模型更改的最佳做法吗?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3127881.html

大家都在问