0
我有幾個基於類的視圖。django事務atomc裝飾器,類視圖
其中之一,讓我們說,View1可能會調用其他視圖來返回響應。
所以我有這樣的事情:
class View1(View):
def post(self, request, *args, **kwargs):
# Some logic ...
return View2.as_view()(request) # There are more lines like this calling to other views.
所以View1
有些路線圖。基於某些條件,它將請求傳遞給其他視圖以返回響應。
我想在View1
上使用transaction.atomic
裝飾器,原子事務是否會應用於我調用的所有視圖?即對其他視圖的調用不會取消原子請求?
到目前爲止,我用下面的方法來裝飾視圖1:
- 包裹鑑於
transaction.atomic
中的URL。 - 使用
@method_decorator(transaction.atomic)
的post()
方法View1
。
的問題是,使用任何兩種方法來設置視圖爲原子,即使視圖1,錯誤(例外)返回「視圖1沒有返回HttpResponse對象。」,仍然得到創建的對象。
爲什麼?
原子數據庫事務,以確保數據將被保留,而不是返回一個HTTP響應也不會影響 – Sayse
所以問題是什麼時候執行回滾?根據django文檔,任何以未捕獲異常退出的原子視圖都不會創建對象。而不是返回HttpResponse是在Django的例外.. https://docs.djangoproject.com/en/1.9/topics/db/transactions/#django.db.transaction.atomic – user3599803
嗯,你是對的,我一直假設它涉及到數據庫錯誤(道歉),我認爲問題是沒有返回http響應的錯誤不在原子塊的範圍內,因爲它調用視圖責任的方法來確保它返回一個響應 – Sayse