본 포스트는 코드잇 'Django 웹 개발' 강의 일부를 정리▪요약한 내용입니다
유저 기능을 구현하는데 쓰이는 장고에 포함된 앱
contrib = contributed(기여하다)
auth = authentication(유저인증)
django 앱 구성
django.contrib.auth도 동일함
django.contrib.auth 대신 django-allauth 사용!
User
AbstractUser
nickname = models.CharField(..)
)AbstractBaseUser
User 모델 정의(생성)
AbstractUser import
coplate/models.py
from django.db import models
# AbstractUser 사용
from django.contrib.auth.models import AbstractUser
# Create your models here.
# AbstractUser 상속받는 유저 클래스 생성 - 일단 틀만 생성(pass)
class User(AbstractUser):
pass
User 모델 정의(등록) 후 AUTH_USER_MODEL 설정하기 (중요!)
# ... 생략
# 맨 아래에 추가
AUTH_USER_MODEL = "coplate.User"
User모델이 변경되었으므로 migration 해줌
python manage.py makemigrations
Migrations for 'coplate':
coplate\migrations\0001_initial.py
- Create model User
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, contenttypes, coplate, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0001_initial... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying coplate.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying sessions.0001_initial... OK
User model을 admin 페이지에 등록
coplate/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
# Register your models here.
# User모델은 User admin을 같이 등록해줘야 함!
# UserAdmin 클래스는 User모델에 대해서 특별한 인터페이스 제공
admin.site.register(User, UserAdmin)
User모델은 UserAdmin을 같이 등록해줘야 함!
UserAdmin 클래스는 User모델에 대해서 특별한 인터페이스 제공
superuser 생성하여 admin 페이지에 접속하기
python manage.py createsuperuser
pip install
pip install django-allauth
settings.py에 여러 가지 setting 추가하기
'django.contrib.auth.backends.ModelBackend',
추가'allauth.account.auth_backends.AuthenticationBackend',
추가AUTHENTICATION_BACKENDS = [
# Needed to login by username in Django admin, regardless of `allauth`
'django.contrib.auth.backends.ModelBackend',
# `allauth` specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',
]
여러 앱들을 INSTALLED_APPS 목록에 추가해줘야함
필수 항목
'auth'와 'messages'는 이미 존재하는 앱이므로 생략
#'django.contrib.auth',
#'django.contrib.messages',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.서비스명
은 소셜로그인과 관련된 것 (원하는 것만 가져다 사용)
코드
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'coplate',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
SITE_ID도 추가
SITE_ID = 1
'django.contrib.sites',
는 어떤 기능을 여러 웹사이트에서 사용할 수 있게 해주는 것SITE_ID = 1
임!SOCIALACCOUNT_PROVIDERS 는 소셜로그인과 관련된 부분이므로 일단 생략
URL 패턴 추가 (urls.py)
url 패턴
urlpatterns = [
...
path('accounts/', include('allauth.urls')),
...
]
❗하지만 이대로 추가하면 'acccounts/' + 'allauth의 url'
형태가 됨❗ ➡ 지저분
깔끔하게 login, signup만 url에 나오도록 하기 위해서‼
urls.py
에 'accounts/`없이 추가!from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('allauth.urls')),
]
문서에 없는 추가 setting
"django.core.mail.backends.console.EmailBackend"
는 터미널 콘솔로 이메일을 보내도록 하는 설정# Email settings
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
문서에 따라서 allauth를 설치해주기만 하면 기본적인 auth 관련 페이지들이 자동으로 set-up됨
❗변경된 auth를 server에서 확인하기 전에 app을 여러 개 추가했으므로 다시 한 번 migration
진행❗
python manage.py migrate
Server에서 확인하기
python manage.py runserver
http://localhost:8000/login/
로 직접 입력해서 들어가기확인 결과
Sign In
, Sign Up
, Forgot Password?
, Remember Me
등의 페이지와 기능들을 만들어준 적이 없지만 allauth를 우리 프로젝트에 설치만 해주면 이러한 기능들이 모두 제공됨