class TimeStampedModel(models.Model): """ Time Stamped Model """ created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) objects = managers.CustomModelManager() class Meta: abstract = True
class User(AbstractUser): """ Custom User Model Definition """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, _("Male")), (GENDER_FEMALE, _("Female")), (GENDER_OTHER, _("Other")), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "ko" LANGUAGE_CHOICES = ( (LANGUAGE_ENGLISH, _("English")), (LANGUAGE_KOREAN, _("Korean")), ) CURRENCY_KRW = "krw" CURRENCY_USD = "usd" CURRENCY_CHOICES = ( (CURRENCY_KRW, "KRW"), (CURRENCY_USD, "USD"), ) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) avatar = models.ImageField(upload_to="avatars", null=True, blank=True) gender = models.CharField(_('gender'), choices=GENDER_CHOICES, default=GENDER_OTHER, max_length=10, null=True, blank=True) bio = models.TextField(_('bio'), null=True, blank=True, default=None) birthdate = models.DateField(_('birthdate'), null=True, blank=True) language = models.CharField(_('language'), choices=LANGUAGE_CHOICES, default=LANGUAGE_KOREAN, max_length=2, null=True, blank=True) currency = models.CharField(_('currency'), choices=CURRENCY_CHOICES, default=CURRENCY_KRW, max_length=3, null=True, blank=True) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=120, default=None, null=True, blank=True) login_method = models.CharField(max_length=10, choices=LOGIN_CHOICES, null=True, blank=True, default=LOGIN_EMAIL) objects = core_managers.CustomModelManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): try: if self.email_verified is False: secret_key = uuid.uuid4().hex[:20] self.email_secret = secret_key html_message = render_to_string("emails/verify_email.html", {"secret_key": secret_key}) send_mail(_("Verify Earbnb Account"), strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message) self.save() except Exception as e: print(e)
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_OTHER, "Other"), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_JAPANESE = "jp" LANGUAGE_CHOICES = ( (LANGUAGE_ENGLISH, "English"), (LANGUAGE_KOREAN, "Korean"), (LANGUAGE_JAPANESE, "Japanese"), ) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_JPY = "jpy" CURRENCY_CHOICES = ( (CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW"), (CURRENCY_JPY, "JPY"), ) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField(default="", blank=True) birthdate = models.DateField(blank=True, null=True) language = models.CharField(choices=LANGUAGE_CHOICES, max_length=2, blank=True, default=LANGUAGE_KOREAN) currency = models.CharField(choices=CURRENCY_CHOICES, max_length=3, blank=True, default=CURRENCY_KRW) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=20, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) objects = core_managers.CustomModelManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", {"secret": secret}) send_mail( "Verify Airbnb Account", strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, _("Male")), (GENDER_FEMALE, _("Female")), (GENDER_OTHER, _("Other")), ) LANGUAGE_ENGLISH = "영어" LANGUAGE_KOREAN = "한국어" LANGUAGE_CHINA = "중국어" LANGUAGE_JAPAN = "일본어" LANGUAGE_CHOICES = ( (LANGUAGE_ENGLISH, _("영어")), (LANGUAGE_KOREAN, _("한국어")), (LANGUAGE_CHINA, _("중국어")), (LANGUAGE_JAPAN, _("일본어")), ) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ( (CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW"), ) LOGIN_EMAIL = "email" LOGIN_GITHUB = "Github" LOGIN_KAKAO = "Kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, _("email")), (LOGIN_GITHUB, _("Github")), (LOGIN_KAKAO, _("Kakao")), ) avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField( _("gender"), blank=True, choices=GENDER_CHOICES, max_length=10, ) bio = models.TextField(_("bio"), blank=True) birthday = models.DateField(_("birthday"), blank=True, null=True) language = models.CharField( _("language"), blank=True, choices=LANGUAGE_CHOICES, max_length=25, default=LANGUAGE_KOREAN, ) currency = models.CharField( _("currency"), blank=True, choices=CURRENCY_CHOICES, max_length=3, default=CURRENCY_KRW, ) objects = core_managers.CustomModelManager() superhost = models.BooleanField(default="False") email_verified = models.BooleanField(default=True) email_secret = models.CharField(max_length=20, default="", blank=True) login_method = models.CharField( max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL ) def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string( "emails/verify_email.html", {"secret": secret} ) send_mail( _("이메일 테스트"), strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, _("Male")), (GENDER_FEMALE, _("Female")), (GENDER_OTHER, _("Other")), ) LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_CHOICES = ( (LANGUAGE_ENGLISH, _("English")), (LANGUAGE_KOREAN, _("Korean")), ) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW")) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) # 데이터베이스의 초기값은 null=true를 하거나 defalut="" 를 써서 안에 디폴트값을 넣어줄수있다 # 입력 필수값으로 지정하지 않으려면 blank=True를 해줘야한다 # null과 blank는 데이터베이스이냐 필수입력값 지정이냐의 차이를 갖고 있다 # uploads 폴더의 avatars 폴더에 avatar 관련 사진 파일들을 저장하겠다 # 번역을 위해서 _("gender")를 작성하였다 avatar = models.ImageField(_("avatar"), upload_to="avatars", blank=True) # CharField는 한줄 작성, 글자수제한이 있음 gender = models.CharField(_("gender"), choices=GENDER_CHOICES, max_length=10, blank=True) # TextField는 여러 줄 작성 가능, 글자수 제한 없음 bio = models.TextField(_("bio"), default="", blank=True) birthdate = models.DateField(blank=True, null=True) language = models.CharField(choices=LANGUAGE_CHOICES, max_length=2, blank=True, default=LANGUAGE_KOREAN) currency = models.CharField(choices=CURRENCY_CHOICES, max_length=3, blank=True, default=CURRENCY_KRW) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=120, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) objects = core_managers.CustomModelManager() # 이건 user의 profile로 가게하는 url을 만들어주는 과정에서 작성한 함수이다 # 이렇게 url을 작성한다면 admin 패널에서도 해당 메뉴가 표시되어서 관리가 가능해진다 # get_absolute_url을 공부해보자 def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_message = render_to_string("emails/verify_email.html", {"secret": secret}) send_mail( "Verify Airbnb Account", strip_tags(html_message), settings.EMAIL_FROM, [self.email], fail_silently=False, html_message=html_message, ) self.save() return
class User(AbstractUser): """ Custom User model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" # 성별 선택 GENDER_CHOICE = ( (GENDER_MALE, _("Male")), (GENDER_FEMALE, _("Female")), (GENDER_OTHER, _("Other")), ) # 언어 선택 LANGUAGE_ENGLISH = "en" LANGUAGE_KOREAN = "kr" LANGUAGE_CHOICES = ( (LANGUAGE_KOREAN, _("Korean")), (LANGUAGE_ENGLISH, _("English")), ) # 화폐 선택 CURRENCY_USD = "usd" CURRENCY_WON = "krw" CURRENCY_CHOICES = ( (CURRENCY_WON, "KRW"), (CURRENCY_USD, "USD"), ) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) first_name = models.CharField( _("first name"), max_length=30, blank=True, default="Unnamed User" ) # 프로필 이미지 avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField( _("gender"), choices=GENDER_CHOICE, max_length=10, blank=True ) bio = models.TextField(_("bio"), blank=True) birthdate = models.DateField(blank=True, null=True) language = models.CharField( _("language"), choices=LANGUAGE_CHOICES, max_length=2, blank=True, default=LANGUAGE_KOREAN, ) currency = models.CharField(choices=LANGUAGE_CHOICES, max_length=3, blank=True) superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=20, default="", blank=True) login_method = models.CharField( max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL ) objects = core_managers.CustomModelManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret html_messgae = render_to_string( "emails/verify_email.html", {"secret": secret, "host_url": SECRETS['HOST_URL']} ) send_mail( subject=_("Verify Airbnb Account"), message=None, from_email=settings.EMAIL_FROM, recipient_list=[self.email], fail_silently=False, html_message=html_messgae, ) self.save() return
class User(AbstractUser): """ Custom User Model """ GENDER_MALE = "male" GENDER_FEMALE = "female" GENDER_OTHER = "other" GENDER_CHOICES = ( (GENDER_MALE, "Male"), (GENDER_FEMALE, "Female"), (GENDER_OTHER, "Other"), ) LANG_ENG = "en" LANG_KOR = "kr" LANG_CHOICES = ((LANG_ENG, "English"), (LANG_KOR, "Korean")) CURRENCY_USD = "usd" CURRENCY_KRW = "krw" CURRENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW")) LOGIN_EMAIL = "email" LOGIN_GITHUB = "github" LOGIN_KAKAO = "kakao" LOGIN_CHOICES = ( (LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"), (LOGIN_KAKAO, "Kakao"), ) avatar = models.ImageField(upload_to="avatars", blank=True) gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True) bio = models.TextField(default="") birthdate = models.DateField(null=True, blank=True) language = models.CharField(choices=LANG_CHOICES, max_length=2, blank=True, default="KR") currency = models.CharField(choices=CURRENCY_CHOICES, max_length=3, blank=True, default="KRW") superhost = models.BooleanField(default=False) email_verified = models.BooleanField(default=False) email_secret = models.CharField(max_length=20, default="", blank=True) login_method = models.CharField(max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL) objects = core_managers.CustomModelManager() def get_absolute_url(self): return reverse("users:profile", kwargs={"pk": self.pk}) def verify_email(self): if self.email_verified is False: secret = uuid.uuid4().hex[:20] self.email_secret = secret send_mail( "Verify Account Message", f"Verify Account, your secret: {secret}", settings.EMAIL_FROM, [self.email], fail_silently=True, ) return