Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- JavaScript
- 성수동카페
- 추상클래스
- richtext
- c언어문자열
- 상속
- FLUTTER
- DOM
- 알고리즘
- 남양주맛집
- Django
- 장고
- BeautifulSoup
- 강원도속초맛집
- removetooltip
- popupmenubutton
- 포인터
- 건대입구맛집
- 부스트코스
- python3
- Python
- 컴퓨터과학
- 아스키코드
- 코딩독학
- 가상환경
- 정렬알고리즘
- pipenv
- 속초여행
- 자바
- 노마드코더
Archives
- Today
- Total
YUYANE
Django / 모두 성공하거나 모두 실패로 처리하기 - transaction.atomic() 본문
학습 강의
https://www.youtube.com/watch?v=Ij1MCRk-d6c&list=PL9tgJISrBWc5619CclyqYrnnMkVOPzVYM
코드
@login_required
def follow(request, username, option):
#option : follow / unfollow
following = get_object_or_404(User, username=username)
try:
f, created = Follow.objects.get_or_create(follower=request.user, following=following)
#unfollow
if int(option) == 0:
f.delete()
Stream.objects.filter(following=following, user=request.user).all().delete()
else:
posts = Post.objects.all().filter(user=following)[:25]
with transaction.atomic():
for post in posts:
stream = Stream(post=post, user=request.user, date=post.posted, following=following)
stream.save()
return HttpResponseRedirect(reverse('profile', args=[username]))
except User.DoesNotExist:
return HttpResponseRedirect(reverse('profile', args=[username]))
- 트랜잭션 : 하나의 실행 단위로, 존재하는 중간 과정들에 대해서 모두 성공하면 데이터베이스의 상태가 변하게 되고, 중간에 실패하면 기존에 작업들 모두 Rollback
- 원자성
- 모두 성공하거나 모두 실패 둘 중 하나
- 로그인 유저가 팔로잉 하는 유저의 포스트가 모두 보이거나 모두 보이지 않게 만듦
참고
'Framework > DJANGO' 카테고리의 다른 글
Django / media, static 파일 저장 경로 지정 하기 (0) | 2021.03.23 |
---|---|
Django / 여러 개의 템플릿에 동시에 적용할 수 있는 뷰 - context processor in setting.py (0) | 2021.03.22 |
Django / Crispy forms tag (Bootstrap4) (0) | 2021.03.14 |
Django / No changes detected (0) | 2021.03.14 |
Django / view.py (0) | 2021.03.09 |
Comments