프로젝트 생성
티스토리 백업 데이터를 이용한 이사가 가능한 장고 웹사이트를 만들기 위해, 먼저 새로운 프로젝트를 생성한 다음,
"seolpyo_tistory"라는 이름의 app을 만들었습니다.
(django) C:\django\mysite>django-admin startproject config .
(django) C:\django\mysite>django-admin startapp seolpyo_tistory
기초 설정
기초 설정은 이전에 작성한 장고 기초 설정 방법을 그대로 적용했습니다.
models.py를 지우고 models 폴더를 만든 다음, user.py를 다음과 같이 작성했습니다.
username 필드를 닉네임으로 사용하고 최대 10글자까지 입력할 수 있도록 했습니다.
또한 validator를 작성해 공백, 한글, 영어, 숫자만 사용 가능한 최소 3글자를 입력하도록 했습니다.
first_name과 last_name은 한국에서는 사용하지 않는 이름 형식이기 때문에 None으로 선언합니다.
# seolpyo_tistory/models/usermodel.py
from re import findall
from django.contrib.auth.models import AbstractUser
from django.core.validators import BaseValidator
from django.db import models
class UsernameValidator(BaseValidator):
message = '닉네임은 한글, 영어, 숫자만 사용할 수 있으며, 단어 사이 공백은 1개만 사용할 수 있습니다.'
def __init__(self, limit_value=3, message: str=None):
super().__init__(limit_value, message)
def compare(self, a, b):
if len(a) < b:
self.message = f'닉네임은 최소 {b}글자 이상이어야 합니다.'
return True
return a != ' '.join(findall('[a-zA-Zㄱ-ㅎ가-힣0-9]+', a))
class BaseUser(AbstractUser):
class Meta:
abstract = True
first_name, last_name = (None, None)
email = models.EmailField(verbose_name='로그인 이메일', unique=True,)
username = models.CharField(
verbose_name='닉네임',
max_length=10,
unique=True,
help_text='닉네임은 한글, 영어, 숫자만 사용가능합니다.',
validators=[UsernameValidator()],
)
REQUIRED_FIELDS = ['username']
USERNAME_FIELD = 'email'
def __str__(self): return self.username
class User(BaseUser):
pass
models 디렉토리의 __init__.py에 User class를 추가하고, tistory app을 사용할 수 있도록 settings.py를 적절하게 수정했습니다.
# seolpyo_tistory/models/__init__.py
from .usermodel import User
# config/settings/settings.py
...
INSTALLED_APPS = [
'seolpyo_',
...
]
...
AUTH_USER_MODEL = 'seolpyo_.User'
...
새로운 app을 추가했으니 마이그레이션도 잊지 않구요.
(django) C:\django\mysite>python manage.py makemigrations
(django) C:\django\mysite>python manage.py migrate
슈퍼계정을 만들어봅니다.
vaildator가 제대로 작동하는 것을 확인할 수 있습니다.
(django) C:\django\mysite>python manage.py createsuperuser
닉네임: ㄴㄴ
Error: 닉네임은 최소 3글자 이상이어야 합니다.
닉네임: aa+awef
Error: 닉네임은 한글, 영어, 숫자만 사용할 수 있으며, 단어 사이 공백은 1개만 사용할 수 있습니다.
닉네임: aaaaaaaaaaaaaaaaa
Error: 이 값이 최대 10 개의 글자인지 확인하세요(입력값 17 자).
닉네임: 하얀설표
이메일 주소: admin@seolpyo.com
Password:
Password (again):
Superuser created successfully.
(django) C:\django\mysite>
이 글의 댓글 기능은 일부러 막아놓았습니다. 궁금한 내용이 있다면 게시판을 이용해주세요!