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 이다.

 

이 코드들을 응용하면 게시글이다 댓글같은 다른 분야에서도 동일하게 적용할 수 있을것이다.