[Django REST Framework] 사용자 지정 사용자로 프로젝트 빌드
13691 단어 django-rest-frameworkMac장고React
실행 환경
MacOS BigSur - 11.2.1
Python3 - 3.8.2
장고 - 3.1.7
djangorestframework - 3.12.2
Django REST Framework (DRF) 시작하기
지금까지 Django만을 이용한 Web 어플리케이션의 작성을 하고 있었습니다만, 프런트 엔드의 고도화를 할 수 없고, DRF를 이용해 React와 조합해 보고 싶다! ! ! 라고 생각했습니다. React에 관해서는 아직 지식이 적습니다만, 우선 DRF의 감각을 잡아 보려고 생각해, 프로젝트 작성을 했으므로 그 순서를 메모가 굳이 기술합니다.
DRF란?
참고로 DRF는 Django에서 WebAPI 개발을 지원하는 API 프레임 워크입니다. 웹 콘솔에서 API의 동작 확인이 가능하고, 이것에 의해 프런트 엔드와 백엔드를 분리해 어플리케이션 개발을 효율적으로 진행할 수 있다고 합니다.
venv의 가상 환경
$ python3 -m venv DRFenv
$ . DRFenv/bin/activate
위 명령을 사용하여 DRF 용 venv를 만들고 활성화합니다.
필요한 패키지 설치
여기에서는 가상 환경에 들어가는 명령이 됩니다.
$ pip3 install django
$ pip3 install djangorestframework
프로젝트 애플리케이션 작성
$ django-admin startproject my_api
$ python3 manage.py startapp backend
프로젝트 이름을 "my_api", 응용 프로그램 이름을 "backend"로 지정합니다.
사용자 정의 사용자 모델 정의
그런데, 전회 Django로 개발을 진행하고 있을 때에 커스텀 유저 모델 되는 것을 도중에 알고, 엉망진창 코드를 괴롭혔습니다만 도중부터 잘 유저 모델의 변경을 할 수 없었다고 하는 실패가 있었습니다.
Django에서는 커스텀 유저를 작성하는 경우는 최초의 migration의 init(0001) 시점에서 커스텀 유저를 사용하는 것을 포함하지 않으면 안 되는 것 같아, 그래서 제일 먼저 커스텀 유저 모델의 정의를 실시합니다!
my_api/backend/models.py
from django.db import models
# AbstractBaseUserを利用してUserモデルをカスタマイズ
from django.contrib.auth.models import AbstractBaseUser
# PermissionsMixinを用いてUserの認証を行う
from django.contrib.auth.models import PermissionsMixin
# BaseUserManager利用してUserManagerモデルをカスタマイズ
from django.contrib.auth.models import BaseUserManager
class UserProfileManager(BaseUserManager):
"""Manager for user profiles"""
# ユーザを作成するメソッド
def create_user(self, email, name, password=None):
"""Create a new user profile"""
# emailが入力されていないときはValueErrorを呼び出す
if not email:
raise ValueError('User must have an email address')
# emailのドメインを小文字に変換
email = self.normalize_email(email)
# UserProfileモデルを参照してuserを定義
user = self.model(email=email, name=name)
# userが入力したパスワードをハッシュ化
user.set_password(password)
# settings.pyでdefaultに設定されているDBに保存
user.save(using=self._db)
return user
def create_superuser(self, email, name, password):
"""Create and save a new superuser with given details"""
# 上記create_userを利用
user = self.create_user(email, name, password)
# superuserの権限を適用
user.is_superuser = True
user.is_staff = True
user.save(using=self._db)
return user
class UserProfile(AbstractBaseUser, PermissionsMixin):
"""Database model for users in the system"""
# カラム名 = データ型(オプション)
email = models.EmailField(max_length=255, unique=True)
name = models.CharField(max_length=255)
# ユーザが退会したらここをFalseにする(論理削除)
is_active = models.BooleanField(default=True)
# 管理画面にアクセスできるか
is_staff = models.BooleanField(default=False)
# Managerのメソッドを使えるようにする
objects = UserProfileManager()
# emailを利用したログイン認証に変更
USERNAME_FIELD = 'email'
# 必須項目追加
REQUIRED_FIELDS = ['name']
# 1つのnameフィールドで表示したいので、既存のメソッドをオーバーライド
def get_full_name(self):
"""Retrieve full name of user"""
return self.name
def get_short_name(self):
"""Retrieve short name of user"""
return self.name
def __str__(self):
return self.email
settings.py 변경
my_api/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', #追加
'markdownx', #追加
'backend', #追加
]
LANGUAGE_CODE = 'ja' #変更
TIME_ZONE = 'Asia/Tokyo' #変更
REST_FRAMEWORK = { #追加
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.AllowAny',
]
}
# Djangoプロジェクトのユーザ認証を変更
AUTH_USER_MODEL = 'backend.UserProfile'
# 画像用
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
관리 화면(admin)에 추가
my_site/backend/admin.py
from django.contrib import admin
from backend import models
admin.site.register(models.UserProfile)
마이그레이션 파일 작성 및 데이터베이스 반영
$ python3 manage.py makemigrations
$ python3 manage.py migrate
수퍼유저 만들기
$ python3 manage.py createsuperuser
이 명령은 관리 페이지에 로그인할 수 있는 수퍼유저를 작성합니다.
명령을 실행하면 이메일 주소, 이름, 비밀번호를 입력하라는 메시지가 표시되므로 자유롭게 설정합니다.
서버 시작 및 시작 확인
$ python3 manage.py runserver
이 명령은 서버를 시작합니다.
htp://127.0.0.1:8000/
위로 가서 로켓 화면이 나오면 제대로 작동합니다.
htp://127.0.0.1:8000/아d
또한 위에서 관리 페이지에 액세스할 수 있습니다. 사용자 지정 사용자가 이메일 주소와 비밀번호로 인증하도록 설정했으므로 이와 같이 사용자 지정할 수 있는지 확인합니다.
이번에는 이것으로 개발 환경의 작성은 완료입니다.
다음 번부터 실제로 개발을 진행해 나가려고 생각합니다.
참고
이하의 페이지가 매우 알기 쉽게, 참고로 했습니다.
- h tps://일 gbぉg. 오 rg / d 짱고 레 stf 반짝이 rk 뿌리 C4
- htps : // 코 m / 피요 판만 / ms / 5 fb9c290d452 005782
Reference
이 문제에 관하여([Django REST Framework] 사용자 지정 사용자로 프로젝트 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kachuno9/items/52a756f15207f625f358텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)