Django函数执行

时间:2019-03-20 16:18:34

标签: django python-3.x function

在视图中,我定义了一个函数,该函数在用户在线提交表单时执行。提交表单后,我将执行一些数据库事务,然后基于数据库API中的现有数据触发:

triggerapi():
   execute API to send Email to the user and the administrator about 
   the submitted form
def databasetransactions():
    check the data in the submitted form with the data in DB
    if the last data submitted by the user is before 10 mins or more: 
       triggerapi()
def formsubmitted(request):
    save the user input in variables
    Databasetransactions()
    save the data from the submitted form in the DB

在上述情况下,用户在不到5毫秒的持续时间内单击了两次提交按钮。因此,开始处理2个并行数据,并且都触发了电子邮件,这不是您期望的行为。

有办法避免这种情况吗?这样,对于用户会话,应用程序应仅在所有较旧的数据处理完成后才接受数据?

2 个答案:

答案 0 :(得分:0)

由于我们使用的是伪代码,因此一种方法可能是对triggerapi()使用singleton pattern并在已经被证明的情况下返回Not Allowed

答案 1 :(得分:0)

有多种方法可以解决此问题。 其中之一是创建一个新的会话变量
request.session['activetransaction'] = True
但是,这将要求您传递请求,除非该请求已传递并且我们获得了更改的代码部分。您还可以通过相同的方式为其添加实例/类标志并进行检查。
另一种方法,如果您需要在上一个提交之后处理那些提交,这可能会起作用,您始终可以添加while request.session['activetransaction']:并随后进行处理。

def formsubmitted(request):
    if 'activetransaction' not in request.session or not request.session['activetransaction']:
        request.session['activetransaction'] = True
        # save the user input in variables
        Databasetransactions()
        # save the data from the submitted form in the DB
        request.session['activetransaction'] = False
    ...