본문 바로가기
App Programming/Django

[Django] REST API

by goatlab 2023. 2. 21.
728x90
반응형
SMALL

REST API

 

 

장고에서 클라이언트 (사용자) 인증이나 컨텍스트 (세션, 로그인 정보)등을 직접 관리하는 REST API 툴킷이 존재한다.

 

docker run -it -p 9998:8000 -p 9997:3000 -v ${PWD}:/code --name project-01 --net project project:test

 

장고 패키지를 설치한다.

 

/code # pip install django
/code # pip install djangorestframework
/code # pip install psycopg2-binary
/code # pip install Pillow
/code # pip freeze

 

다음을 수행하면 간단한 형태의 프로젝트가 생성된다.

 

/code # django-admin startproject service

 

그 다음, service 프로젝트로 이동하여 회원의 기능을 담당하는 users 프로젝트를 생선한다. 또한, service 프로젝트 폴더 안에 폴더를 생성하여 파일을 만들어도 무방하다.

 

/code # cd service/
/code # django-admin startapp users

 

settings.py

 

services 폴더의 settings.py에 다음을 추가한다.

 

INSTALLED_APPS = [
	'rest_framework',
    'users',
]

DATABASES = {
	'default': {
    	'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'service',
        'USER': 'admin',
        'PASSWORD': '123456',
        'HOST': 'project-db', # 127.5.81.9
        'PORT': 5432
    }
}
/code/service # pip install tzdata
/code/service # pip freeze
AUTH_USER_MODEL = 'users.USER'

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication'
    ),
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 5
}

 

models.py

 

users 프로젝트의 models.py에서 다음을 추가한다.

 

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.base_user import BaseUserManager

class UserManager(BaseUserManager):
	def create_user(self, email, password, **extra_fields):
    	email = self.normalize_email(email)
        extra_fields.setdefault('is_active', True)
        user = self.model(email = email, **extra_fields)
        user.set_password(password)
        user.save()
        
        return user
        
    def create_superuser(self, email, password, **extra_fields):
    	extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)
        
        return self.create_user(email, password, **extra_fields)

class User(AbstractUser):
	TIMEOUT = 60 * 5 # 입력 제한 시간
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

	email = models.EmailField(max_length = 256, unique = True)
    username = models.CharField(max_length = 128, unique = True)
    password = models.CharField(max_length = 128, null = True, blank = True)
    profile = models.ImageField(null = False, blank = True)
    description = models.CharField(max_length = 512, blank = True)
    authcode = models.CharField(max_length = 17)
    
    created = models.DateTimeField(auto_now_add = True)
    updated = models.DateTimeField(auto_now = True)
    
    objects = UserManager()
    
    class Meta:
    	ordering = ['created'] # 어떤 순서로 가져 올지 정함

 

urls.py

 

users 프로젝트 폴더에 urls.py를 만든다.

728x90
반응형
LIST

'App Programming > Django' 카테고리의 다른 글

[Django] 프론트엔드 페이지  (0) 2023.02.22
[Django] 시리얼라이저 (Serializer)  (0) 2023.02.22
[Django] 프로젝트 생성  (0) 2023.02.20
[Django] 기본 요소 (2)  (0) 2023.02.20
[Django] 기본 요소 (1)  (0) 2023.02.20