/django/middleware/transaction.py
Python | 27 lines | 22 code | 1 blank | 4 comment | 0 complexity | c8c092700d23db72304e2725fa3184ae MD5 | raw file
Possible License(s): BSD-3-Clause
- from django.db import transaction
- class TransactionMiddleware(object):
- """
- Transaction middleware. If this is enabled, each view function will be run
- with commit_on_response activated - that way a save() doesn't do a direct
- commit, the commit is done when a successful response is created. If an
- exception happens, the database is rolled back.
- """
- def process_request(self, request):
- """Enters transaction management"""
- transaction.enter_transaction_management()
- transaction.managed(True)
- def process_exception(self, request, exception):
- """Rolls back the database and leaves transaction management"""
- if transaction.is_dirty():
- transaction.rollback()
- transaction.leave_transaction_management()
- def process_response(self, request, response):
- """Commits and leaves transaction management."""
- if transaction.is_managed():
- if transaction.is_dirty():
- transaction.commit()
- transaction.leave_transaction_management()
- return response