【问题标题】:How to react on failed transaction (Django)如何对失败的交易做出反应(Django)
【发布时间】:2016-07-02 10:09:45
【问题描述】:

如何对失败的 Django 事务做出反应?例如返回某种错误页面或重新加载页面等。

代码中有with transaction.atomic(),所以如果用户已经保存,但在保存用户配置文件时出现问题,一切都会回滚。

但是,当事务失败并回滚时,如何检测和应对情况呢?

if request.method == 'POST':
        if register_as_translator_form.is_valid():
            cleaned = register_as_translator_form.cleaned_data

            with transaction.atomic():
                request.user.first_name = cleaned['first_name']
                request.user.last_name = cleaned['last_name']
                request.user.userprofile.IBAN = cleaned['IBAN']
                languages = cleaned['languages']
                language_levels = get_or_create_unknown_language_levels(languages)
                request.user.userprofile.language_levels.add(*language_levels)
                request.user.save()
                request.user.userprofile.is_translator = True
                request.user.userprofile.save()

            return HttpResponseRedirect('/register-translator-success')

【问题讨论】:

  • documentation 详细介绍了这一点。如果事务回滚,则会引发异常,由您来捕获它并决定要做什么。至于合适的动作是什么,这肯定取决于你的应用吗?

标签: python django transactions


【解决方案1】:

您可以捕获异常(except-try)并返回错误消息/页面。

   try:
        with transaction.atomic():
            request.user.first_name = cleaned['first_name']
            request.user.last_name = cleaned['last_name']
            request.user.userprofile.IBAN = cleaned['IBAN']
            languages = cleaned['languages']
            language_levels = get_or_create_unknown_language_levels(languages)
            request.user.userprofile.language_levels.add(*language_levels)
            request.user.save()
            request.user.userprofile.is_translator = True
            request.user.userprofile.save()

        return HttpResponseRedirect('/register-translator-success')
    except:
        return HttpResponseRedirect('/register-translator-failure')

【讨论】:

    猜你喜欢
    • 2014-04-09
    • 1970-01-01
    • 2021-05-11
    • 2011-09-10
    • 2018-10-03
    • 1970-01-01
    • 2021-12-05
    • 2023-04-05
    • 2019-03-15
    相关资源
    最近更新 更多