apps.user.models의 소스 코드

import os
import uuid

from apps.core.models import TimeStampModel
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, UserManager
from django.core import validators
from django.db import models
from django.utils.html import mark_safe
from PIL import Image

from .validators import UserNameValidator


[문서]class User(TimeStampModel, AbstractBaseUser, PermissionsMixin): """ username, email, profile_image AbstractBaseUser fields: password, last_login, is_active PermissionsMixin fields: is_superuser, groups, user_permissions """ # noqa username = models.CharField( verbose_name="닉네임", max_length=30, unique=True, error_messages={ "unique": "이미 사용중인 닉네임 입니다.", }, validators=[ UserNameValidator(), validators.MinLengthValidator(2), ], ) email = models.EmailField( verbose_name="이메일", validators=[validators.MinLengthValidator(8)], error_messages={ "unique": "이미 사용중인 이메일 입니다.", }, max_length=60, unique=True, ) is_staff = models.BooleanField(verbose_name="is staff", default=False) def _get_uuid_path(instance, filename): uuid4 = uuid.uuid4() new_path = os.path.join("upload/", f"{uuid4}_{filename}") return new_path profile_image = models.ImageField( verbose_name="유저 프로필 이미지", upload_to=_get_uuid_path, blank=True ) objects = UserManager() USERNAME_FIELD = "email" REQUIRED_FIELDS = ["username"]
[문서] def save(self, *args, **kwargs): super().save(*args, **kwargs) if self.profile_image: temp_image = Image.open(self.profile_image.path) temp_image = temp_image.resize((500, 500)) temp_image.save(self.profile_image.path)
# admin 페이지 프로필 사진 미리보기 def _profile_image(self, size=50): return mark_safe( f'<img src="{self.profile_image.url}" width="auto" height="{size}" />' if self.profile_image else f'<img src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" width="auto" height="{size}" />' # noqa )
[문서] def profile_image_tag(self): return self._profile_image()
[문서] def profile_image_tag_large(self): return self._profile_image(100)
profile_image_tag.short_description = "이미지" profile_image_tag_large.short_description = "이미지" class Meta: db_table = "user" def __str__(self): return self.email
[문서]class UserKeyword(models.Model): user_id = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True) keyword = models.CharField(max_length=50) def __str__(self): return f"{self.user_id} {self.keyword}"