示例#1
0
class User(AbstractUser):

    LOGIN_EMAIL = "email"
    LOGIN_FACEBOOK = "facebook"

    LOGIN_CHOICES = ((LOGIN_EMAIL, "Email"), (LOGIN_FACEBOOK, "Facebook"))

    FEMALE = "female"
    MALE = "male"
    NOT_SPECIFIED = "not specified"

    GENDER_CHOICES = (
        (FEMALE, "Female"),
        (MALE, "Male"),
        (NOT_SPECIFIED, "Prefer not specified"),
    )
    login_method = models.CharField(
        max_length=30, choices=LOGIN_CHOICES, default=LOGIN_EMAIL, null=True
    )
    bio = models.TextField(max_length=300, blank=True)
    profile = models.ImageField(upload_to="user_profiles/", null=True, blank=True)
    gender = models.CharField(
        max_length=40, choices=GENDER_CHOICES, default=NOT_SPECIFIED, null=True
    )
    objects = core_managers.CustomUserManager()

    def __str__(self):
        return self.username
示例#2
0
class User(AbstractUser):
    avatar = models.ImageField(upload_to="avatars", null=True, blank=True)
    youtube_name = models.CharField(max_length=80, null=True, blank=True)
    birthdate = models.DateField(null=True, blank=True)
    objects = managers.CustomUserManager()

    def get_thumbnail(self):
        if self.avatar.name != "":
            return mark_safe(
                f"<img width='100px' src = '{ self.avatar.url }' /img>")
        else:
            return None

    def get_avatar(self):
        return self.avatar.url

    def get_absolute_url(self):
        return reverse("users:profile", kwargs={"pk": self.pk})

    def get_age(self):
        today = date.today()
        k_age = today.year - self.birthdate.year + 1
        return k_age

    def count_unanswered_suggestions_and_answers(self):
        result = 0
        for suggestion in self.received_suggestions.all():
            if suggestion.has_answer is False:
                result = result + 1
        for answer in self.received_answers.all():
            result = result + 1
        return result
示例#3
0
文件: models.py 项目: kamooni/FINAL
class User(AbstractUser):

    PREF_BOOKS = "books"
    PREF_MOVIES = "movies"
    PREF_CHOICES = ((PREF_BOOKS, "Books"), (PREF_MOVIES, "Movies"))

    LANG_EN = "english"
    LANG_KR = "korean"
    LANG_CHOICES = ((LANG_EN, "English"), (LANG_KR, "Korean"))

    bio = models.TextField()
    preference = models.CharField(
        max_length=20, choices=PREF_CHOICES, default=PREF_MOVIES
    )
    language = models.CharField(max_length=20, choices=LANG_CHOICES, default=LANG_EN)
    fav_book_cat = models.ForeignKey(
        "categories.Category",
        on_delete=models.SET_NULL,
        null=True,
        related_name="book_users",
    )
    fav_movie_cat = models.ForeignKey(
        "categories.Category",
        on_delete=models.SET_NULL,
        null=True,
        related_name="movie_users",
    )
    objects = core_managers.CustomUserManager()

    def __str__(self):
        return self.username

    def get_absolute_url(self):
        return reverse("users:profile", kwargs={"pk": self.pk})
示例#4
0
class User(AbstractUser):
    """ Custom User Model """

    GENDER_MALE = "남자"
    GENDER_FEMALE = "여자"
    GENDER_OTHER = "기타"

    GENDER_CHOICES = (
        (GENDER_MALE, "남자"),
        (GENDER_FEMALE, "여자"),
        (GENDER_OTHER, "기타"),
    )

    nickname = models.CharField(max_length=80)
    avatar = models.ImageField(upload_to="avatars", blank=True)
    gender = models.CharField(choices=GENDER_CHOICES,
                              max_length=10,
                              blank=True)
    bio = models.TextField(blank=True)
    birthdate = models.DateField(blank=True, null=True)
    nationality = CountryField(blank=True)
    followers = models.ManyToManyField(settings.AUTH_USER_MODEL,
                                       related_name='followings')

    objects = core_managers.CustomUserManager()

    def get_absolute_url(self):
        return reverse("users:profile", kwargs={"pk": self.pk})

    def __str__(self):
        return self.nickname
示例#5
0
class User(AbstractUser):
    """Custom User Model"""

    GENDER_MALE = "male"
    GENDER_FEMALE = "female"

    GENDER_CHOICES = (
        (GENDER_MALE, "Male"),
        (GENDER_FEMALE, "Female"),
    )

    LOGIN_EMAIL = "email"
    LOGIN_GITHUB = "github"
    LOGING_KAKAO = "kakao"

    LOGIN_CHOICES = (
        (LOGIN_EMAIL, "Email"),
        (LOGIN_GITHUB, "Github"),
        (LOGING_KAKAO, "Kakao"),
    )

    avatar = models.ImageField(upload_to="avatars", blank=True)
    gender = models.CharField(choices=GENDER_CHOICES,
                              max_length=10,
                              blank=True,
                              null=True)
    bio = models.TextField(_("bio"), blank=True, default="")
    birthdate = models.DateField(blank=True, null=True)
    department = models.CharField(max_length=30, blank=True, null=True)
    country = CountryField()
    temperature = models.IntegerField(default=5, blank=True)
    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)
    country = CountryField(blank=True, null=True)

    objects = core_managers.CustomUserManager()

    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 Bughug Account",
                strip_tags(html_message),
                settings.EMAIL_FROM,
                [self.email],
                fail_silently=False,
                html_message=html_message,
            )
            self.save()
        return
示例#6
0
class User(AbstractUser):
    """ 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"
    CURRENCY_USD = "usd"
    CURRENCY_KRW = "krw"

    CURRUNCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_KRW, "KRW"))
    LANGUAGE_CHOICES = ((LANGUAGE_ENGLISH, "English"), (LANGUAGE_KOREAN,
                                                        "Korean"))

    LOGIN_EMAIL = "email"
    LOGIN_GITHUB = "github"
    LOGING_KAKAO = "kakao"

    LOGIN_CHOICES = (
        (LOGIN_EMAIL, "Email"),
        (LOGIN_GITHUB, "Github"),
        (LOGING_KAKAO, "Kakao"),
    )

    avatar = models.ImageField(upload_to="avatas", blank=True)
    gender = models.CharField(choices=GENDER_CHOICES,
                              max_length=10,
                              blank=True)
    bio = models.TextField(blank=True)
    birthdate = models.DateField(blank=True, null=True)
    language = models.CharField(choices=LANGUAGE_CHOICES,
                                max_length=2,
                                blank=True)
    currency = models.CharField(choices=CURRUNCY_CHOICES,
                                max_length=3,
                                blank=True)
    superhost = models.BooleanField(default=False)

    login_method = models.CharField(max_length=50,
                                    choices=LOGIN_CHOICES,
                                    default=LOGIN_EMAIL)

    # objects = core_managers.CustomModelManager()
    objects = core_managers.CustomUserManager()

    # 유저 모델이 변경되면 이걸 호출함
    # 업데이트 뷰를 써서 유저정보를 업데이트 했을때 변경이 일어난걸알고 이걸 불러
    # url에 profile을 pk 값을 가지고 호출해.
    def get_absolute_url(self):
        return reverse("users:profile", kwargs={"pk": self.pk})
示例#7
0
文件: models.py 项目: zzigsa/Ahyunhee
class User(AbstractUser):
    """ Custom User Model """

    ZZIGSA_NOT_YET = "not yet"
    ZZIGSA_APPROVED = "approved"
    ZZIGSA_DENIED = "denied"

    ZZIGSA_CHOICES = (
        (ZZIGSA_NOT_YET, "Not yet"),
        (ZZIGSA_APPROVED, "Approved"),
        (ZZIGSA_DENIED, "Denied"),
    )

    nickname = models.CharField(max_length=20, unique=True)
    zzigsa = models.CharField(choices=ZZIGSA_CHOICES,
                              max_length=10,
                              default=ZZIGSA_DENIED)
    objects = core_managers.CustomUserManager()
示例#8
0
class User(AbstractUser):
    """ Custom User Model """

    LOGIN_NAVER = "naver"
    LOGIN_GOOGLE = "google"
    LOGIN_KAKAO = "kakao"

    LOGIN_CHOICES = (
        (LOGIN_NAVER, "Naver"),
        (LOGIN_GOOGLE, "Google"),
        (LOGIN_KAKAO, "Kakao"),
    )

    avatar = models.ImageField(blank=True)
    birthdate = models.DateField(blank=True, null=True)
    superhost = models.BooleanField(default=False)
    email_verified = models.BooleanField(default=False)
    login_method = models.CharField(max_length=50,
                                    choices=LOGIN_CHOICES,
                                    default=LOGIN_KAKAO)
    objects = core_managers.CustomUserManager()
示例#9
0
class User(AbstractUser):
    """ Custom User Model """

    GENDER_MALE = "male"
    GENDER_FEMALE = "female"

    GENDER_CHOICE = (
        (GENDER_MALE, "Male"),
        (GENDER_FEMALE, "Female"),
    )

    profilepic = models.ImageField(upload_to="profilepic",
                                   null=True,
                                   blank=True)
    gender = models.CharField(choices=GENDER_CHOICE,
                              max_length=10,
                              null=True,
                              blank=True)
    bio = models.TextField(default="", blank=True)

    objects = core_managers.CustomUserManager()
示例#10
0
class User(AbstractUser):

    """Custom User MOdel"""

    LOGIN_EMAIL = "email"
    LOGIN_GITHUB = "github"
    LOGING_KAKAO = "kakao"

    LOGIN_CHOICES = (
        (LOGIN_EMAIL, "Email"),
        (LOGIN_GITHUB, "Github"),
        (LOGING_KAKAO, "Kakao"),
    )

    avatar = models.ImageField(upload_to="avatars", blank=True)
    bio = models.TextField(blank=True)
    zzigsa = models.BooleanField(default=False)
    login_method = models.CharField(
        max_length=50, choices=LOGIN_CHOICES, default=LOGIN_EMAIL
    )
    objects = core_managers.CustomUserManager()

    def get_absolute_url(self):
        return reverse("users:profile", kwargs={"pk": self.pk})
示例#11
0
class User(AbstractUser):
    """ Custom User Model """

    # define departure

    DEPARTURE_DIRECT = "dirc"
    DEPARTURE_WRITE = "writ"
    DEPARTURE_TECH = "tech"
    DEPARTURE_ENTER = "entr"
    DEPARTURE_WEB = "webc"

    DEPARTURE_CHOICES = (
        (DEPARTURE_DIRECT, "연출부"),
        (DEPARTURE_WRITE, "구성작가부"),
        (DEPARTURE_TECH, "방송기술부"),
        (DEPARTURE_ENTER, "엔터테이너부"),
        (DEPARTURE_WEB, "웹컨텐츠부"),
    )

    avatar = models.ImageField(null=True, blank=True, upload_to="avatars")
    departure = models.CharField(choices=DEPARTURE_CHOICES, max_length=6)
    order = models.IntegerField(null=True)
    kakaotalk = models.CharField(max_length=18)
    upperuser = models.BooleanField(default=False)

    objects = core_managers.CustomUserManager()

    def __str__(self):
        return self.username

    def clean_username(self):
        result = self.cleaned_data
        return result

    def get_absolute_url(self):
        return reverse("users:profile", kwargs={"pk": self.pk})
示例#12
0
class User(AbstractUser):
    GENDER_MALE = "male"
    GENDER_FEMALE = "female"
    GENDER_OTHER = "other"

    GENDER_CHOICES = (
        (GENDER_MALE, "Male"),
        (GENDER_FEMALE, "Female"),
        (GENDER_OTHER, "Other"),
    )

    LANGUAGE_EN = "english"
    LANGUAGE_SP = "spanish"
    LANGUAGE_CN = "chinese"
    LANGUAGE_KR = "korean"

    LANGUAGE_CHOICES = (
        (LANGUAGE_EN, "Englsih"),
        (LANGUAGE_SP, "Spanish"),
        (LANGUAGE_CN, "Chinese"),
        (LANGUAGE_KR, "Korean"),
    )

    CURRENCY_USD = "usd"
    CURRENCY_EUR = "eur"
    CURRENCY_CNY = "cny"
    CURRENCY_KRW = "krw"

    CURRENCY_CHOICES = ((CURRENCY_USD, "USD"), (CURRENCY_EUR, "EUR"),
                        (CURRENCY_CNY, "CNY"), (CURRENCY_KRW, "KRW"))

    LOGIN_EMAIL = "email"
    LOGIN_GITHUB = "github"
    LOGIN_GOOGLE = "google"

    LOGIN_CHOICES = (
        (LOGIN_EMAIL, "Email"),
        (LOGIN_GITHUB, "Github"),
        (LOGIN_GOOGLE, "Google"),
    )

    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(null=True, blank=True)
    language = models.CharField(choices=LANGUAGE_CHOICES,
                                max_length=10,
                                blank=True)
    currency = models.CharField(choices=CURRENCY_CHOICES,
                                max_length=10,
                                blank=True)
    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.CustomUserManager()

    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
            message = render_to_string("emails/verify_email.html",
                                       {'secret': secret})
            send_mail(
                "Verify Airbnb Account",
                message,
                settings.EMAIL_FROM,
                [self.email],
                fail_silently=True,
            )
            self.save()
示例#13
0
class User(AbstractUser):
    """Кастомная модель пользователя"""

    REQUIRED_FIELDS = ()

    GENDER_MALE = "мужчина"
    GENDER_FEMALE = "женщина"
    GENDER_OTHER = "другое"

    GENDER_CHOISES = (
        (GENDER_MALE, _("Мужчина")),
        (GENDER_FEMALE, _("Женщина")),
        (GENDER_OTHER, _("Другое")),
    )

    LANGUAGE_ENGLISH = "en"
    LANGUAGE_RUSSIAN = "ru"

    LANGUAGE_CHOISES = (
        (LANGUAGE_ENGLISH, "English"),
        (LANGUAGE_RUSSIAN, "Русский"),
    )

    CURRENCY_USD = "usd"
    CURRENCY_RUB = "rub"

    CURRENCY_CHOISES = (
        (CURRENCY_USD, _("Доллар США")),
        (CURRENCY_RUB, _("Российский рубль")),
    )

    LOGIN_EMAIL = "email"
    LOGIN_GITHUB = "github"
    LOGIN_VK = "vk"

    LOGIN_CHOICES = ((LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"),
                     (LOGIN_VK, "VK"))

    avatar = models.ImageField(upload_to="avatars", blank=True)
    gender = models.CharField(_("Пол"),
                              max_length=10,
                              choices=GENDER_CHOISES,
                              blank=True)
    bio = models.TextField(_("О себе"), default="", blank=True)
    birthdate = models.DateField(blank=True, null=True)
    language = models.CharField(choices=LANGUAGE_CHOISES,
                                max_length=2,
                                blank=True,
                                default=LANGUAGE_RUSSIAN)
    currency = models.CharField(max_length=3,
                                choices=CURRENCY_CHOISES,
                                blank=True,
                                default=CURRENCY_USD)
    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.CustomUserManager()

    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",
                                            context={"secret": secret})
            send_mail(
                "Подтверждение аккаунта AirBnb",
                strip_tags(html_message),
                settings.EMAIL_FROM,
                [self.email],
                fail_silently=False,
                html_message=html_message,
            )
            self.save()
        return
示例#14
0
class User(AbstractUser):
    """ Custom User Model """

    GENDER_MALE = "male"
    GENDER_FEMALE = "female"
    GENDER_OTHER = "other"

    GENDER_CHOICES = (
        # (DB저장되는값, "밖으로 보여지는 값"),
        (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"),
    )

    objects = core_managers.CustomUserManager()

    avatar = models.ImageField(upload_to='avatars', blank=True)
    gender = models.CharField(choices=GENDER_CHOICES,
                              max_length=10,
                              blank=True)  #CharField 한 줄 텍스트, 글자수 제한
    bio = models.TextField(blank=True)  #TextField 여러줄, 글자 제한 없음
    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)
    #super host --> 인증받은 airbnb 호스트
    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)

    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
示例#15
0
class User(AbstractUser):
    LOGIN_WEB = "web"
    LOGIN_KAKAO = "kakao"
    LOGIN_GOOGLE = "google"

    LOGIN_CHOICES = (
        (LOGIN_WEB, "웹"),
        (LOGIN_KAKAO, "카카오"),
        (LOGIN_GOOGLE, "구글"),
    )

    login_method = models.CharField(verbose_name="로그인 방법",
                                    max_length=50,
                                    choices=LOGIN_CHOICES,
                                    default=LOGIN_WEB)

    email = models.EmailField(verbose_name="이메일", null=True, blank=True)
    last_name = models.CharField(verbose_name="성",
                                 max_length=50,
                                 null=True,
                                 blank=True)
    first_name = models.CharField(verbose_name="이름",
                                  max_length=50,
                                  null=True,
                                  blank=True)
    bio = models.TextField(verbose_name="소개",
                           default="",
                           null=True,
                           blank=True)

    avatar = models.ImageField(verbose_name="사진",
                               upload_to="avatars",
                               null=True,
                               blank=True)
    email_verified = models.BooleanField(verbose_name="메일인증", default=False)
    email_secret = models.CharField(verbose_name="메일인증키",
                                    max_length=20,
                                    default="",
                                    blank=True)
    objects = core_managers.CustomUserManager()

    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})
            # html 을 스트링으로 바꾼다
            send_mail(
                ("마이비앤비 가입 인증메일 입니다"),
                strip_tags(html_message),
                settings.EMAIL_FROM,
                [self.email],
                fail_silently=False,
                html_message=html_message,
            )
            self.save()

        return

    # def following_count(self):
    #     following_count = self.target.count()
    #     return following_count

    # following_count.short_description = "팔로잉"

    # def follower_count(self):
    #     follower_count = self.follower.count()
    #     return follower_count

    # follower_count.short_description = "팔로워"

    def post_count(self):
        post_count = self.post_user.count()
        return post_count

    post_count.short_description = "포스트"

    def like_count(self):
        like_count = self.likes.count()
        return like_count

    like_count.short_description = "좋아요"

    # def comment_count(self):
    #     comment_count = self.comments.count()
    #     return comment_count

    # comment_count.short_description = "작성댓글"

    def __str__(self):
        return self.username

    class Meta:
        verbose_name = "사용자"
        verbose_name_plural = "사용자"
示例#16
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"))

    # Three types of (user registration -> account verification -> login)
    REGISTER_LOGIN_EMAIL = "email"
    REGISTER_LOGIN_GITHUB = "github"
    REGISTER_LOGIN_KAKAO = "kakao"

    REGISTER_LOGIN_METHOD = (
        (REGISTER_LOGIN_EMAIL, "Email"),
        (REGISTER_LOGIN_GITHUB, "Github"),
        (REGISTER_LOGIN_KAKAO, "Kakao"),
    )

    # null is for the database, and blank is for forms on website
    # null means "empty values are acceptable", and blank also means the same.
    avatar = models.ImageField(blank=True)

    # charfield: text field with limit of single line
    gender = models.CharField(choices=GENDER_CHOICES,
                              max_length=10,
                              blank=True)
    # Adding column(field) to database with empty

    # textfield: text field without limit
    bio = models.TextField(default="", blank=True)
    # bio = models.TextField(null=True) # Or, empty cell in field is accepted

    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)

    # boolean field is true of false
    # superhost = models.BooleanField(default=False)

    # three types of verification method(email, kakao, github) added on database
    register_login_method = models.CharField(max_length=50,
                                             choices=REGISTER_LOGIN_METHOD,
                                             default=REGISTER_LOGIN_EMAIL)

    # email fields added to models.py
    # emailing with django
    email_confirmed = models.BooleanField(default=False)
    # randomly generated numbers for email confirmation
    email_verification_key = models.CharField(max_length=20,
                                              default="",
                                              blank=True)

    objects = core_managers.CustomUserManager()

    # ------------------- end of the database fields -------------------------------

    # email verification method connected with ./views.py
    def verify_email(self):
        if self.email_confirmed is False:
            # using python random generator uuid library, generate random verification key
            # result is form of tuple, needs to be indexed like list
            verification_key = uuid.uuid4().hex[:20]
            # save random verification key to the field
            self.email_verification_key = verification_key
            # importing html message from static template, render it to string and use it to send_mail
            html_message = render_to_string(
                "emails/verify_email.html",
                context={"verification_key": verification_key},
            )
            # send email using django's send_email function: https://docs.djangoproject.com/en/3.0/topics/email/#quick-example
            # for specific arguments for the function, refer here: https://docs.djangoproject.com/en/3.0/topics/email/#send-mail
            send_mail(
                # email title
                "Verify FitCuration Account",
                # email content without html tags
                strip_tags(html_message),
                # email sender setted up in settings.py as no-reply
                settings.EMAIL_FROM,
                # recipient_list
                [self.email],
                # not raising error even if it failed, or raise
                fail_silently=False,
                # html
                html_message=html_message,
            )
            # saving verification_key to user's email_verification_key field
            self.save()
            return
示例#17
0
class User(AbstractUser):
    """ Custom User Model """

    GENDER_MALE = "male"
    GENDER_FEMALE = "female"
    GENDER_OTHER = "other"

    GENDER_CHOICES = (
        ("", _("Select gender")),
        (GENDER_MALE, _("Male")),
        (GENDER_FEMALE, _("Female")),
        (GENDER_OTHER, _("Other")),
    )

    LANGUAGE_ENGLISH = "en"
    LANGUAGE_KOREAN = "ko"

    LANGUAGE_CHOICES = (("", "Select language"), (LANGUAGE_ENGLISH, "English"),
                        (LANGUAGE_KOREAN, "Korean"))

    CURRENCY_USD = "usd"
    CURRENCY_CAD = "cad"
    CURRENCY_KRW = "krw"

    CURRENCY_CHOICES = (("", "Select currency"), (CURRENCY_USD, "USD"),
                        (CURRENCY_CAD, "CAD"), (CURRENCY_KRW, "KRW"))

    LOGIN_EMAIL = "email"
    LOGIN_GITHUB = "github"
    LOGIN_FACEBOOK = "facebook"
    LOGIN_GOOGLE = "google"

    LOGIN_CHOICES = (
        (LOGIN_EMAIL, "Email"),
        (LOGIN_GITHUB, "Github"),
        (LOGIN_FACEBOOK, "Facebook"),
        (LOGIN_GOOGLE, "Google"),
    )

    # [null vs blank]
    # null is purely database-related (for DB), whereas blank is validation-related (for Form)
    avatar = models.ImageField(_("avatar"),
                               upload_to="avatars",
                               default="",
                               null=True,
                               blank=True)  # path: /uploads/avatars
    gender = models.CharField(_("gender"),
                              choices=GENDER_CHOICES,
                              max_length=10,
                              null=True,
                              blank=True)
    bio = models.TextField(_("bio"), default="", blank=True)
    birthdate = models.DateField(_("birthdate"), null=True, blank=True)
    language = models.CharField(_("language"),
                                choices=LANGUAGE_CHOICES,
                                max_length=2,
                                null=True,
                                blank=True,
                                default=LANGUAGE_ENGLISH)
    currency = models.CharField(_("currency"),
                                choices=CURRENCY_CHOICES,
                                max_length=3,
                                null=True,
                                blank=True,
                                default=CURRENCY_CAD)
    # TODO: does we need host field? or we just assume that user having room listing is a host?
    # host = models.BooleanField(default=False)  # host user
    superhost = models.BooleanField(
        _("superhost"), default=False)  # certified host user by Airbnb
    email_verified = models.BooleanField(default=False)
    verification_code = models.CharField(
        max_length=120, default="",
        blank=True)  # random secret code for email varification
    login_method = models.CharField(_("login method"),
                                    choices=LOGIN_CHOICES,
                                    max_length=20,
                                    null=True,
                                    blank=True,
                                    default=LOGIN_EMAIL)

    # Change default Mnanger for having get_or_none() (models.Manager to core.managers.CustomModelManager)\
    """ TODO: bug-fix: creating a new user occurs error ('CustomModelManager' object has no attribute 'normalize_email')
    objects = core_managers.CustomModelManager()
    """
    #  objects = core_managers.CustomModelManager()
    objects = core_managers.CustomUserManager(
    )  # Support create_superuser() for EB deployment

    def get_absolute_url(self):
        # print(f"users:profile with {self.pk}")
        return reverse("users:profile", kwargs={"pk": self.pk})

    def verify_email(self):
        if self.email_verified is False:
            # generate random number
            verification_code = uuid.uuid4().hex[:6]
            self.verification_code = verification_code

            # send mail
            print(f"EMAIL_HOST_USER:{settings.EMAIL_HOST_USER}")
            print(
                f"SEND EMAIL for VERIFICATION with {verification_code} from {settings.EMAIL_FROM} to {self.email}"
            )
            html_message = render_to_string(
                "emails/verify_email.html",
                {
                    "verification_callback_url":
                    settings.VERIFICATION_CALLBACK_URL,
                    "verification_code": verification_code,
                },
            )
            # html_message = (
            #     "To verify your email, click "
            #     + "<a href='{http://127.0.0.1:8000/users/verify/}{verification_code}'>here</a>"
            # )
            send_mail(
                "Verify Airbnb Account",
                strip_tags(
                    html_message
                ),  # it removes all the html tags except for plain text.
                # f"Verify account, this is your verification code: {verification_code}",
                settings.EMAIL_FROM,
                [self.email],
                fail_silently=False,
                html_message=html_message,
            )
            self.save()
        return
示例#18
0
class User(AbstractUser):
    """ Custom User Model """

    GENDER_MALE = "male"
    GENDER_FEMALE = "female"

    GENDER_CHOICES = (
        (GENDER_MALE, "남성"),
        (GENDER_FEMALE, "여성"),
    )

    MAJOR_1 = "글로벌지역학"
    MAJOR_2 = "EU전공"
    MAJOR_3 = "GlobalBusiness"
    MAJOR_4 = "TESOL영어학전공"
    MAJOR_5 = "광고PR브랜딩전공"
    MAJOR_6 = "교육학"
    MAJOR_7 = "국가리더전공"
    MAJOR_8 = "국제금융학과"
    MAJOR_9 = "국제스포츠레저전공"
    MAJOR_10 = "그리스불가리아학과"
    MAJOR_11 = "남아프리카어전공"
    MAJOR_12 = "독일어통번역학과"
    MAJOR_13 = "동아프리카어전공"
    MAJOR_14 = "동유럽학대학"
    MAJOR_15 = "러시아학과"
    MAJOR_16 = "루마니아어과"
    MAJOR_17 = "말레이인도네시아어통번역학과"
    MAJOR_18 = "문화콘텐츠학전공"
    MAJOR_19 = "바이오메디컬공학전공"
    MAJOR_20 = "방송영상뉴미디어전공"
    MAJOR_21 = "브라질학과"
    MAJOR_22 = "사학과"
    MAJOR_23 = "산업경영공학과"
    MAJOR_24 = "생명공학과"
    MAJOR_25 = "서아프리카어전공"
    MAJOR_26 = "세계문화예술경영전공"
    MAJOR_27 = "세르비아크로아티아어과"
    MAJOR_28 = "수학과"
    MAJOR_29 = "스페인어통번역학과"
    MAJOR_30 = "아랍어통번역학과"
    MAJOR_31 = "아프리카학부"
    MAJOR_32 = "언론정보전공"
    MAJOR_33 = "언어인지과학과"
    MAJOR_34 = "영미권통상통번역전공"
    MAJOR_35 = "영미문학번역전공"
    MAJOR_36 = "영어통번역학부"
    MAJOR_37 = "영어통번역학전공"
    MAJOR_38 = "우크라이나어과"
    MAJOR_39 = "융복합소프트웨어전공"
    MAJOR_40 = "이탈리아어통번역학과"
    MAJOR_41 = "인도학과"
    MAJOR_42 = "일본어통번역학과"
    MAJOR_43 = "전자공학과"
    MAJOR_44 = "전자물리학과"
    MAJOR_45 = "정보기록학전공"
    MAJOR_46 = "정보통신공학과"
    MAJOR_47 = "정치외교학과"
    MAJOR_48 = "중국어통번역학과"
    MAJOR_49 = "중앙아시아학과"
    MAJOR_50 = "지식콘텐츠전공"
    MAJOR_51 = "철학과"
    MAJOR_52 = "체코슬로바키아어과"
    MAJOR_53 = "컴퓨터전자시스템공학전공"
    MAJOR_54 = "태국어통번역학과"
    MAJOR_55 = "통계학과"
    MAJOR_56 = "폴란드어과"
    MAJOR_57 = "프랑스학과"
    MAJOR_58 = "한국학과"
    MAJOR_59 = "행정학과"
    MAJOR_60 = "헝가리어과"
    MAJOR_61 = "화학과"
    MAJOR_62 = "환경학과"

    MAJOR_CHOICES = (
        (MAJOR_1, "글로벌지역학"),
        (MAJOR_2, "EU전공"),
        (MAJOR_3, "GlobalBusiness"),
        (MAJOR_4, "TESOL영어학전공"),
        (MAJOR_5, "광고PR브랜딩전공"),
        (MAJOR_6, "교육학"),
        (MAJOR_7, "국가리더전공"),
        (MAJOR_8, "국제금융학과"),
        (MAJOR_9, "국제스포츠레저전공"),
        (MAJOR_10, "그리스불가리아학과"),
        (MAJOR_11, "남아프리카어전공"),
        (MAJOR_12, "독일어통번역학과"),
        (MAJOR_13, "동아프리카어전공"),
        (MAJOR_14, "동유럽학대학"),
        (MAJOR_15, "러시아학과"),
        (MAJOR_16, "루마니아어과"),
        (MAJOR_17, "말레이인도네시아어통번역학과"),
        (MAJOR_18, "문화콘텐츠학전공"),
        (MAJOR_19, "바이오메디컬공학전공"),
        (MAJOR_20, "방송영상뉴미디어전공"),
        (MAJOR_21, "브라질학과"),
        (MAJOR_22, "사학과"),
        (MAJOR_23, "산업경영공학과"),
        (MAJOR_24, "생명공학과"),
        (MAJOR_25, "서아프리카어전공"),
        (MAJOR_26, "세계문화예술경영전공"),
        (MAJOR_27, "세르비아크로아티아어과"),
        (MAJOR_28, "수학과"),
        (MAJOR_29, "스페인어통번역학과"),
        (MAJOR_30, "아랍어통번역학과"),
        (MAJOR_31, "아프리카학부"),
        (MAJOR_32, "언론정보전공"),
        (MAJOR_33, "언어인지과학과"),
        (MAJOR_34, "영미권통상통번역전공"),
        (MAJOR_35, "영미문학번역전공"),
        (MAJOR_36, "영어통번역학부"),
        (MAJOR_37, "영어통번역학전공"),
        (MAJOR_38, "우크라이나어과"),
        (MAJOR_39, "융복합소프트웨어전공"),
        (MAJOR_40, "이탈리아어통번역학과"),
        (MAJOR_41, "인도학과"),
        (MAJOR_42, "일본어통번역학과"),
        (MAJOR_43, "전자공학과"),
        (MAJOR_44, "전자물리학과"),
        (MAJOR_45, "정보기록학전공"),
        (MAJOR_46, "정보통신공학과"),
        (MAJOR_47, "정치외교학과"),
        (MAJOR_48, "중국어통번역학과"),
        (MAJOR_49, "중앙아시아학과"),
        (MAJOR_50, "지식콘텐츠전공"),
        (MAJOR_51, "철학과"),
        (MAJOR_52, "체코슬로바키아어과"),
        (MAJOR_53, "컴퓨터전자시스템공학전공"),
        (MAJOR_54, "태국어통번역학과"),
        (MAJOR_55, "통계학과"),
        (MAJOR_56, "폴란드어과"),
        (MAJOR_57, "프랑스학과"),
        (MAJOR_58, "한국학과"),
        (MAJOR_59, "행정학과"),
        (MAJOR_60, "헝가리어과"),
        (MAJOR_61, "화학과"),
        (MAJOR_62, "환경학과"),
    )

    LOGIN_EMAIL = "email"
    LOGIN_KAKAO = "kakao"

    LOGIN_CHOICES = (
        (LOGIN_EMAIL, "EMAIL"),
        (LOGIN_KAKAO, "KAKAO"),
    )

    gender = models.CharField(choices=GENDER_CHOICES,
                              max_length=10,
                              blank=True)
    bio = models.TextField(default="")
    major = models.CharField(choices=MAJOR_CHOICES, max_length=20, blank=True)
    login_method = models.CharField(choices=LOGIN_CHOICES,
                                    max_length=50,
                                    default=LOGIN_EMAIL)

    objects = core_managers.CustomUserManager()

    def get_absolute_url(self):
        return reverse("users:profile", kwargs={"pk": self.pk})
示例#19
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_GH = 'github'
    LOGIN_KAKAO = 'kakao'

    LOGIN_CHOICES = ((LOGIN_EMAIL, 'Email'), (LOGIN_GH, '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(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.CustomUserManager()

    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('email/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 None
示例#20
0
class User(AbstractUser):
    """ Custom User Moodel """

    GENDER_MALE = "male"
    GENDER_FEMALE = "female"
    GENDER_OTHER = "other"

    GENDER_CHOICES = (
        (GENDER_MALE, "Male"),
        (GENDER_FEMALE, "Female"),
        (GENDER_OTHER, "Other"),
    )

    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(blank=True)

    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)
    att_field = models.ManyToManyField("AttentionField",
                                       related_name="users",
                                       blank=True)
    att_language = models.ManyToManyField("AttentionLanguage",
                                          related_name="users",
                                          blank=True)
    followings = models.ManyToManyField("users.User",
                                        related_name="users",
                                        blank=True)
    like_boards = models.ManyToManyField("boards.Board",
                                         related_name="users",
                                         blank=True)
    objects = core_managers.CustomUserManager()

    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 Employment Information Account",
                strip_tags(html_message),
                settings.EMAIL_FROM,
                [self.email],
                fail_silently=False,
                html_message=html_message,
            )
            self.save()
        return
示例#21
0
class User(AbstractUser):
    GENDER_MALE = 'male'
    GENDER_FEMALE = 'female'
    GENDER_OTHER = 'other'

    GENDER_CHOICES = ((GENDER_MALE, 'Male'), (GENDER_FEMALE, 'Female'),
                      (GENDER_OTHER, 'Other'))

    LANGUAGE_ENGLISH = 'en'
    LANGUAGE_CHOICES = ((LANGUAGE_ENGLISH, 'English'), )

    AMERICAN_DOLLARS = 'usd'
    INDIAN_RUPEES = 'inr'

    CURRENCY_CHOICES = ((AMERICAN_DOLLARS, 'USD'), (INDIAN_RUPEES, 'INR'))

    LOGIN_EMAIL = "email"
    LOGIN_GITHUB = "github"

    LOGIN_CHOICES = ((LOGIN_EMAIL, "Email"), (LOGIN_GITHUB, "Github"))

    bio = models.TextField(default="", blank=True)
    avatar = models.ImageField(blank=True, upload_to='avatars')
    gender = models.CharField(max_length=10,
                              choices=GENDER_CHOICES,
                              blank=True)
    birthdate = models.DateField(blank=True, null=True)
    language = models.CharField(choices=LANGUAGE_CHOICES,
                                max_length=2,
                                default=LANGUAGE_ENGLISH,
                                blank=True)
    currency = models.CharField(choices=CURRENCY_CHOICES,
                                max_length=3,
                                default=AMERICAN_DOLLARS,
                                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.CustomUserManager()

    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=True,
                html_message=html_message,
            )
            self.save()
        return
示例#22
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, "en"), (LANGUAGE_KOREAN, "kr"))

    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(blank=True, upload_to="avatar")
    avatar_thumbnail = ImageSpecField(
        source="avatar",
        processors=[ResizeToFill(200, 200)],
        format="JPEG",
        options={"quality": 60},
    )
    gender = models.CharField(max_length=10, blank=True, choices=GENDER_CHOICES)
    bio = models.TextField(blank=True)
    birthdate = models.DateField(null=True, blank=True)
    language = models.CharField(
        max_length=2, choices=LANGUAGE_CHOICES, blank=True, default=LANGUAGE_KOREAN
    )
    currency = models.CharField(
        max_length=3, choices=CURRENCY_CHOICES, 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=False)
    login_method = models.CharField(
        max_length=6, choices=LOGIN_CHOICES, default=LOGIN_EMAIL
    )
    objects = core_managers.CustomUserManager()

    def verify_email(self):
        secret = uuid.uuid4().hex[:20]
        self.email_secret = secret
        html_message = render_to_string("emails/verify_email.html", {"secret": secret})
        send_mail(
            "Verify Airbnb-clone Account",
            strip_tags(html_message),
            from_email=settings.EMAIL_FROM,
            recipient_list=[self.email],
            fail_silently=False,
            html_message=html_message,
        )
        self.save()

    def get_absolute_url(self):
        return reverse("users:profile", kwargs={"pk": self.pk})
示例#23
0
class User(AbstractUser):

    """ Custom User Model """

    GENDER_MALE = "male"
    GENDER_FEMALE = "female"
    GENDER_OTHER = "other"

    GENDER_CHOICES = (
        (GENDER_MALE, _("남자")),
        (GENDER_FEMALE, _("여자")),
        (GENDER_OTHER, _("그 외")),
    )

    LANGUAGE_ENGLISH = "en"
    LANGUAGE_KOREAN = "kr"

    LANGUAGE_CHOICES = ((LANGUAGE_ENGLISH, _("영어")), (LANGUAGE_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_NAVER = "naver"

    LOGIN_CHOICES = (
        (LOGIN_EMAIL, _("이메일")),
        (LOGIN_GITHUB, _("깃허브")),
        (LOGIN_KAKAO, _("카카오")),
        (LOGIN_NAVER, _("네이버")),
    )
    avatar = models.ImageField(_("프로필 사진"), upload_to="avatars", blank=True)
    gender = models.CharField(
        _("성별"), choices=GENDER_CHOICES, max_length=10, blank=True
    )
    bio = models.TextField(_("자기소개"), max_length=200, 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.CustomUserManager()

    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
示例#24
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_ENGRLISH = "en"
    LANGUAGE_KOREAN = "kr"

    LANGUAGE_CHOICES = ((LANGUAGE_ENGRLISH, "English"), (LANGUAGE_KOREAN, "Korean"))

    CURRENCY_USD = "usd"
    CURRENCY_KRW = "krw"

    CURENCY_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",  # /uploads 폴더 안데 avatars 폴더에다가 사진을 넣을것임.
        blank=True,
    )
    gender = models.CharField(choices=GENDER_CHOICES, max_length=10, blank=True)
    bio = models.TextField(
        default="", blank=True
    )  # default를 넣는 이유는 데이터베이스 column에 빈칸이 없도록..

    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=CURENCY_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.CustomUserManager()

    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]  # import 추가
            self.email_secret = secret
            html_message = render_to_string(
                "emails/verify_email.html", {"secret": secret}
            )

            send_mail(  # import 추가
                "Verify Airbnb Account",
                strip_tags(html_message),  # html을 html 형태를 제외한 상태로 보내주는거임.
                settings.EMAIL_FROM,
                [self.email],
                fail_silently=False,
                html_message=html_message,
            )
            self.save()  # 하고 나서 user를 save해야한다.
        return
示例#25
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"),
    )

    avatar = models.ImageField(upload_to="avatars", blank=True)
    gender = models.CharField(_("gender"),
                              choices=GENDER_CHOICES,
                              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=CURRENCY_CHOICES,
                                max_length=3,
                                blank=True,
                                default=CURRENCY_KRW)
    superhost = models.BooleanField(default=False)
    email_confirmed = 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.CustomUserManager()

    def get_absolute_url(self):
        return reverse("users:profile", kwargs={"pk": self.pk})

    def verify_email(self):
        if self.email_confirmed 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
示例#26
0
class User(AbstractUser):
    """
    Custom User Model
    기본으로 제공하는 장고 USER를 커스텀하여 유저 모델 생성
    """

    GENDER_MALE = "male"
    GENDER_FEMALE = "female"
    GENDER_ATHOR = "athor"

    GENDER_CHOICES = [
        (GENDER_MALE, "Male"),
        (GENDER_FEMALE, "Female"),
        (GENDER_ATHOR, "Athor"),
    ]

    LOGIN_EMAIL = "email"
    LOGIN_KAKAO = "kakao"

    LOGIN_CHOICES = [
        (LOGIN_EMAIL, "Email"),
        (LOGIN_KAKAO, "Kakao"),
    ]

    avatar = models.ImageField(upload_to="avatars", null=True, blank=True)
    gender = models.CharField(
        choices=GENDER_CHOICES,
        max_length=10,
        blank=False,
        null=False,
        default=GENDER_MALE,
    )

    login_method = models.CharField(
        max_length=10,
        choices=LOGIN_CHOICES,
        default=LOGIN_EMAIL,
        blank=False,
        null=False,
    )

    rating = models.IntegerField(default=10)
    objects = core_managers.CustomUserManager()

    hint_question = models.IntegerField(blank=False, default=1)
    hint = models.CharField(blank=False, max_length=200, default="")

    def __str__(self):
        return self.first_name

    def delete(self, *args, **kargs):
        if self.avatar:
            os.remove(os.path.join(settings.MEDIA_ROOT, self.file.path))
        super(User, self).delete(*args, **kargs)

    def get_rating(self):
        """
        사용자가 받은 피드백 점수를 합산하여
        사용자 정보를 계산한다.
        """
        rating = 0
        feedback_count = 0
        plans = plan_model.Plan.objects.filter(user=self.pk)

        for plan in plans:
            feedbacks = plan_model.Feedback.objects.filter(plan=plan)

            for feedback in feedbacks:
                rating += feedback.rating

            feedback_count += feedbacks.count()

        if feedback_count == 0:
            return 0
        return round(rating / feedback_count, 1)

    def get_avatar(self):
        """
        업로드된 이미지가 있을 경우 이미지 출력
        """
        if self.avatar:
            return self.avatar.url
        else:
            None

    def get_first_nickname(self):
        return self.first_name[0]