Python 限制用户在等待响应时调用同一处理程序两次

Python 限制用户在等待响应时调用同一处理程序两次,python,django,Python,Django,我正在使用Django 1.3开发一个web应用程序,我有一个如下所示的处理程序: @transaction.commit_manually @login_required(redirect_field_name='') def problematic_handler(request): try: my_record = models.MyRecords.objects.get(...) # lots of database operations base

我正在使用Django 1.3开发一个web应用程序,我有一个如下所示的处理程序:

@transaction.commit_manually
@login_required(redirect_field_name='')
def problematic_handler(request):
    try:
        my_record = models.MyRecords.objects.get(...)
        # lots of database operations based on my_record
        my_record.delete()
        transaction.commit()
        return ...
    except:
        transaction.rollback()
        return ...
我的问题是,在第一次调用返回之前,用户可以多次调用有问题的_处理程序,这将生成比需要更多的数据库记录

不幸的是,PRG模式在这里没有帮助:/

是否有任何方法可以限制用户在等待第一个调用返回时调用处理程序两次?
或者在处理程序的第二次调用期间是否可能生成异常?假设第一个尚未完成,我建议您尝试在事务中执行一个,该操作应在事务期间锁定检索到的my_记录实例。这将禁用对有问题的_处理程序的连续调用,以获取额外的锁,并在尝试中引发django.db.DatabaseError异常,您可以设计适当的事后处理过程


对于Django 1.4之前的版本,如果您的数据库支持,我建议您尝试对数据库记录执行一次更新。否则,您需要在应用程序级别和ymmv上实现一个锁,以防您的应用程序在多进程上下文中运行。

Django 1.3中不存在select_for_update,手动实现将非常困难:/