[장고] 중복 없는 무작위 문자열 기본값 설정하기
웹 애플리케이션을 개발하다 보면 각 페이지에 고유한 URL이 필요할 때가 있습니다. 이때, 자동으로 고유한 코드를 생성해 주는 방법을 소개합니다.
알고리즘
알고리즘은 다음과 같이 간단합니다:
- 특정 문자열 그룹에서 무작위로 문자열을 선택합니다.
- 선택된 문자열들을 하나의 문자열로 결합합니다.
- 결합된 문자열이 중복되지 않는지 확인합니다. 중복될 경우 1단계로 돌아가고, 중복되지 않으면 해당 값을 저장합니다.
유니크 코드 만들기
코드 생성하기
우선 필요한 라이브러리를 불러옵니다:
import string, random
이제 8자리의 코드를 생성해 보겠습니다:
code = ''.join(random.choices(string.ascii_lowercase), k=8)
여기서 random.choices는 주어진 문자열 리스트에서 입력된 개수만큼 무작위로 선택해 리스트로 반환합니다. string.ascii_lowercase는 소문자 알파벳 문자열을 제공합니다. 이 리스트의 요소들을 공백 없이 연결하여 하나의 코드로 만듭니다. 이를 join 메서드를 통해 구현합니다.
중복 확인
생성된 코드의 중복 여부를 확인하기 위해 Django ORM의 filter와 exists 메서드를 사용합니다:
CustomUser.objects.filter(code=code).exists()
while 문을 사용하여 코드를 반복 생성하고, 중복되지 않는 경우에만 루프를 종료합니다:
while True:
code = ''.join(random.choices(string.ascii_lowercase), k=8)
if not CustomUser.objects.filter(code=code).exists():
break
이제 이 과정을 함수로 만들어 보겠습니다:
def generate_unique_code():
while True:
code = ''.join(random.choices(string.ascii_lowercase, k=8))
if not CustomUser.objects.filter(code=code).exists():
break
return code
기본 값으로 설정
이제 생성한 유니크 코드를 장고 모델의 기본 값으로 설정해보겠습니다. 예를 들어, CustomUser 모델에서 code 필드의 기본 값을 설정하려면 아래와 같이 작성합니다:
from django.db import models
class CustomUser(models.Model):
code = models.CharField(max_length=8, default=generate_unique_code, unique=True)
위와 같이 설정하면 새로운 CustomUser 인스턴스가 생성될 때마다 자동으로 유니크한 코드가 code 필드에 저장됩니다.
결론
이제 장고에서 무작위로 생성된 중복되지 않는 문자열을 기본값으로 설정하는 방법을 알게 되었습니다. 이 방법을 통해 각 페이지에 고유한 URL을 부여하여 사용자에게 더 나은 경험을 제공할 수 있습니다.