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

Django Authentication 기능을 통한 회원 가입 본문

Python/python 클론코딩

Django Authentication 기능을 통한 회원 가입

SeongWon 2020. 4. 2. 22:20
반응형

기존의 회원가입 로직

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

    elif request.method == "POST":
        email = request.POST.get("e_mail")
        name = request.POST.get("name")
        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('/register')

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

            insert_sql = "INSERT INTO instagram.user(e_mail, name, user_id, user_pw, salt)"
            insert_sql += " VALUES ((%s), (%s), (%s), (%s), (%s))"

            insert_result = cursor.execute(insert_sql, (email, name, user_id, hashed_pw, salt,))
            insert_datas = cursor.fetchall()

            connection.commit()
            connection.close()

            messages.success(request, '회원가입에 성공하셨습니다.')

            return redirect('/login')

다음과 같이 직접 쿼리문을 작성하여 user 테이블에 일일이 넣어줘야 하는 번거로움이 있으며, 코드도 상당히 지저분해진다.

 


Django Authentication

대부분의 웹사이트에서는 현재 접속한 사용자가 로그인을 했는지, 로그인을 했다면 어떤 사용자이고 어떤 권한을 가지

고 있는지에 따라 사용할 수 있는 기능이나 페이지에 제한을 두고 있다.

이와 같은 로직을 구현하기 위해서는 먼저 사용자를 인증하는 과정을 거쳐야 한다. Django에서는 이런 사용자 인증 및 권한 승인 시스템을 다양한 기능들과 함께 제공하고 있습니다.

 

 

USER 객체

- Django에서는 User 객체를 이용하여 계정를 관리하며 User 속성으로는 아래와 같다.

  • username (required) - user의 ID라고 보면 된다
  • password (required)
  • email
  • first_name - user 이름의 성
  • last_name - user의 이름

1. 회원가입

 

signup.html

<form class="mt-3" method="post" action='{% url "accounts:register" %}'>{% csrf_token %}
    <div class="form-group">
      <input type="email" class="form-control" id="e_mail" name="e_mail" placeholder="이메일 주소">
    </div>
    <div class="form-group">
      <input type="text" class="form-control" id="name" name="name" placeholder="성명"> 
    </div>
    <div class="form-group">
      <input type="text" class="form-control" id="user_id" name="user_id" placeholder="사용자 ID">
    </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>

 

 

RegisterView.py

 

from django.contrib.auth.models import User

email = request.POST.get("e_mail")
        name = request.POST.get("name")
        user_id = request.POST.get("user_id")
        user_pw = request.POST.get("user_pw")
        profile_img_src = base_sql_data[0][0]


        try:
            user = User.objects.get(username=user_id)
            messages.error(request, '이미 존재하는 아이디입니다.')

            return redirect('accounts:register')

        except ObjectDoesNotExist:
            user2 = User.objects.create_user(email=email, username=user_id, first_name=name, password=user_pw, profile_img_src = profile_img_src)
            messages.success(request, '회원가입에 성공하였습니다.')

            return redirect('accounts:login')

 

  • create_user(username, email=None, password=None, .....기타 필드 = 내용)
  • 인증 기능을 통해서 비밀번호 (user_pw)는 자동으로 해시되어 DB에 저장된다.
반응형