회원가입 만들기
이번 글에는 회원가입 기능을 구현하고자 한다.
먼저 회원가입 페이지인 signup.html을 만들어 다음과 같이 코드를 입력해준다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>signup</title>
<style>
.login {
width: 500px;
margin: 200px auto auto auto;
}
.title{
margin: 0px 0px 0px 150px;
}
.id{
margin: 20px 0px 0px 100px;
}
.id input{
margin-left: 32px;
}
.pw{
margin: 20px 0px 0px 100px;
}
#password1{
margin-left: 45px;
}
#password2{
margin-left: 13px;
}
.button{
margin: 20px 0px 0px 100px;
}
.username{
margin: 20px 0px 0px 100px;
}
.signup{
display: inline-block;
margin-left: 80%;
margin-top : 0;
}
</style>
</head>
<body>
<div class = "login">
<h1 class = "title">회원가입 페이지</h1>
<hr>
<form method="post" action="{% url 'account:signup' %}">
{% csrf_token %}
<p class = "id">email: <input type="text" name="email" id="email"/></p>
<p class = "username">username: <input type="text" name="username" id="username"/></p>
<p class = "pw">PW: <input type="password" name="password1" id="password1"/></p>
<p class = "pw">PW확인: <input type="password" name="password2" id="password2"/></p>
<p class = "button"><input type="submit" value="회원가입 하기"></p>
</form>
<hr>
<p class = signup> <a href="../login">로그인 하기</a></p>
</div>
</body>
</html>
이후 account/views.py에 회원가입을 위한 코드를 추가해주자
#account/views.py
from django.shortcuts import redirect, render
...
from .forms import UserForm
#...
@csrf_protect
def signup(request):
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
form.save()
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password) # 사용자 인증
auth_login(request, user=user) # 로그인
return redirect('chat:index')
else:
form = UserForm()
return render(request, 'account/signup.html', {'form': form})
정상적으로 회원가입이 되면 로그인세션을 만들어주고 chat페이지로 이동한다.
이때 만약 email형식에 맞지 않거나 비밀번호가 8자리미만, 숫자만 있다면 회원가입이 되지 않는다.
email의 경우 UserForm에 있는 EmailField가 알아서 이메일 형식이 아니라면 Exception을 발생시키고, Password의 경우 settings.py의 AUTH_PASSWORD_VALIDATORS가 유효성 검사를 한다.
(자세한건 참고 링크의 블로그를 추천드립니다.)
signup view 코드를 연동하기 위해 account/urls.py에 signup을 추가해준다.
# account/urls.py
from . import views
from django.urls import path
app_name = 'account'
urlpatterns = [
path('login/',views.login,name="login"),
path('logout/',views.logout,name="logout"),
path('signup/',views.signup,name="signup"),
]
다음 글은 채팅방을 좀 더 1:1에 맞게 틀을 가다듬을 예정이다.
참고
비밀번호 유효성 추가 자료: https://blog.siner.io/2021/08/16/django-password-validators/
'Django > Django Channels' 카테고리의 다른 글
Django Channels(Web Socket) - 채팅방스럽게 다듬기 (0) | 2023.01.16 |
---|---|
Django Channels(Web Socket) - 채팅 유저이름 추가하기 (0) | 2023.01.16 |
Django Channels(Web Socket) - 동기를 비동기로 (0) | 2023.01.15 |
Django Channels(Web Socket) - Channels 사용해보기 (0) | 2023.01.15 |
Django Channels(Web Socket) - 개발환경 설정 (0) | 2023.01.15 |