WIL
6주차 WIL (장고 CRUD)
dev_junseok
2022. 10. 10. 21:20
장고의 CRUD란?
- Create : 회원가입, 게시글 작성, 댓글 작성
- Read : 회원정보 읽기, 게시글 목록 읽기, 게시글 상세 읽기, 댓글 읽기
- Update : 회원정보 수정, 게시글 업데이트
- Delete : 회원 탈퇴, 게시글 삭제, 댓글 삭제
를 의미한다.
모든 웹 서비스의 기본은 이 CRUD가 포함되어있다고 할 수 있다.
오늘은 대표적으로 회원가입 부터 해서 정보 읽기, 수정, 탈퇴 하는 기능을 중점으로 CRUD 를 다뤄보겠다.
글이 너무 길어지니 url, model 부분은 생략하겠다.
def sign_up_view(request): #회원가입
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
email = request.POST.get('email', '')
username = request.POST.get('username', '')
nickname = request.POST.get('nickname', '')
password = request.POST.get('password', '')
password2 = request.POST.get('password2', '')
if password != password2:
return render(request, 'user/signup.html', {'error': '패스워드를 확인 해 주세요!'})
else:
if email == '' or password == '':
return render(request, 'user/signup.html', {'error': '이메일과 패스워드를 입력해주세요.'})
exist_email = get_user_model().objects.filter(email=email)
exist_nickname = get_user_model().objects.filter(nickname=nickname)
if exist_email:
return render(request, 'user/signup.html', {'error': '이미 존재하는 이메일입니다.'})
elif exist_nickname:
return render(request, 'user/signup.html', {'error': '이미 존재하는 닉네임입니다.'})
else:
UserModel.objects.create_user(email=email, username=username, password=password, nickname=nickname, profile_image=profile_image)
return redirect('/sign-in') # 회원가입이 완료되었으므로 로그인 페이지로 이동
먼저 회원가입 view이다.
def profile_edit(request, id): # 사용자 정보 수정(이름,닉네임,이메일)
if request.method == 'POST':
user = UserModel.objects.get(id=id)
user.username = request.POST.get('username')
# user.nickname = request.POST.get('nickname')
user.email = request.POST.get('email')
user.save()
return redirect("/")
def change_password(request, id): # 비밀번호 수정
if request.method == "POST":
user = UserModel.objects.get(id=id)
origin_password = request.POST["origin_password"]
if check_password(origin_password, user.password):
new_password = request.POST["new_password"]
confirm_password = request.POST["confirm_password"]
if new_password == confirm_password:
user.set_password(new_password)
user.save()
auth.login(request, user, backend='django.contrib.auth.backends.ModelBackend')
return redirect('/')
else:
messages.error(request, 'Password not same')
else:
messages.error(request, 'Password not correct')
return render(request, 'content/profile_edit_password.html')
else:
return render(request, 'content/profile_edit_password.html')
다음은 차례대로 회원정보 수정, 비밀번호 변경 view이다.
@login_required
def delete(request): #회원탈퇴
if request.user.is_authenticated:
request.user.delete()
return redirect('/')
마지막으로 회원탈퇴 view 이다.
이 코드들을 응용하면 게시글이다 댓글같은 다른 분야에서도 동일하게 적용할 수 있을것이다.