1. 회원가입
signup.html
# core/views.py res_data['error']
{% if error %}
<script>alert(`{{ error }}`);</script> #자바스크립트 경고창으로 에러 띄우기
{% endif %}
<form method="post" action="." class="lg:w-1/4 px-4 mx-auto">
{% csrf_token %}
<div class="mb-5">
<label class="text-white">아이디</label
<input type="text" name="username" class="w-full mt-2 px-4 py-2 rounded-xl">
</div>
<div class="mb-5">
<label class="text-white">닉네임</label>
<input type="text" name="nickname" class="w-full mt-2 px-4 py-2 rounded-xl">
</div>
<div class="mb-5">
<label class="text-white">비밀번호</label>
<input type="password" name="password1" class="w-full mt-2 px-4 py-2 rounded-xl">
</div>
<div class="mb-5">
<label class="text-white">비밀번호 확인</label>
<input type="password" name="password2" class="w-full mt-2 px-4 py-2 rounded-xl">
</div>
<div class="mb-5">
<label class="text-white">이름</label>
<input type="text" name="name" class="w-full mt-2 px-4 py-2 rounded-xl">
</div>
<button type="submit" class="px-5 py-3 rounded-xl text-white bg-blue-800 hover:bg-blue-700">Submit</button>
</form>
회원 가입을 하기 위해 회원 정보를 입력하기 위해 form 태그를 사용해 <아이디/ 닉네임/ 비밀번호/ 비밀번호 확인/ 이름> 값을 받기
이때 회원 가입할 때 입력된 회원 정보를 보안하기 위해 POST 방식 사용하기
CSRF 공격을 막기 위해 {% csrf_token %}를 사용해 form 과 csrf_token 를 POST로 전송하여 tokendml 유효성을 체크한다
참고->https://chagokx2.tistory.com/49
아이디/닉네임/아이디 -> type="text"
비밀번호 -> type="password"
2. 회원가입에 대한 폼양식
회원 가입을 하기 위해 데이터를 어떻게 가져올지 views.py에서 지정하기
views.py
from django.shortcuts import render, redirect # render(템플릿)/redirect(URL)
from django.contrib.auth import login # login 함수 사용
from .models import User # mosels.py에 User
import re
from core.utils import util as custom_util # core/utils/util.py [custom_util]으로 지정
def signup(request):
if request.method == 'POST': # post요청일 경우 if문 실행
res_data = {} #유효성 처리
# 파라미터를 변수로 담기
username = request.POST['username']
nickname = request.POST['nickname']
name = request.POST['name']
password1 = request.POST['password1']
password2 = request.POST['password2']
#print(username, nickname, name, password1, password2)
# POST로 받은 값이
#username과 nickname, name 그리고 password1와 password2가 같을 때
if (username and nickname and name and password1 == password2):
# custom_util 값을 충족했을 때
if custom_util.chk_id(username) and custom_util.chk_nickname(nickname) and custom_util.chk_name(name) and custom_util.chk_password(password1):
# 기존 db에서 User 모델과 같은 값 가져오기
user = User.objects.create_user(
username=username,
nickname=nickname,
name=name,
password=password1,
)
login(request, user)
return redirect(main)
else:
res_data['error'] = "아이디 , 닉네임 , 이름, 비밀번호 다시 입력"
return render(request, 'core/signup.html', res_data) # 응답 데이터 res_data 전달
else:
res_data['error'] = "아이디, 닉네임, 이름, 비밀번호 전부 입력 해주세요"
return render(request, 'core/signup.html', res_data)
else:
return render(request, 'core/signup.html')
signup 함수는 POST 요청 받았을 경우 if문을 실행되는 함수로
회원 정보를 파라미터로 받아 변수명을 정한 뒤
폼태그 값과 변수가 같을 때 -> custom_util 값을 충족했을 때 -> 기존 db에서 models.py User 모델과 같은 값 가져오기 -> 가입성공
일치 하지 않을 경우 응답 데이터인 res_data 전달
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.main, name='main'),
path('signup/', views.signup, name='signup'),
]
3. 가입이 성공 했을 경우
settings.py
# 로그인 성공 시 자동으로 이동할 URL
LOGIN_REDIRECT_URL = '/'
LOGIN_URL = '/login/'
base.html
- 로그인 했을 때와 로그아웃 했을 경우 활동 상태 제어문 만들기
<div class="flex items-center space-x-4">
<!-- 로그인/로그아웃 했을 경우 유저의 현재 활동 가능 상태를 판단하는 제어 -->
{% if request.user.is_authenticated %}
<a href="/rooms/" class="text-white hover:text-gray-200">Rooms</a>
<a href="/logout/" class="px-5 py-3 rounded-xl text-white bg-blue-600 hover:bg-blue-700">Log out</a>
{% else %}
<a href="/login/" class="text-white hover:text-gray-200">Log in</a>
<a href="/signup/" class="px-5 py-3 rounded-xl text-white bg-blue-600 hover:bg-blue-700">Sign up</a>
{% endif %}
</div>
'FrameWork > Django' 카테고리의 다른 글
7월 12일(화) 점프투파이썬 클래스 공부/커스텀 유저 회원가입 (0) | 2022.07.13 |
---|---|
프로젝트를 시작할 때 깃허브 잊지 않ㄱㅣ ~ (0) | 2022.07.11 |
[Django] 로그인 권한 지정 decorators @login_required (0) | 2022.06.29 |
[Django] django 모델(model) Field 종류 (0) | 2022.06.29 |
[ Django ] render 와 redirect 의 차이 (0) | 2022.06.29 |