티스토리 뷰

<Complete List>

1. 데이터베이스 및 UI 설계하기

  • 인스타그램 UI 구성
  • 데이터베이스 테이블 설계 및 구현

2. 앱 만들기

  • instagram, accounts 앱 만들기
  • views.py 분리하기

3. 회원가입 페이지

  • url
  • view
    • 비밀번호 암호화 함수 구현 - 해시 함수
  • template

4. 로그인 페이지

  • url
  • view
    • 세션에 사용자 ID 저장하기
  • template

 

<To Do List>

  • Django 인증 시스템을 활용하여 회원가입, 로그인 뷰 개발
  • urls.py에서 기존 매칭된 뷰들을 새로 구현한 뷰들로 변경

5. 로그아웃 뷰

  • url
  • view

 


urls.py 변경

  • urls.py에서 기존 매칭된 뷰들을 새로 구현한 뷰들로 변경
urlpatterns = [
    re_path(r'^register/$', RegisterAccountsView, name='pn_reg_accounts'),
    re_path(r'^login/$', LoginView, name='pn_login'),
]

 

회원가입 - RegisterAccountsView

  • Django 인증 시스템을 활용하여 회원가입 뷰 개발
def RegisterAccountsView(request):
    if request.method == 'GET':
        renderPage = 'reg_accounts.html'
        return render(request, renderPage)

    else:
        email = request.POST.get('email')
        name = request.POST.get('name')
        user_id = request.POST.get('user_id')
        user_pw = request.POST.get('user_pw')

        try:
            user = User.objects.get(username=user_id)

            messages.error(request, '이미 존재하는 아이디입니다. 다른 아이디를 사용해주세요.')
            return redirect('accounts:pn_reg_accounts')

        except ObjectDoesNotExist:
            user = User.objects.create_user(username=user_id, password=user_pw, email=email, first_name=name)
            messages.success(request, '회원가입이 되었습니다. 로그인을 해주세요.')
            return redirect('accounts:pn_login')
  • 200220 수정:

    존재하지 않는 데이터일 때 accounts.models.User.DoesNotExist: User matching query does not exist 에러 발생

    따라서, 이에 대한 ObjectDoesNostExist 예외 처리를 해줘야 한다.

 

로그인 - LoginView

  • Django 인증 시스템을 활용하여 로그인 뷰 개발
def LoginView(request):
    if request.method == 'GET':
        render_page = "login.html"
        return render(request, render_page)

    else:
        user_id = request.POST.get('user_id')
        user_pw = request.POST.get('user_pw')

        # username과 password로 자격 증명
        user = authenticate(request, username=user_id, password=user_pw)

        if user is not None:
            login(request, user=user)
            return redirect('pystagram:pn_main')

        else:
            messages.error(request, '아이디 혹은 비밀번호가 틀렸습니다. 다시 입력해주세요.')
            return redirect('accounts:pn_login')

 

5. 로그아웃 뷰

5.1 url

urlpatterns = [
    re_path(r'^register/$', RegisterAccountsView, name='pn_reg_accounts'),
    re_path(r'^login/$', LoginView, name='pn_login'),
    re_path(r'^logout/$', LogoutView, name='pn_logout'),
]

 

5.2 LogoutView

def LogoutView(request):
    logout(request)
    return redirect('accounts:pn_login')
댓글