TIL 4주 1일차 DJANGO 강의 실습 3주

노우석·2022년 9월 26일
0

3주차 순서

- Django에서 제공하는 사용자 관리 기능을 사용 해 보기

- Django에서 제공하는 사용자 모델 확장하기

- 포스트 읽기 / 쓰기 / 삭제 하기

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

auth_user는 장고에서 미리 생성 해 준 데이터베이스 테이블이고, my_user는 우리가 ORM을 사용해서 만든 데이터베이스 테이블이다.

우리가 만든 테이블보다 Django에서 제공한 테이블이 훨씬 담을 수 있는 내용이 많다. 하지만 bio라는 상태메시지를 표현하는 기능은 Django 테이블안에 없으니 두개에 장점을 합쳐서 모두 사용가능한 테이블을 만들 수 있다.

내가 만든 User모델 업그레이드 하기

클래스 상속을 이용하면 가능하다.

class B에서 class A의 기능들을 사용 하고싶을 때

class B(A):

def 기능_B_1:

return '기능_B_1'

이 클래스 상속을 이용한 코드

#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)

class UserModel 의 인자에 (models.Model)를 상속받은 코드
UserModel에서 models.Model 클래스의 기능들을 사용한다는 뜻이다.

이 내용을 응용해서, 장고의 유저 모델 + 나의 모델 작업 해보기

from django.db import models
from django.contrib.auth.models import AbstractUser

#Create your models here.
class UserModel(AbstractUser):

class Meta:
    db_table = "my_user" # 여기는 테이블 이름

bio = models.TextField(max_length=500, blank=True)

Django는 auth_user를 사용자 관리 테이블로 지정 해 놓았기때문에. 내가 만든 모델로 이것을 바꾸려면 Django에게 알려주어야 한다. 가장 처음 만든 mySpartaSns라는 앱에 auth_user 모델을 바꾸었다고 알려주기

명령어 입력

python manage.py makemigrations

python manage.py migrate

데이터베이스 확인하기

모델이 합쳐져 있는것을 볼 수 있다.

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

이제 장고는 AUTH_USER_MODEL = 'user.UserModel' 을 기본 모델로 인식한다.

user앱의 views.py를 수정 하려고 한다. 회원가입은, sign_up_view 함수에 작성 했었으니 가서 수정하면 된다.

회원가입 할 때, 이미 있는 유저인지 검색을 위해서 기능을 추가

#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 = get_user_model().objects.filter(username=username)
        if exist_user:
							return render(request, 'user/signup.html') # 사용자가 존재하기 때문에 사용자를 저장하지 않고 회원가입 페이지를 다시 띄움
        else:
            UserModel.objects.create_user(username=username, password=password, bio=bio)
            return redirect('/sign-in') # 회원가입이 완료되었으므로 로그인 페이지로 이동

회원가입 기능을 수정하는 부분까지 실습해보았다.

코드를 해석하는게 조금씩 어려워지고 있는 것 같다.수정하는 부분에 대한 강의를 복습해야한다.

profile
중요한건 버그에게 꺾이지 않는 마음

0개의 댓글