초보 개발자

first django startapp user 본문

Python/airbnb 클론

first django startapp user

taehyeki 2022. 1. 20. 18:56

django-admin을 사용해서 첫 앱을 만들어보자 

앱의 이름은 복수형태로 만들어주어야 한다.

django-admin startapp rooms
django-admin startapp lists
django-admin startapp reviews
django-admin startapp users
django-admin startapp conversations

앱 안에 있는 이름들은 절대 변경해선 안된다. 파일명 변수명

장고는 각 정해진 파일, 변수를 지켜보고 있기 때문이다.

하지만 생성하는 것은 자유롭다. urls.py를 비롯해 몇가지 파일을 생성할 것이다.

장고에서 기본적으로 제공하는 user모델이 있는데 많은 기능을 충분히 제공하고 있지만, ( 유효성검사, 권한 등 )

우리는 이걸 좀 더 확장해서 쓰려고 한다. 프로필 사진을 추가한다던지, 생일 등

 

 

장고 도큐먼트로 가면 

'프로젝트에 따라 요구 사항이 다르기 때문에 장고에서 제공하는 user모델이 맞지 않을 수 있다. 장고에서는 user모델을 덮어쓰려면 AUTH_USER_MODEL 값을 설정해야 한다.' 라고 적혀있다.

 

user/models.py 에 가서 user모델을 만들어주자.

 

 

대부분의 경우 models.Model을 상속하여 모델을 만드는데 User모델은 다른걸 상속해볼 것 이다.

 

장고는 유저 어플리케이션이 미리 주어져있다.  다양한 기능이 탑재되어있다. 

User모델에는 admin페이지에서 사용되고 있는 걸 사용하려고 한다.

그러기 위해선 AbstarctUser을 상속받아야한다.

 from django.contrib.auth.models import AbstractUser

일단 먼저 config/settings에 가서 한가지 추가를 하자. 우리가 등록한 앱은 settings에 적어주어야한다.

적지 않으면 장고가 읽어오지 못한다. 우린 많은 앱을 추가해야한다.

따라서 먼저 설치된 앱(DJANGO_APP)과 우리가 설치한 앱(PROJECT_APP)을 구별시켜주어 보기 깔끔하게 정리해주었다.

 

 

 

이렇게 하고나면  오류가 발생한다.  이유는  User모델 테이블을 우리가 만든 모델로 바꿈으로써 관리자와 관련된 정보들이 제대로 셋팅되지 않아있기에 데이터베이스를 지우고 실행시켜주는 것

->

우리는 User모델을 만들어 주었다. 근데 장고가 그걸보고 User모델은 이미 존재해 (기존 장고의 모델이름도 User)라고 말하는 것이다. 따라서 기존 데이터베이스를 지우고, settings에가서 그리고 AUTH_USER_MODEL = 'users.User'을 적어주면 된다.

일단 db.sqlite3을 삭제해주자 (migrations도 지워야할지도)그 이유는 우리가 이전에 사용하던 기존 admin User모델에서 우리의 새로운 User모델로 바꾸기 때문이다. 이를 지우지 않고 한다면 다른 부분까지 영향을 미치기 때문이다.

다시 makemigrations를하면 잘 만들어 진 것을 확인할 수 있다. migrate해서 적용시켜주자.

 

User의 migration을 보면 우리는 아무것도 안적어주고 상속만 받았는데 이 기능들을 쓸 수 있게 된 것이다.

이건 아까 우리가 admin페이지에서 보던 그 기능들이다.

이제 User에 기능들을 추가해보자. 그전에 admin페이지로 가면

빨간색 자리에 User라고 원래 있었는데 사라진 것을 볼 수 있다.

이건 우리가 default User를 기존 admin User가 아니라 우리의 User로 바꾸고 다시 admin에 등록해주지 않아서이다. 일단 이거 먼저 등록을 해보자 등록을하면 밑에 생길 것이다.

users.admin.py

일단 이렇게 등록을 해주자. 이거에 대해서는 좀이따 배운다고 한다.

다시 어드민 페이지에 가면 아래와 같이 바뀐 걸 확인할 수 있다.

다시 돌아가서 

bio를 추가하고 admin페이지로 가보자!

그럼 user.bio라는 게 없다면서 오류를 내보낸다. 이렇게 장고는 우리의 모델이 바뀌면 금새 알아차린다.

근데 테이블에 bio라는게 없으니 오류가 난 것이다 따라서 makemigrations migrate를 하면 오류가 해결 될 것이다.

admin페이지에 잘 접속이 되었고 bio필드도 생긴 것을 확인할 수 있다.

 

우리가 한 것

먼저 app들을 만들고, settings에 추가해주었다.

User라는 모델을 AbstarctUser을 상속하여 만들고 settings에 AUTH_USER_MODEL를 추가해주었다.(user.User)

sqlite를 삭제해주고 makemigrations와 migrate를 진행시켰다.

admin페이지에 등록해주었다.

User에 bio필드를 추가하고 makemigration과 migrate를 진행해주었다.

 

 

 

 

 

'Python > airbnb 클론' 카테고리의 다른 글

User admin패널 활용 및 User Model 완성  (0) 2022.01.23
field옵션들, default, choices, blank, null  (0) 2022.01.22
Django app 계획 방법  (0) 2022.01.19
Django first migrate  (0) 2022.01.19
createsuperuser  (0) 2022.01.19