Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

MyPrograming

인스타그램 클론코딩 (로그인, 로그아웃) 본문

Python/python 클론코딩

인스타그램 클론코딩 (로그인, 로그아웃)

SeongWon 2020. 2. 26. 19:59
반응형

1. 로그인

 

Instagram - login.html

<form class="mt-3" method="post" action='{% url "accounts:login" %}'>{% csrf_token %}
    <div class="form-group">
      <input type="text" class="form-control" id="user_id" name="user_id" placeholder="사용자 이름">
    </div>
    <div class="form-group">
      <input type="password" class="form-control" id="user_pw" name="user_pw" placeholder="비밀번호">
    </div>
    <button type="submit" class="btn btn-primary" onclick="">로그인</button>
</form>

 

Instagram - LoginView.py

def LoginView(request):
    if request.method == "GET":
        return render(request, 'login.html')

    elif request.method == "POST":
        user_id= request.POST.get('user_id')
        user_pw= request.POST.get('user_pw')
        salt, hashed_pw = hashing_password(user_pw)

        cursor = connection.cursor()

        strSql = "SELECT instagram.user.user_id"
        strSql += " FROM instagram.user"
        strSql += " WHERE user_id = (%s)"

        result = cursor.execute(strSql, (user_id,))
        datas = cursor.fetchall()

        connection.commit()
        connection.close()

        if len(datas) == 0:
            connection.rollback()
            print("로그인 실패")

            messages.error(request, '아이디 혹은 비밀번호를 확인해주세요.')

            return redirect('/login')

        elif len(datas) !=0:
            cursor = connection.cursor()

            pw_strSql = "SELECT instagram.user.user_pw, instagram.user.salt"
            pw_strSql += " FROM instagram.user"
            pw_strSql += " WHERE user_id = (%s)"

            pw_result = cursor.execute(pw_strSql, (user_id,))
            pw_datas = cursor.fetchall()

            log_pw = log_password(user_pw, pw_datas[0][1])

            log_pw_strSql = "SELECT instagram.user.user_pw"
            log_pw_strSql += " FROM instagram.user"
            log_pw_strSql += " WHERE user_pw = (%s)"

            log_pw_result = cursor.execute(log_pw_strSql, (log_pw,))
            log_pw_datas = cursor.fetchall()

            connection.commit()
            connection.close()

            if len(log_pw_datas) == 0:
                connection.rollback()
                print("로그인 실패")

                messages.error(request, '아이디 혹은 비밀번호를 확인해주세요.')

                return redirect('/login')

            elif len(log_pw_datas) !=0:
                request.session['user_id'] = user_id
                return redirect('/')

LoginView에 대한 두가지 request 처리

  • request.method == 'GET' : request 메소드가 get일 경우 회원가입 페이지를 rendering
  • request.method == 'POST' : requrest 메소드가 post일 경우 위의 html form에서 post된 데이터를 name으로 넘겨받아 처리

 

완성된 로그인 페이지

 


2. 로그아웃

 

Instagram - LogoutView.py

def Logout(request):
    logout(request)
    return redirect('accounts:login')

로그아웃이 정상정으로 이루어지면  모든 세션이 로그아웃 되면서 로그인 페이지로 redirect하게 된다.

 

 

 

로그아웃 버튼을 누르면

 

로그인 페이지로 redirect

 

반응형