▷ 장고 팀 프로젝트 시작 (3)
<로그인 / 회원가입 페이지>
- Django의 AbstractUser를 활용하여 모델을 설정하고 기존 Django 유저에 없던 nickname을 추가해주었다.
(Django 기본 유저 모델을 AbstractUser로 지정)
from django.db import models
from django.contrib.auth.models import AbstractUser
class UserModel(AbstractUser):
class Meta:
db_table = "users"
nickname = models.CharField(max_length=256, default='')
- Views.py에 로그인과 회원가입 함수를 생성하였다.( 정보 빈칸에대한 error 와 비밀번호체크 구현)
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'signup.html')
elif request.method == 'POST':
username = request.POST.get('username', '')
nickname = request.POST.get('nickname', '')
password = request.POST.get('password', '')
password2 = request.POST.get('password2', '')
if password != password2:
return render(request, 'signup.html', {'error':'패스워드를 확인 해주세요.'})
else:
if username == '' or password == '':
return render(request, 'signup.html', {'error': 'ID 와 비밀번호는 필수입니다.'})
exist_user = get_user_model().objects.filter(username=username)
if exist_user:
return render(request, 'signup.html', {'error': '이미 있는 ID입니다.'})
else:
UserModel.objects.create_user(username=username, nickname=nickname, password=password)
return redirect('/sign-in')
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', '')
password = request.POST.get('password', '')
me = auth.authenticate(request, username=username, password=password)
if me is not None:
auth.login(request, me)
return redirect('wines:home')
else:
return render(request, 'signin.html', {'error':'ID 혹은 비밀번호를 확인 해주세요.'})
elif request.method == 'GET':
return render(request, 'signin.html')
- urls.py (url 지정)
from django.urls import path
from . import views
app_name = 'users'
urlpatterns = [
path('sign-up/', views.sign_up_view, name='sign-up'),
path('sign-in/', views.sign_in_view, name='sign-in'),
'개발_TIL' 카테고리의 다른 글
개발_TIL | 2022-06-14 (39) // feat) KPT (0) | 2022.06.14 |
---|---|
개발_TIL | 2022-06-13 (38) (0) | 2022.06.14 |
개발_TIL | 2022-06-09(36) (0) | 2022.06.09 |
개발_TIL | 2022-06-08(35) (0) | 2022.06.09 |
개발_TIL | 2022-06-07(34) (0) | 2022.06.08 |