ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] 사용자 app 생성하기 _Mac
    파이썬/Django 2022. 12. 27. 01:50
    728x90
    반응형

    모델 커스텀하기

    사용자가 컨트롤할 수 있는 부분을 특정하는 것을 모델 커스텀이라고 한다.

    예를 들어, 사용자가 로그인할 때에는 비밀번호가 아니라 소셜 로그인으로만 가능하도록 한다던가, 프로필 이미지를 추가한다던가, 포스트의 경우 열람만 가능하고 삭제는 할 수 없게 한다던가 하는 것들이 그것이다.

     

    User Model 커스텀하기

     

    코드 컨벤션을 위한 black 설치하기

    black이란? Python Formatter

    코드 통일 및 재사용을 위해 code convention을 진행하고 code style이나 format을 설정한다.

    여기서 black은 파이썬 코드 스타일인 pep8에 따라 코드를 자동으로 포맷해준다.

    pip3 install black

     


    users의 app 생성하기

    python manage.py startapp users

    위 명령을 입력하면 uesrs 폴더가 새로 생긴다.

     

    여기서 앱이 뭔지 헷갈리면 접은 글을 참고하자.

    더보기

    장고에서 말하는 app이란?

    app(폴더)는 프로젝트의 구성 단위이다. 숙박업체 예약서비스를 만든다고 가정하면 숙소정보를 담은 house app과 사용자 정보를 담는 uesr app, 리뷰를 볼 수 있는 review app 등등이 필요할 것이다.

    이제 Django의 user를 상속받는 우리만의 user를 생성할 것이다.

     

    https://docs.djangoproject.com/en/4.1/topics/auth/customizing/

     

    Django

    The web framework for perfectionists with deadlines.

    docs.djangoproject.com

     

    📁 users/models.py

    from django.db import models
    
    # Create your models here.
    class User(models.Model):
        pass

    대신 models.Model 을 상속하는 위와 같은 방식은 사용하지 않을 것이다.

    이는 user를 처음부터 다 만든다는 것을 의미하기 때문이다. 우리는 Django에서 제공하는 user를 상속받는다.

     

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    # Create your models here.
    class User(AbstractUser):
        pass

    이렇게 말이다.

    import AbstractUser 부분을 커맨드 키를 누른 상태로 클릭해보면 정말 많은 것을 제공해주는 것을 볼 수 있다.

    여기서 우리는 커스텀 user를 사용할 것이기 때문에 Django에게 그 사실을 알려주기 위해 settings.py에 변수를 추가해야 한다.

    공식문서에 나와있는대로 AUTH_USER_MODEL = 'myapp.MyUser' 를 입력해주면 된다.

     

    📁 config/settings.py

    # Auth
    
    AUTH_USER_MODEL = 'users.User'
    # Application definition
    
    CUSTOM_APPS = [
        'houses.apps.HousesConfig',
        'users.apps.UsersConfig' # users app 설치하는 문구
    ]

    그리고 같은 settings.py 폴더 내에 user app을 설치한다.

     

     

    기존에 있던 사용자 정보로 인해 오류가 뜬다면 기존의 데이터베이스 파일 db.sqlite3와 migration 내부의 파일을 삭제해준다.

    이 migration '파일'만 삭제하기(중요)

     

    그리고 다시 서버를 구동해보기 전에 먼저 새로 마이그레이션을 생성한다.

    python manage.py makemigrations

    두 개의 마이그레이션이 생성되었는데 각각 houses와 users를 위한 것이다.

     

    마이그레이션 생성했으니 이제 migrate 해주기

    python manage.py migrate

     


    user 어드민 생성하기

     

    📁 users/admin.py

    from django.contrib import admin
    from django.contrib.auth.admin import UserAdmin
    from .models import User
    # Register your models here.
    
    @admin.register(User)
    class CustomUserAdmin(UserAdmin):
        pass

    houses admin을 만들었을 때와 마찬가지로 Django에서 제공해주는 UserAdmin을 사용한다.

     


    이제 서버를 구동해보자

    혹시 관리자 인증이 로그아웃 된 상태라면 데이터베이스를 다 지웠기 때문이다.

    관리자 생성하기

    더보기

    python manage.py createsuperuser

    서버를 구동해보면

     

     

    설정한대로 houses와 users 폴더가 각각 생성된 것을 볼 수 있다.

    LIST
Designed by Tistory.