호태호태
Train
호태호태
전체 방문자
오늘
어제
  • Train (14)
    • CS (4)
      • 데이터베이스 (4)
    • PS (0)
      • 백준 (0)
      • 프로그래머스 (0)
    • Django (8)
      • Django (1)
      • Django Rest Framework (1)
      • Two scoops of Django (0)
      • Django Channels (6)
    • Python (0)
    • Java (0)
      • Modern Java In Action (0)
    • 배포관련 (0)
    • 잡담 (2)

블로그 메뉴

  • 깃허브
  • 홈
  • 태그

공지사항

인기 글

태그

  • Django
  • 12기
  • SSAFY
  • ssafy 준비
  • django channels

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
호태호태

Train

Django/Django Channels

Django Channels(Web Socket) - 회원가입 기능 추가하기

2023. 1. 16. 10:53

회원가입 만들기

이번 글에는 회원가입 기능을 구현하고자 한다.

 

먼저 회원가입 페이지인 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
    'Django/Django Channels' 카테고리의 다른 글
    • Django Channels(Web Socket) - 채팅방스럽게 다듬기
    • Django Channels(Web Socket) - 채팅 유저이름 추가하기
    • Django Channels(Web Socket) - 동기를 비동기로
    • Django Channels(Web Socket) - Channels 사용해보기
    호태호태
    호태호태
    백엔드하러 왔다가 인공지능 하지요...

    티스토리툴바