이번 포스팅에서는, View의 CRUD 처리를 추가하고 django/restframework
의 User 등록관련 모듈을 추가하여 권한처리를 위한 최소 준비를 해보자.
User 회원등록 / 로그인 기능을 추가하자
django
에서는 restframework
라는 API 개발 라이브러리를 추가하여 간단히 회원관련 기능을 만들 수 있다.
먼저 필요한 라이브러리를 pip
커맨드를 이용하여 설치한다.
아래 커맨드를 실행한다.
pip install django-allauth
pip install django-rest-auth
문제 없이 설치되었다면 settings.py
에서 아래 앱들을
'allauth',
'allauth.account',
'allauth.socialaccount',
'rest_auth',
'rest_auth.registration',
INSTALLED_APPS
배열에 추가하자
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'rest_framework',
'allauth',
'allauth.account',
'allauth.socialaccount',
'rest_auth',
'rest_auth.registration',
'dashboard_core',
]
다음으로는, User가 접근할 회원가입 관련 URL을 매핑해준다.
velog_series_01/dashboard/dashboard/urls.py
파일을 열고 아래와 같이 편집한다.
from django.contrib import admin
from django.urls import include, path
from rest_framework.routers import DefaultRouter
from dashboard_core.views import PostViewSet
router = DefaultRouter()
router.register(r"posts", PostViewSet, basename="post_status")
urlpatterns = [
path('', include(router.urls)),
path('admin/', admin.site.urls),
path('api-auth/', include('rest_framework.urls')),
path('rest-auth', include('rest_auth.urls')),
path('rest-auth/registration', include('rest_auth.registration.urls')),
]
이제 회원가입에 관련된 앱들도 설치했고 자동으로 해당하는 모델이 추가되었기 때문에, DB와 sync를 맞추기 위해 Migrate
가 필요하다.
아래 커맨드를 실행하자.
python manage.py migrate
무사히 성공한다!
마지막으로 settings.py
파일 맨 아래에 회원 인증 방식에 대한 설정과, site 번호를 넣어준다.
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
]
}
SITE_ID = 1
이제 서버를 실행하고, http://127.0.0.1:8000/
에 접속해보자.
오른쪽 상단에 Login
버튼에 생겼다.
버튼을 눌러, 관리자 계정으로 로그인 해보자.
로그인 한뒤에, Post
URL로 이동해보자.
아래를 보면 회원 로그인이 된 상태여서, Post
Model에 새로운 게시글을 작성할 수 있게 되었다.
다음 포스팅에서는, 유저를 등록할 수 있는 화면을 간단히 구성해보고 이를 Post
Model 등록 권한과 연계하면서 CRUD API를 만들어 보도록 하자.
Thank you!