Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
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