auth_user = 장고에서 미리 생성해준 데이터베이스 테이블
my_user = ORM을 사용해서 만든 데이터 베이스
#user/models.py
from django.db import models
# Create your models here.
class UserModel(models.Model):
class Meta:
db_table = "my_user"
username = models.CharField(max_length=20, null=False)
password = models.CharField(max_length=256, null=False)
bio = models.CharField(max_length=256, default='')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
#user/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser -> #기본 auth_user를 상속해오기 위해 추가
# Create your models here.
class UserModel(AbstractUser): #AbstractUser(auth_user)를 상속
class Meta:
db_table = "my_user"
bio = models.CharField(max_length=256, default='') #이미 존재하는 내용은 상속해오기때문에 제거해주고 추가가 필요한 bio만 남겨둔다.
Django의 기본 사용자 관리 테이블이 auth_user로 지정돼있기 때문에 my_user로 변경 필요
settings.py에 user.UserModel(user app의 UserModel 클래스(=my_user))을 사용자 관리테이블로 지정해준다.
- settings.py에 아래 코드 추가
AUTH_USER_MODEL = 'user.UserModel'
- python manage.py makemigrations
- python manage.py migrate
데이터베이스창 새로고침 후 my_user가 잘 적용됐는지 확인
상단에 아래 코드 추가
# user/views.py
from django.contrib.auth import get_user_model #사용자가 있는지 검사하는 함수
내용 수정
# user/views.py
def sign_up_view(request):
if request.method == 'GET':
return render(request, 'user/signup.html')
elif request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
password2 = request.POST.get('password2', None)
bio = request.POST.get('bio', None)
if password != password2:
return render(request, 'user/signup.html')
else:
# exist_user = UserModel.objects.filter(username=username)
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
exist_user = get_user_model().objects.filter(username=username)
if exist_user:
return render(request, 'user/signup.html') # 사용자가 존재하기 때문에 사용자를 저장하지 않고 회원가입 페이지를 다시 띄움
else:
# new_user = UserModel()
# new_user.username = username
# new_user.password = password
# new_user.bio = bio
# new_user.save()
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
UserModel.objects.create_user(username=username, password=password, bio=bio)
return redirect('/sign-in') # 회원가입이 완료되었으므로 로그인 페이지로 이동
상단에 아래코드 추가
# user/views.py
from django.contrib import auth # 사용자 auth 기능
내용 수정
# user/views.py
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = auth.authenticate(request, username=username, password=password) # 사용자 불러오기
if me is not None: # 저장된 사용자의 패스워드와 입력받은 패스워드 비교
auth.login(request, me)
return HttpResponse("로그인 성공")
else:
return redirect('/sign-in') # 로그인 실패
elif request.method == 'GET':
return render(request, 'user/signin.html')