MyPrograming
Django Authentication 기능을 통한 회원 가입 본문
반응형
기존의 회원가입 로직
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)
- 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에 저장된다.
반응형
'Python > python 클론코딩' 카테고리의 다른 글
(계속) Django Authentication 기능을 통한 로그인 / 인증 / 로그아웃 (0) | 2020.04.02 |
---|---|
(계속) Django Authentication 기능을 통한 정보 수정 (0) | 2020.04.02 |
인스타그램 클론코딩 (로그인, 로그아웃) (0) | 2020.02.26 |
인스타그램 클론코딩 (회원가입) (0) | 2020.02.17 |
DKEA (간단 쇼핑몰) (0) | 2020.01.21 |