23.4.6 3주차 복습 및 정리

HS L·2023년 4월 7일
1

정리

목록 보기
3/7

3주차 복습 및 정리

3-2. Django의 사용자 모델 비교하기 - 나vs장고

auth_user = 장고에서 미리 생성해준 데이터베이스 테이블
my_user = ORM을 사용해서 만든 데이터 베이스

3-3. 우리가 만든 User모델 업그레이드 하기

1. AbstractUser(auth_user) 상속하기

#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만 남겨둔다.

2. 사용자 관리테이블 변경하기(settings.py에 알려주기)

Django의 기본 사용자 관리 테이블이 auth_user로 지정돼있기 때문에 my_user로 변경 필요
settings.py에 user.UserModel(user app의 UserModel 클래스(=my_user))을 사용자 관리테이블로 지정해준다.
- settings.py에 아래 코드 추가
AUTH_USER_MODEL = 'user.UserModel'

3-4. User모델을 데이터베이스에 적용시키기

1. 만든 모델을 데이터베이스에 알려주기

- python manage.py makemigrations
- python manage.py migrate

2. 데이터베이스 확인하기

데이터베이스창 새로고침 후 my_user가 잘 적용됐는지 확인

3-5. Django의 사용자 모델을 적용하기 - 회원가입 수정하기

1. user/views.py 수정하기 - 회원가입 기능

상단에 아래 코드 추가
# 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') # 회원가입이 완료되었으므로 로그인 페이지로 이동

3-6. Django의 사용자 모델을 적용하기 - 로그인 수정하기

1. user/views.py 수정하기 - 로그인 기능

상단에 아래코드 추가
# 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')
profile
식이

0개의 댓글