2017-03-22 6 views
1

settings.py장고 - 예외가 내 코드에

DATABASES = { 
'default': { 
    'ENGINE': 'django.db.backends.mysql', 
    'NAME': 'diva', 
    'USER': 'root', 
    'PASSWORD': 'admin', 
    'ATOMIC_REQUESTS':True, 
    'HOST': 'localhost', 
    'PORT': '3306', 
}, 

}

views.py

def create_project(self, request): 
    try: 
     with transaction.atomic(): 
       code here 
    except Exception as e: 
     print "Exception--->",str(e) 
     response = {"status":"failed",'response': ugettext("projects.services.create_project.failure")} 
     stat = status.HTTP_400_BAD_REQUEST 
     return Response(response, status=stat) 

을 제기 때 ObjectDoesNotExist 예외 롤백이 발생되지 제기하는 경우 롤백은 발생하지 않습니다 , 누구든지 트랜잭션 장고 예제에서 작동하는지 설명 할 수 있습니다.

답변

1

올바른 내용입니다. 예외가 발생했을 경우 그 exeption이 될 가지고 있지만 행동 장고는 트랜잭션을 롤백하는 DatabaseError 또는

ObjectDoesNotExist는 DatabaseError의의 서브 클래스가 아닌 그것의 서브 클래스 중 하나 (특히 IntegrityError)과 같은 이것에 대한 이유가 없다 롤백 할 트랜잭션.

마지막으로 중요합니다. Exception은 항상 당신이 찾고있는 특정 예외를 포착하지 마십시오.

+0

아야! 나는 물린 전에 이것을 읽었 기 때문에 기쁩니다. 누구든지 왜 장고가이 상황에서 DB 변경 사항을 유지합니까? – nigel222

+0

설명해 주셔서 감사합니다. @ e4c5. 내 코드에서 예외가 발생하고 뷰에서 내 자신의 응답을 보낼 수 있으면 전체 트랜잭션을 롤백해야합니다. 나는 그것을 어떻게 얻을 수 있습니까? –

+0

죄송합니다. 귀하의 의견을 놓친 것 같습니다. 낡은 대답을 할 때이 점을 그냥 지나쳤습니다. 당신은 여전히 ​​도움이 필요합니까 아니면 이것을 분류 해 놓았습니까? – e4c5