실습 설명
포도마켓은 중고 물품 거래 웹사이트입니다. 유저는 물품 이름, 가격, 상태, 사진 등을 포함한 게시글을 올릴 수 있고, 다른 유저는 게시글을 보고 판매 유저한테 연락을 해서 물품 거래를 할 수 있습니다. 여러분은 이번 토픽의 실습으로 포도마켓 사이트를 만들게 될 겁니다.
(완성된 홈페이지 - 판매 중인 상품들을 확인할 수 있고 '자세히보기'를 클릭하면 상세 페이지로 이동합니다. 상세 페이지에서 판매 유저의 연락처를 확인할 수 있습니다.)
이번 토픽의 실습에서는 웹서비스에 필요한 모든 컴포넌트와 로직을 여러분이 직접 구현하게 될 겁니다. 실제 웹 개발을 하는 것처럼 말이죠. 웹서비스를 처음부터 끝까지 만드는 건 길고 복잡한 일이기 때문에 실습 양이 꽤나 많고 어렵다고 느끼실 수 있는데요. 그렇더라도 포기하지 마시고 힌트와 배운 내용들을 복습해 가면서 실습을 꼭 완료해 보세요. 아주 근사한 결과물을 만들게 될 거고, 그 과정 속에서 Django와 웹 개발에 대한 정말 많은 것을 배우게 되실 겁니다.
실습 과제
podomarket_project라는 django 프로젝트를 생성해 놓은 상태인데요. 아래 과제들을 여러분이 직접 해결해 볼 거예요.
- podomarket 앱을 생성하고, INSTALLED_APPS 목록에 등록해 주세요.
- AbstractUser를 사용해서 유저 모델을 만들고, AUTH_USER_MODEL을 설정해 주세요.
- migration을 만들고 적용해 주세요.
- 유저 모델을 어드민 페이지에 등록하고 아래 정보로 슈퍼유저를 만들어 주세요. (로컬 환경에서 실습을 진행하신다면 아무 유저나 생성해도 되지만 코드잇 실행기로 실습을 진행하신다면 꼭 아래 정보를 사용해서 슈퍼유저를 만들어 주세요!)
- Username: admin
- Email: admin@example.com
- Password: django123
- django-allauth 패키지는 이미 설치된 상태입니다 (pip install은 따로 안 하셔도 됩니다). django-allauth 패키지를 프로젝트에서 사용하도록 셋업해 주세요. (공식 문서와 allauth 셋업 영상을 참고하세요.)
- URL은 empty pattern ('')에 연결해 주세요.
- 이메일은 콘솔로 보내지도록 EMAIL_BACKEND도 설정해 주세요.
- 서버를 켜고 (python manage.py runserver 0.0.0.0:8000),
- 로그인 페이지 (login/)에 잘 접속되는지 확인해 보세요.
- 어드민 페이지 (admin/)에도 잘 접속되는지 확인해 보세요. 생성한 슈퍼유저 계정으로 로그인해 보세요.
풀이
1. podomarket 앱을 생성하고, INSTALLED_APPS 목록에 등록해준다.
새로운 앱은 startapp 커맨드를 사용해서 만들 수 있다.
터미널
python manage.py startapp podomarket
podomarket_project/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'podomarket',
]
새로운 앱을 만들면 INSTALLED_APPS 에 추가해야한다.
2. AbstractUser를 사용해서 유저 모델을 만들고, AUTH_USER_MODEL을 설정해 주세요.
podomarket/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
pass
AbstractUser를 사용해서 유저 모델을 만들 때는 AbstractUser를 임포트해서 상속받기만 하면 된다.
podomarket_project/settings.py
# Auth settings
AUTH_USER_MODEL = 'podomarket.User'
커스텀 유저 모델을 사용할 때는 꼭 AUTH_USER_MODEL을 설정해준다.
3. migration을 만들고 적용해 주세요.
첫 migration을 만들고 적용
터미널
python manage.py makemigrations
python manage.py migrate
4. 유저 모델을 어드민 페이지에 등록하고 슈퍼유저를 만들어 준다.
유저 모델은 어드민 페이지에서 중요한 역할을 하기 때문에 특별한 인터페이스가 제공되는데, 이 인터페이스를 사용하려면 UserAdmin이라는 클래스를 같이 등록해 줘야 한다.
podomarket/admin.py
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User
admin.site.register(User, UserAdmin)
그리고 슈퍼유저는 createsuperuser 커맨드를 통해 만들 수 있다.
python manage.py createsuperuser
5. django-allauth 패키지는 이미 설치된 상태이다.(pip install은 따로 안해도 된다.) django-allauth 패키지를 프로젝트에서 사용하도록 셋업
- URL은 empty pattern ('')에 연결해 주세요.
- 이메일은 콘솔로 보내지도록 EMAIL_BACKEND도 설정해 주세요.
설치 방법은 https://django-allauth.readthedocs.io/en/latest/installation.html 여기서 찾을 수 있는데
먼저 AUTHENTICATION_BACKENDS를 추가해준다.
podomarket_project/settings.py
# Auth settings
AUTH_USER_MODEL = 'podomarket.User'
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 목록에 필요한 앱들을 설치해준다.
podomarket_project/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'podomarket',
'allauth',
'allauth.account',
'allauth.socialaccount',
]
django.contrib.sites를 사용하기 때문에 SITE_ID를 설정해준다.
podomarket_project/settings.py
INSTALLED_APPS = [
...
]
SITE_ID = 1
그리고 allauth URL을 프로젝트에 추가해준다.
podomarket_project/settings.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('allauth.urls')),
]
accounts/login/이 아닌 login/을 사용할 거기 때문에 empty pattern ('')에 연결해준다.
이메일은 콘솔로 보내지도록 EMAIL_BACKEND도 설정
podomarket_project/settings.py
...
# Email settings
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
6. 서버를 켜고 (python manage.py runserver 0.0.0.0:8000),
- 로그인 페이지 (login/)에 잘 접속되는지 확인해보고
- 어드민 페이지 (admin/)에도 잘 접속되는지 확인. 생성한 슈퍼유저 계정으로 로그인
터미널
python manage.py runserver 0.0.0.0:8000
서버를 켠 다음, '웹 페이지 열기' 버튼을 누른 다음 login/, admin/ 페이지로 들어가서 확인해본다.
'BackEnd > Django 유저 기능 구현하기' 카테고리의 다른 글
[유저 기능과 django-allauth 패키지] 포도마켓: 필드추가하기 (0) | 2023.04.11 |
---|---|
[유저 기능과 django-allauth 패키지] 포도마켓: 이메일 로그인, 로그인 기억하기 (0) | 2023.04.11 |
[유저 기능과 django-allauth 패키지] 포도마켓: 홈페이지 만들기 (2) | 2023.04.06 |
[유저 기능과 django-allauth 패키지] django-allauth, 유저 모델 퀴즈 (0) | 2023.04.06 |
[유저 기능과 django-allauth 패키지] 패키지 vs 앱 (0) | 2023.04.06 |