コード例 #1
0
ファイル: user.py プロジェクト: Mernus/volsu_app
class User(AbstractBaseUser, PermissionsMixin):
    class Meta:
        verbose_name = 'Пользователь'
        verbose_name_plural = 'Пользователи'
        ordering = ['-level', 'username']

    username_validator = UnicodeUsernameValidator()
    org_validator, fullname_validator = TitleValidator(), FullnameValidator()

    username = models.CharField(
        verbose_name='Имя пользователя',
        validators=[username_validator,
                    MinLengthValidator(3)],
        max_length=25,
        unique=True)
    password = models.CharField(_('password'),
                                max_length=128,
                                validators=[MinLengthValidator(8)])
    fullname = encrypt(
        models.CharField(verbose_name='ФИО пользователя',
                         validators=[fullname_validator],
                         max_length=100,
                         unique=True,
                         null=True,
                         default=None))
    organization = encrypt(
        models.CharField(verbose_name='Организация',
                         max_length=120,
                         validators=[org_validator],
                         null=True,
                         default=None))
    added = CreationDateTimeField(verbose_name='Дата создания')
    updated = ModificationDateTimeField(
        verbose_name='Дата последнего изменения')
    timezone = TimeZoneField(default='Europe/Moscow',
                             verbose_name="Часовой пояс")
    email = models.EmailField(verbose_name='Почта пользователя', unique=True)
    level = models.IntegerField(verbose_name='Уровень прав пользователя',
                                choices=USER_LEVELS,
                                default=USER_LEVELS.USER)
    is_staff = models.BooleanField('Может использовать админ сайт',
                                   default=False)
    is_active = models.BooleanField(
        'Активен',
        default=True,
        help_text=
        'Активен ли пользователь. Используется вместо удаления объекта.')
    profile_img = models.ImageField(upload_to=profile_upload,
                                    blank=True,
                                    null=True,
                                    verbose_name='Картинка профиля')

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    def get_token(self, password: str, request: 'Request') -> str:
        """
        Returns user JWT token

        Args:
            request (Request): passed request
            password (str): user password

        Returns:
            str: User JWT access token

        """
        return self.__generate_token(password, request)

    # TODO docs
    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)
        self.is_staff = self.level is USER_LEVELS.ADMIN

        if self.level is USER_LEVELS.ORGANIZER and not self.organization:
            self.organization = 'No organization'

    # TODO docs
    def email_user(self, subject, message, from_email=None, **kwargs):
        send_mail(subject, message, from_email, [self.email], **kwargs)

    # TODO docs
    def get_full_name(self):
        fullname = self.username
        if self.organization:
            fullname += f"({self.organization})"

        return fullname

    # TODO docs
    def get_short_name(self):
        return self.username

    # TODO docs
    def __generate_token(self, raw_password: str, request: 'Request') -> str:
        username, email = self.username, self.email
        try:
            data = get_tokens(self, raw_password, request)
        except (AuthenticationFailed, TokenError, TokenBackendError) as e:
            raise TokenAuthError(username, email, str(e))

        access_token = data['access']
        request.session['jwt_access'] = access_token

        refresh_token = data.get('refresh')
        if refresh_token is not None:
            request.session['jwt_refresh'] = refresh_token

        return access_token

    def __str__(self):
        return self.get_full_name()
コード例 #2
0
ファイル: utils.py プロジェクト: mennucc/ColDoc_project
import os, sys, mimetypes, http, json, re
from os.path import join as osjoin

# taken from Django, for convenience
slug_re = re.compile(r'^[-a-zA-Z0-9_]+\Z')
number_re = re.compile(r'^[0-9]+\Z')

from django.contrib.auth.validators import UnicodeUsernameValidator
valid_user_re = UnicodeUsernameValidator().regex

import logging
logger = logging.getLogger(__name__)

import django

#https://stackoverflow.com/questions/25967759/django-get-permpermision-string
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission
from django.conf import settings


def permission_str_to_model(perm, obj):
    " convert permission from `str` to `Permission` for that `obj`"
    if isinstance(perm, str):
        content_type = ContentType.objects.get_for_model(obj)
        perm = Permission.objects.get(content_type=content_type, codename=perm)
    return perm


def convert_latex_return_codes(latex_return_codes, NICK, UUID):
    latex_error_logs = []
コード例 #3
0
ファイル: models.py プロジェクト: viewsharp/takto_api
class User(AbstractUser):
    username = models.CharField(max_length=150,
                                validators=[UnicodeUsernameValidator()])
    device_id = models.CharField(max_length=64, unique=True)

    USERNAME_FIELD = 'device_id'
コード例 #4
0
class User(AbstractBaseUser, PermissionsMixin):
    """ユーザー AbstractUserをコピペし編集"""

    # uuid = models.UUIDField(default=uuid_lib.uuid4,
    #                         primary_key=True, editable=False)
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    full_name = models.CharField(_('full name'), max_length=150, blank=True)
    email = models.EmailField(_('email address'), blank=True)
    is_management = models.BooleanField(default=False)
    role = models.ForeignKey(
        Role,
        verbose_name=_('role'),
        null=True,
        help_text=_('Specific Roles for this user.'),
        related_name="user_set",
        related_query_name="user",
        on_delete=models.PROTECT,
    )
    # role_id = models.IntegerField(_('role id'), null=True)
    unit_price = models.IntegerField(_('unit price(万円/月)'), null=True)

    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = [
        'email',
    ]

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)

    # 既存メソッドの変更
    def get_full_name(self):
        return self.full_name

    def get_short_name(self):
        return self.full_name
コード例 #5
0
ファイル: models.py プロジェクト: knowrafa/django_qr_code
class Usuario(SetUpModel, AbstractBaseUser, PermissionsMixin):
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Obrigatório, 150 caracteres ou menos. Letras, digitos e @/./+/-/ apenas.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("Este usuário já existe!"),
        },
    )
    nome = models.CharField(_('nome'), max_length=150, blank=True)
    email = models.EmailField(_('endereco de email'), blank=True, unique=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_('Define se o usuário pode acessar o site do admin'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_('Define se o usuário está ativo ou não'),
    )

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    objects = UserManager()

    class Meta:
        db_table = 'usuario'

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        """
        Return the first_name plus the last_name, with a space in between.
        """
        full_name = str(self.nome)
        return full_name.strip()

    def get_short_name(self):
        """Return the short name for the user."""
        return self.nome

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)

    def save(self, *args, **kwargs):
        try:
            identify_hasher(self.password)
        except ValueError:
            self.set_password(self.password)
        super(Usuario, self).save(*args, **kwargs)
コード例 #6
0
class User(AbstractUser):
    """
    用户表
    """
    username_validator = UnicodeUsernameValidator()
    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    stats = models.IntegerField(choices=(
        (0, '学生'),
        (1, '教师'),
    ),
                                default=0,
                                help_text='当前身份')
    email = models.EmailField(_('email address'), unique=True)
    famous_race = models.CharField(help_text='名族',
                                   max_length=100,
                                   null=True,
                                   blank=True)
    native_place = models.CharField(max_length=100,
                                    help_text='籍贯',
                                    null=True,
                                    blank=True)
    age = models.IntegerField(help_text='年龄', null=True, blank=True)
    sex = models.IntegerField(help_text='性别',
                              choices=(
                                  (0, '男'),
                                  (1, '女'),
                                  (2, '保密'),
                              ),
                              default=2)
    telephone = models.CharField(max_length=50,
                                 help_text='电话',
                                 null=True,
                                 blank=True)
    image = models.ImageField(help_text='头像',
                              upload_to='',
                              null=True,
                              blank=True)
    id_card = models.CharField(max_length=50,
                               help_text='身份证',
                               null=True,
                               blank=True)
    entrance = models.DateTimeField(help_text='入学时间', null=True, blank=True)
    graduation = models.DateTimeField(help_text='毕业时间', null=True, blank=True)
    key_school_info = models.ManyToManyField(SchoolInfo,
                                             blank=True,
                                             help_text='班级-学校',
                                             through='UserSchoolInfoMany')

    def save(self, *args, **kwargs):
        if not self.username: self.username = timezone.mktime()
        if not kwargs.get('force_insert', None):
            self.userschoolinfomany_set.update(stats=self.stats)
        super(User, self).save(*args, **kwargs)

    def __str__(self):
        if self.last_name: return self.last_name
        return self.username

    class Meta(AbstractUser.Meta):
        ordering = ['-id']
        pass
コード例 #7
0
ファイル: models.py プロジェクト: ino777/myblogapp
class User(AbstractBaseUser, PermissionsMixin):
    """ User model """
    username_validator = UnicodeUsernameValidator()

    id = models.UUIDField(primary_key=True, default=uuid4, editable=False)

    username = models.CharField(
        _('username'),
        max_length=20,
        validators=[username_validator],
    )
    email = models.EmailField(
        _('email address'),
        max_length=100,
        unique=True,
        error_messages={
            'unique': _('This email address is already registered in other account')
        }
    )

    icon_image = ProcessedImageField(
        upload_to=settings.USER_ICON_UPLOAD_DIR,
        processors=[ResizeToFill(200, 200)],
        format='JPEG',
        options={'quality': 60},
        default=DEFAULT_USER_ICON_IMAGE
    )

    profile_message = models.TextField(
        max_length=500,
        blank=True,
    )

    first_name = models.CharField(_('first name'), max_length=20, blank=True)
    last_name = models.CharField(_('last name'), max_length=20, blank=True)

    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
    )

    birth_date = models.DateField(_('birth_date'), default=timezone.now)
    reg_date = models.DateTimeField(_('registration date'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user"""
        send_mail(subject, message, from_email, [self.email], **kwargs)
コード例 #8
0
class UserSerializer(serializers.Serializer):
    username = serializers.CharField(validators=[UnicodeUsernameValidator()])
コード例 #9
0
class SingleUserWorkspacePermissionSerializer(serializers.Serializer):
    # Allow empty username since anonymous user is a reader for public workspaces
    username = serializers.CharField(validators=[UnicodeUsernameValidator()], allow_blank=True)
    workspace = serializers.CharField()
    permission = serializers.IntegerField(allow_null=True)
    permission_label = serializers.CharField(allow_null=True)
コード例 #10
0
ファイル: user.py プロジェクト: mhsniranmanesh/sporthub-core
class User(AbstractBaseUser, PermissionsMixin):
    username_validator = UnicodeUsernameValidator()

    def user_profile_picture_path(self, filename):
        random_string = random_string_generator(size=5)
        final_file_name = ''.join([self.username, random_string])
        return 'profile_pictures/{0}.jpeg'.format(final_file_name)

    def user_avatar_path(self, filename):
        random_string = random_string_generator(size=5)
        final_file_name = ''.join([self.username, random_string])
        return 'profile_pictures/{0}-avatar.jpeg'.format(final_file_name)

    username = models.CharField(
        _('username'),
        max_length=50,
        unique=True,
        help_text=_('Required. 50 characters or fewer. Letters, digits and @/./+/-/_ only.'),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    first_name = models.CharField(_('first name'), max_length=50, blank=True)
    last_name = models.CharField(_('last name'), max_length=50, blank=True)
    email = models.EmailField(_('email address'), max_length=50, unique=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_('Designates whether the user can log into this admin site.'),
    )
    uuid = models.UUIDField(db_index=True, default=uuid_lib.uuid4, editable=False)
    is_active = models.BooleanField(
        _('active'),
        default=False,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'
        ),
    )
    phone_number = models.CharField(_('phone number'), max_length=16, blank=True)
    is_email_verified = models.BooleanField(_('email verified'), default=False)
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
    title = models.CharField(_('title'), max_length=150, blank=True)
    bio = models.CharField(_('biograghy'), max_length=3000, blank=True)
    profile_picture = models.ImageField(upload_to=user_profile_picture_path, blank=True)
    avatar = models.ImageField(upload_to=user_avatar_path, blank=True)
    balance = models.IntegerField(default=Constants.USER_INITIAL_BALANCE)
    rate = models.IntegerField(default=0)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email', 'first_name', 'last_name']

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def __str__(self):
        return '%s' % (self.username)

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        """
        Return the first_name plus the last_name, with a space in between.
        """
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        """Return the short name for the user."""
        return self.first_name

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)

    def send_verification_email(self, uid, token):
        plaintext = get_template('activate-email.txt')
        htmly = get_template('activate-email.html')
        d = {
            'user': self,
            'domain': 'localhost',
            'uid': uid,
            'token': token,
        }
        text_content = plaintext.render(d)
        html_content = htmly.render(d)
        subject = 'تایید ایمیل'
        from_email = sporthub_core.settings.EMAIL_HOST_USER
        to = self.email

        msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
        msg.attach_alternative(html_content, "text/html")
        msg.send()

        # send_mail_async.delay(subject=subject, from_email=from_email, to_email=to, text_content=text_content,
        #                       html_content=html_content)

    def send_passwordreset_email(self, uid, token):
        plaintext = get_template('reset-password.txt')
        htmly = get_template('reset-password.html')
        d = {
            'user': self,
            'domain': 'wishwork.ir',
            'uid': uid,
            'token': token,
        }
        text_content = plaintext.render(d)
        html_content = htmly.render(d)
        subject = 'بازیابی رمز عبور'
        from_email = sporthub_core.settings.EMAIL_HOST_USER
        to = self.email

        msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
        msg.attach_alternative(html_content, "text/html")
        msg.send()
コード例 #11
0
class CustumUser(AbstractUser):

    F = 'femme'
    M = 'homme'
    SEXE_CHOICES = [
        (F, 'F'),
        (M, 'M'),
    ]

    username_validator = UnicodeUsernameValidator()
    district = models.ForeignKey(District,
                                 on_delete=models.CASCADE,
                                 related_name='particuliers',
                                 verbose_name='quartier',
                                 default=1)
    sex = models.CharField(max_length=5,
                           choices=SEXE_CHOICES,
                           default=M,
                           verbose_name='sexe')
    last_name = models.CharField(
        blank=False,
        max_length=150,
        verbose_name='nom(s)',
    )
    first_name = models.CharField(blank=False,
                                  max_length=30,
                                  verbose_name='prenom(s)')
    username = models.CharField(
        error_messages={
            'unique': 'Un utilisateur avec ce pseudo existe deja.'
        },
        help_text='Obligatoire,seulement des lettres, chiffres et @/./+/-/_ ',
        max_length=150,
        unique=True,
        validators=[username_validator],
        verbose_name='pseudo')
    email = models.EmailField(blank=False,
                              max_length=254,
                              verbose_name='adresse email')
    password = models.CharField(max_length=128,
                                verbose_name='mot de passe',
                                help_text='donner un mot de passe fort')
    phone_number = PhoneNumberField(unique=True,
                                    verbose_name='numéro de téléphone')
    photo = models.ImageField(upload_to='profile_images/',
                              verbose_name='image de profil')
    date_joined = models.DateTimeField(default=timezone.now,
                                       verbose_name='date inscription')
    is_active = models.BooleanField(
        default=True,
        help_text="designe si l'utilisateur a le droit de se connecter au site",
        verbose_name='actif')
    last_login = models.DateTimeField(
        blank=True,
        null=True,
    )
    is_superuser = models.BooleanField(default=False, )
    is_staff = models.BooleanField(default=False, )
    groups = models.ManyToManyField(
        Group,
        verbose_name='groups',
        blank=True,
        help_text=
        'un utilisateur appartenant a ce groupe aura les autorisations associees',
        related_name="groupes_utilisateur",
        related_query_name="utilisateur",
    )
    user_permissions = models.ManyToManyField(
        Permission,
        blank=True,
        help_text='autorisations specifiques pour cet utilisateur.',
        related_name='permissions',
        verbose_name="permissions_de_l'utilisateur")

    class Meta(AbstractUser.Meta):
        abstract = False
コード例 #12
0
class User(AbstractBaseUser, PermissionsMixin):
	"""Custom user class to be used for the Mike's Night project"""
	
	# Validators
	username_validator = UnicodeUsernameValidator()
	customer_username_validator = CustomUsernameValidator()
	email_validator = EmailValidator()
	avatar_validator = FileValidator(max_size=15*1024*1024)
	
	# Default values
	avatar_default = 'pics/users/_default/avatar/default.jpg'
	
	# Model fields
	email = models.EmailField(
		_('email'),
		unique=True,
		blank=False,
		null=False,
		validators=[email_validator]
	)
	username = models.CharField(
		_('username'),
		max_length=20,
		unique=True,
		blank=False,
		null=False,
		help_text=_('Letters, numbers, dashes, and underscores only. Username must be between 3 and 20 characters.'),
		validators=[
			username_validator,
			customer_username_validator,
			username_blacklist_validator,
			MinLengthValidator(3),
			MaxLengthValidator(20),
		],
		error_messages={
			'unique': _('A user with that username already exists.'),
			'invalid': _('Letters, numbers, dashes, and underscores only. Username must be between 3 and 20 characters.'),
		},
	)
	phone_number_country_code = models.CharField(
		_('phone number country code'),
		choices=PHONE_NUMBER_COUNTRY_CODE_CHOICES,
		null=True,
		blank=True,
		max_length=5,
	)
	phone_number = PhoneNumberField(_('phone number'), blank=True, null=True, unique=True)
	is_staff = models.BooleanField(
		_('staff status'),
		default=False,
		help_text=_('Designates whether the user can log into this admin site.'),
	)
	is_active = models.BooleanField(
		_('active'),
		default=True,
		help_text=_(
			'Designates whether this user should be treated as active. '
			'Unselect this instead of deleting accounts.'
		),
	)
	date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
	permalink_id = models.CharField(max_length=10, blank=True, null=True, unique=True)
	is_email_verified = models.BooleanField(
		_('email verified'),
		default=False,
		help_text=_(
			'Designates whether the email address is verified by a provided verification link.'
		),
	)
	email_verification_sent_datetime = models.DateTimeField(default=timezone.now)
	email_verification_expiration_datetime = models.DateTimeField(default=verification_expiration_calculator)
	email_verification_sent_count = models.IntegerField(default=1)
	
	name = models.CharField(_('name'), max_length=128, null=True, blank=True)
	birth_date = models.DateField(null=True, blank=True)
	country = models.CharField(max_length=128, null=True, blank=True)
	gender = models.CharField(
		_('gender'),
		max_length=32,
		choices=[(tag.name, tag.value) for tag in GenderChoice],
		null=True,
		blank=True
	)
	bio = models.TextField(max_length=500, null=True, blank=True)
	avatar = models.ImageField(
		upload_to=avatar_upload_to,
		max_length=255,
		null=False,
		blank=True,
		default=avatar_default,
		validators=[avatar_validator],
		#storage=PublicMediaStorage() ### bring back ***
	)
	website = models.CharField(max_length=255, null=True, blank=True)
	
	# Managers
	objects = UserManager()
	
	USERNAME_FIELD = 'username'
	REQUIRED_FIELDS = ['email',]
	
	class Meta:
		verbose_name = _('user')
		verbose_name_plural = _('users')
		
	def __str__(self):
		return self.username
		
	def save(self, *args, **kwargs):
		if not self.permalink_id:
			# Generate a permalink_id until we generate q unique one
			self.permalink_id = generate_permalink_id(10)
			while User.objects.filter(permalink_id=self.permalink_id).exists():
				self.permalink_id = generate_permalink_id(10)
		super(User, self).save()
		
	def email_user(self, subject, message, from_email=None, **kwargs):
		send_mail(subject, message, from_email, [self.email], **kwargs)
コード例 #13
0
class Migration(migrations.Migration):

    replaces = [
        ("common", "0001_initial"),
        ("common", "0008_squashed_41"),
        ("common", "0009_jsonb"),
        ("common", "0010_remove_wizard"),
        ("common", "0011_username"),
        ("common", "0012_adminLT_param"),
        ("common", "0013_currency_param"),
    ]

    initial = True

    dependencies = [
        ("auth", "0006_require_contenttypes_0002"),
        ("contenttypes", "0002_remove_content_type_name"),
    ]

    operations = [
        migrations.CreateModel(
            name="User",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("password",
                 models.CharField(max_length=128, verbose_name="password")),
                (
                    "last_login",
                    models.DateTimeField(blank=True,
                                         null=True,
                                         verbose_name="last login"),
                ),
                (
                    "is_superuser",
                    models.BooleanField(
                        default=False,
                        help_text=
                        "Designates that this user has all permissions without explicitly assigning them.",
                        verbose_name="superuser status",
                    ),
                ),
                (
                    "username",
                    models.CharField(
                        error_messages={
                            "unique":
                            "A user with that username already exists."
                        },
                        help_text=
                        "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
                        max_length=150,
                        unique=True,
                        validators=[UnicodeUsernameValidator()],
                        verbose_name="username",
                    ),
                ),
                (
                    "first_name",
                    models.CharField(blank=True,
                                     max_length=30,
                                     verbose_name="first name"),
                ),
                (
                    "last_name",
                    models.CharField(blank=True,
                                     max_length=30,
                                     verbose_name="last name"),
                ),
                (
                    "email",
                    models.EmailField(blank=True,
                                      max_length=254,
                                      verbose_name="email address"),
                ),
                (
                    "is_staff",
                    models.BooleanField(
                        default=False,
                        help_text=
                        "Designates whether the user can log into this admin site.",
                        verbose_name="staff status",
                    ),
                ),
                (
                    "is_active",
                    models.BooleanField(
                        default=True,
                        help_text=
                        "Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
                        verbose_name="active",
                    ),
                ),
                (
                    "date_joined",
                    models.DateTimeField(default=django.utils.timezone.now,
                                         verbose_name="date joined"),
                ),
                (
                    "language",
                    models.CharField(
                        choices=[
                            ("auto", "Detect automatically"),
                            ("en", "English"),
                            ("fr", "French"),
                            ("de", "German"),
                            ("he", "Hebrew"),
                            ("it", "Italian"),
                            ("ja", "Japanese"),
                            ("nl", "Dutch"),
                            ("pt", "Portuguese"),
                            ("pt-br", "Brazilian Portuguese"),
                            ("ru", "Russian"),
                            ("es", "Spanish"),
                            ("zh-cn", "Simplified Chinese"),
                            ("zh-tw", "Traditional Chinese"),
                        ],
                        default="auto",
                        max_length=10,
                        verbose_name="language",
                    ),
                ),
                (
                    "theme",
                    models.CharField(
                        choices=[
                            ("earth", "Earth"),
                            ("grass", "Grass"),
                            ("lemon", "Lemon"),
                            ("odoo", "Odoo"),
                            ("openbravo", "Openbravo"),
                            ("orange", "Orange"),
                            ("snow", "Snow"),
                            ("strawberry", "Strawberry"),
                            ("water", "Water"),
                        ],
                        default="earth",
                        max_length=20,
                        verbose_name="theme",
                    ),
                ),
                (
                    "pagesize",
                    models.PositiveIntegerField(default=100,
                                                verbose_name="page size"),
                ),
                (
                    "horizonbuckets",
                    models.CharField(blank=True, max_length=300, null=True),
                ),
                ("horizonstart", models.DateTimeField(blank=True, null=True)),
                ("horizonend", models.DateTimeField(blank=True, null=True)),
                ("horizontype", models.BooleanField(default=True)),
                (
                    "horizonlength",
                    models.IntegerField(blank=True, default=6, null=True),
                ),
                (
                    "horizonunit",
                    models.CharField(
                        blank=True,
                        choices=[("day", "day"), ("week", "week"),
                                 ("month", "month")],
                        default="month",
                        max_length=5,
                        null=True,
                    ),
                ),
                (
                    "lastmodified",
                    models.DateTimeField(
                        auto_now=True,
                        db_index=True,
                        null=True,
                        verbose_name="last modified",
                    ),
                ),
                (
                    "groups",
                    models.ManyToManyField(
                        blank=True,
                        help_text=
                        "The groups this user belongs to. A user will get all permissions granted to each of their groups.",
                        related_name="user_set",
                        related_query_name="user",
                        to="auth.Group",
                        verbose_name="groups",
                    ),
                ),
                (
                    "user_permissions",
                    models.ManyToManyField(
                        blank=True,
                        help_text="Specific permissions for this user.",
                        related_name="user_set",
                        related_query_name="user",
                        to="auth.Permission",
                        verbose_name="user permissions",
                    ),
                ),
            ],
            options={
                "db_table": "common_user",
                "verbose_name": "user",
                "verbose_name_plural": "users",
            },
            managers=[("objects", django.contrib.auth.models.UserManager())],
        ),
        migrations.CreateModel(
            name="Bucket",
            fields=[
                (
                    "source",
                    models.CharField(
                        blank=True,
                        db_index=True,
                        max_length=300,
                        null=True,
                        verbose_name="source",
                    ),
                ),
                (
                    "lastmodified",
                    models.DateTimeField(
                        db_index=True,
                        default=django.utils.timezone.now,
                        editable=False,
                        verbose_name="last modified",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        max_length=300,
                        primary_key=True,
                        serialize=False,
                        verbose_name="name",
                    ),
                ),
                (
                    "description",
                    models.CharField(
                        blank=True,
                        max_length=500,
                        null=True,
                        verbose_name="description",
                    ),
                ),
                (
                    "level",
                    models.IntegerField(
                        help_text=
                        "Higher values indicate more granular time buckets",
                        verbose_name="level",
                    ),
                ),
            ],
            options={
                "db_table": "common_bucket",
                "verbose_name": "bucket",
                "verbose_name_plural": "buckets",
            },
        ),
        migrations.CreateModel(
            name="Comment",
            fields=[
                (
                    "id",
                    models.AutoField(primary_key=True,
                                     serialize=False,
                                     verbose_name="identifier"),
                ),
                ("object_pk", models.TextField(verbose_name="object id")),
                ("comment",
                 models.TextField(max_length=3000, verbose_name="comment")),
                (
                    "lastmodified",
                    models.DateTimeField(
                        default=django.utils.timezone.now,
                        editable=False,
                        verbose_name="last modified",
                    ),
                ),
                (
                    "content_type",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="content_type_set_for_comment",
                        to="contenttypes.ContentType",
                        verbose_name="content type",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        blank=True,
                        editable=False,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="user",
                    ),
                ),
            ],
            options={
                "db_table": "common_comment",
                "ordering": ("id", ),
                "verbose_name_plural": "comments",
                "verbose_name": "comment",
            },
        ),
        migrations.CreateModel(
            name="Parameter",
            fields=[
                (
                    "source",
                    models.CharField(
                        blank=True,
                        db_index=True,
                        max_length=300,
                        null=True,
                        verbose_name="source",
                    ),
                ),
                (
                    "lastmodified",
                    models.DateTimeField(
                        db_index=True,
                        default=django.utils.timezone.now,
                        editable=False,
                        verbose_name="last modified",
                    ),
                ),
                (
                    "name",
                    models.CharField(
                        max_length=60,
                        primary_key=True,
                        serialize=False,
                        verbose_name="name",
                    ),
                ),
                (
                    "value",
                    models.CharField(blank=True,
                                     max_length=1000,
                                     null=True,
                                     verbose_name="value"),
                ),
                (
                    "description",
                    models.CharField(
                        blank=True,
                        max_length=1000,
                        null=True,
                        verbose_name="description",
                    ),
                ),
            ],
            options={
                "db_table": "common_parameter",
                "verbose_name": "parameter",
                "verbose_name_plural": "parameters",
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="Scenario",
            fields=[
                (
                    "name",
                    models.CharField(
                        max_length=300,
                        primary_key=True,
                        serialize=False,
                        verbose_name="name",
                    ),
                ),
                (
                    "description",
                    models.CharField(
                        blank=True,
                        max_length=500,
                        null=True,
                        verbose_name="description",
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("free", "free"),
                            ("in use", "in use"),
                            ("busy", "busy"),
                        ],
                        max_length=10,
                        verbose_name="status",
                    ),
                ),
                (
                    "lastrefresh",
                    models.DateTimeField(editable=False,
                                         null=True,
                                         verbose_name="last refreshed"),
                ),
            ],
            options={
                "db_table":
                "common_scenario",
                "ordering": ["name"],
                "verbose_name_plural":
                "scenarios",
                "verbose_name":
                "scenario",
                "permissions": (
                    ("copy_scenario", "Can copy a scenario"),
                    ("release_scenario", "Can release a scenario"),
                ),
            },
        ),
        migrations.CreateModel(
            name="BucketDetail",
            fields=[
                (
                    "source",
                    models.CharField(
                        blank=True,
                        db_index=True,
                        max_length=300,
                        null=True,
                        verbose_name="source",
                    ),
                ),
                (
                    "lastmodified",
                    models.DateTimeField(
                        db_index=True,
                        default=django.utils.timezone.now,
                        editable=False,
                        verbose_name="last modified",
                    ),
                ),
                (
                    "id",
                    models.AutoField(primary_key=True,
                                     serialize=False,
                                     verbose_name="identifier"),
                ),
                (
                    "name",
                    models.CharField(db_index=True,
                                     max_length=300,
                                     verbose_name="name"),
                ),
                ("startdate", models.DateTimeField(verbose_name="start date")),
                ("enddate", models.DateTimeField(verbose_name="end date")),
                (
                    "bucket",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="common.Bucket",
                        verbose_name="bucket",
                    ),
                ),
            ],
            options={
                "db_table": "common_bucketdetail",
                "ordering": ["bucket", "startdate"],
                "verbose_name_plural": "bucket dates",
                "verbose_name": "bucket date",
                "unique_together": {("bucket", "startdate")},
            },
        ),
        migrations.CreateModel(
            name="UserPreference",
            fields=[
                (
                    "id",
                    models.AutoField(primary_key=True,
                                     serialize=False,
                                     verbose_name="identifier"),
                ),
                ("property", models.CharField(max_length=100)),
                ("value", freppledb.common.fields.JSONBField(max_length=1000)),
                (
                    "user",
                    models.ForeignKey(
                        editable=False,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="preferences",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="user",
                    ),
                ),
            ],
            options={
                "verbose_name_plural": "preferences",
                "verbose_name": "preference",
                "db_table": "common_preference",
                "unique_together": {("user", "property")},
            },
        ),
        migrations.RunPython(code=createAdminUser),
    ]
コード例 #14
0
 def validate_username(self, username):
     UnicodeUsernameValidator(username)
     if User.objects.filter(username=username).exists():
         raise serializers.ValidationError(
             _("A user is already registered with this username."))
     return username
コード例 #15
0
class User(AbstractBaseUser, PermissionsMixin, TimeStampedModel):
    class Meta:
        verbose_name = _("User")
        verbose_name_plural = _("Users")

    CONSUMER = "consumer"
    RSLR_CLIENT = "reseller"
    RSLR_MANAGER = "reseller manager"
    ADMIN = "admin"
    ROLES = (
        (
            CONSUMER,
            _("Consumer"),
        ),
        (
            RSLR_CLIENT,
            _("Reseller Client"),
        ),
        (
            RSLR_MANAGER,
            _("Reseller Manager"),
        ),
        (
            ADMIN,
            _("Administrator"),
        ),
    )
    email = models.EmailField(_('Email address'),
                              default="",
                              unique=True,
                              blank=True)
    pin = models.PositiveIntegerField(
        _("PIN"),
        default=get_random_pin,
        validators=[MinLengthValidator(6)],
    )
    full_name = models.CharField(_('Full name'),
                                 max_length=30,
                                 default="",
                                 blank=True)
    slug = AutoSlugField(populate_from='full_name', unique=True)
    birthdate = models.DateField(verbose_name=_("Birth Date"), null=True)
    is_staff = models.BooleanField(_('Is Staff'), default=False)
    is_active = models.BooleanField(_('Is Active'), default=False)
    is_email = models.BooleanField(_('Is Email Verified'), default=False)
    role = models.CharField(verbose_name=_("Role"),
                            max_length=15,
                            choices=ROLES,
                            default=CONSUMER)
    img = models.ImageField(verbose_name=_("Avatar"),
                            upload_to=settings.DEFAULT_USER_FOLDER,
                            blank=True,
                            default=settings.DEFAULT_USER_AVATAR)
    city = models.CharField(verbose_name=_("City"),
                            max_length=32,
                            default=settings.DEFAULT_CITY_NAME)
    country = models.CharField(verbose_name=_("Country"),
                               max_length=2,
                               default=settings.DEFAULT_COUNTRY_CODE)
    mob = models.CharField(verbose_name=_("Mobile"),
                           max_length=15,
                           blank=True,
                           validators=[_PHONE_REGEX])
    push_notify = models.BooleanField(_('Push Notification'), default=True)
    newsletter = models.BooleanField(_('Email Newsletter'), default=False)
    lati = models.FloatField(_("Latitude"), default=0.0)
    lngt = models.FloatField(_("Longitude"), default=0.0)
    terms = models.BooleanField(_('Agree terms '), default=False)
    username_validator = UnicodeUsernameValidator(
    ) if six.PY3 else ASCIIUsernameValidator()
    username = models.CharField(
        _('Username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )

    objects = UserManager()
    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    @property
    def date_joined(self):
        return self.created

    def get_short_name(self):
        "Returns the short name for the user."
        return self.full_name if self.full_name else self.username

    get_short_name.short_description = _("Short Name")

    def save(self, *args, **kwargs):
        super(User, self).save(*args, **kwargs)

    def __str__(self):
        return self.full_name if self.full_name else self.username

    def get_dict(self):
        return {
            "pk": self.pk,
            "img": {
                "url": self.img.url,
                "name": self.img.name
            } if self.img else {
                "url": settings.DEFAULT_USER_AVATAR,
                "name": "user"
            },
            "username": self.username,
            "full_name": self.full_name,
            "email": self.email,
            "created": self.created.isoformat() if self.created else None,
        }
コード例 #16
0
class CustomUser(AbstractBaseUser, PermissionsMixin):
    """
    Represents an application User.
    """
    class Meta:
        verbose_name_plural = 'Users'

    username_validator = UnicodeUsernameValidator()
    username = models.CharField(
        'username',
        max_length=150,
        unique=True,
        help_text=
        'Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.',
        validators=[username_validator],
        error_messages={
            'unique': "A user with that username already exists.",
        },
    )
    email = models.EmailField(unique=True, null=True)
    is_shibboleth_login_required = models.BooleanField(
        default=True,
        help_text=
        'Designates whether this user is required to login via a shibboleth identity provider.',
        verbose_name='shibboleth login required status',
    )
    is_staff = models.BooleanField(
        'staff status',
        default=False,
        help_text='Designates whether the user can log into this site.',
    )
    is_active = models.BooleanField(
        'active',
        default=True,
        help_text='Designates whether this user should be treated as active. '
        'Unselect this instead of deleting accounts.',
    )
    is_superuser = models.BooleanField(
        default=False,
        help_text=
        'Designates that this user has all permissions without explicitly assigning them.',
        verbose_name='superuser status',
    )
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    first_name = models.CharField(
        blank=True,
        max_length=30,
        verbose_name='first name',
    )
    last_name = models.CharField(
        blank=True,
        max_length=30,
        verbose_name='last name',
    )

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.email

    def save(self, *args, **kwargs):
        super(CustomUser, self).save(*args, **kwargs)
        if self.is_shibboleth_login_required:
            _, domain = self.email.split('@')
            institution = Institution.objects.get(base_domain=domain)
            ShibbolethProfile.objects.update_or_create(
                user=self,
                defaults={
                    'shibboleth_id': self.email,
                    'institution': institution,
                },
            )
        else:
            Profile.objects.update_or_create(user=self)
        self.profile.save()

    def __str__(self):
        return '{first_name} {last_name} ({email})'.format(
            first_name=self.first_name,
            last_name=self.last_name,
            email=self.email,
        )
コード例 #17
0
ファイル: models.py プロジェクト: TheEnemyOfSleep/drf-learns
class CustomUser(AbstractBaseUser, PermissionsMixin):
    gender = models.CharField(_('gender'),
                              max_length=255,
                              blank=True,
                              default=_('i will not say'))
    profile_pic = models.ImageField(_('picture'),
                                    upload_to='user_data/profile_picture',
                                    null=True,
                                    blank=True)

    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    email = models.EmailField(_('email address'), blank=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = CustomUserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def get_full_name(self):
        # The user is identified by their username
        return self.username

    def get_short_name(self):
        # The user is identified by their username
        return self.username

    def has_perm(self, perm):
        "Does the user have a specific permission?"
        # Simplest possible answer: Yes, always
        return True

    def has_module_perms(self, app_label):
        "Does the user have permissions to view the app `app_label`?"
        # Simplest possible answer: Yes, always
        return True

    def __str(self):
        return self.username
コード例 #18
0
class User(models.Model):
    """
    User Model
    """

    objects = models.Manager()
    username_validator = UnicodeUsernameValidator()

    def user_directory_path(self, filename):
        """
        Format the user directory path
        :param filename:
        :return:
        """
        # file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
        return 'user_{0}/{1}'.format(self.id, filename)

    class Gender(models.TextChoices):
        MALE = 'M', _('MALE')
        FEMALE = 'F', _('FEMALE')
        TRANSGENDER = 'T', _('TRANSGENDER')
        OTHERS = 'O', _('OTHERS')

        __empty__ = _('(Unknown)')

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
        blank=False,
        null=False)
    first_name = models.CharField(_('First Name'), max_length=30, blank=True)
    last_name = models.CharField(_('Last Name'), max_length=150, blank=True)
    email = models.EmailField(_('Email Address'), blank=True)
    mobile_number = models.CharField(_('Mobile Number'),
                                     blank=True,
                                     max_length=20)
    password = models.CharField(_('password'),
                                max_length=128,
                                blank=False,
                                null=False)
    avatar = models.ImageField(_('avatar'),
                               blank=True,
                               null=True,
                               upload_to=user_directory_path)
    dob = models.DateField(_('Date of Birth'), blank=True, null=True)
    gender = models.CharField(_('gender'),
                              blank=True,
                              max_length=1,
                              choices=Gender.choices)
    last_login = models.DateTimeField(_('last login'), blank=True, null=True)
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    created = models.DateTimeField(_('created'), auto_now_add=True)
    updated = models.DateTimeField(_('updated'), default=timezone.now)

    def save(self, *args, **kwargs):
        """
        Save a user instance
        Turn a plain-text password into a hash for database storage
        :param args:
        :param kwargs:
        :return:
        """
        self.password = make_password(self.password)
        self.updated = timezone.now()
        super(User, self).save(*args, **kwargs)

    class Meta:
        app_label = _('users')
        verbose_name = _('user')
        verbose_name_plural = _('users')
        ordering = ('-created', )
コード例 #19
0
class AbstractUser(AbstractBaseUser, PermissionsMixin):
    """
    An abstract base class implementing a fully featured User model with
    admin-compliant permissions.
    Username and password are required. Other fields are optional.
    """
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('employee_number'),
        max_length=5,
        unique=True,
        # help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
        # validators=[username_validator],
        error_messages={
            'unique': _("A user with that employee_number  already exists."),
        },
    )
    
    first_name = models.CharField(_('first name'), max_length=150, blank=True)
    last_name = models.CharField(_('last name'), max_length=150, blank=True)
    email = models.EmailField(_('email address'), blank=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_('Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'
        ),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')
        abstract = True

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        """
        Return the first_name plus the last_name, with a space in between.
        """
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        """Return the short name for the user."""
        return self.first_name

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)
コード例 #20
0
ファイル: models.py プロジェクト: akash99909/Djoser-Angular
class User(AbstractBaseUser):
	username_validator = UnicodeUsernameValidator()

	username = models.CharField(
		_('username'),
		max_length=150,
		unique=True,
		help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
		validators=[username_validator],
		error_messages={
			'unique': _("A user with that username already exists."),
		},
	)

	email = models.EmailField(
		_('email address'),
		unique=True,
		max_length=255,
		error_messages={
			'unique': _("A user with that email address already exists."),
		},
	)
	is_staff = models.BooleanField(
		_('staff status'),
		default=False,
		help_text=_('Designates whether the user can log into this admin site.'),
	)
	is_active = models.BooleanField(
		_('active'),
		default=True,
		help_text=_(
			'Designates whether this user should be treated as active. '
			'Unselect this instead of deleting accounts.'
		),
	)
	is_superuser = models.BooleanField(
		_('superuser status'),
		default=False,
		help_text=_(
			'Designates that this user has all permissions without '
			'explicitly assigning them.'
		),
	)
	date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

	objects = UserManager()

	USERNAME_FIELD = 'username'
	REQUIRED_FIELDS = ['email']

	class Meta:
		verbose_name = _('user')
		verbose_name_plural = _('users')

	def clean(self):
		super().clean()
		self.email = self.__class__.objects.normalize_email(self.email)

	def get_full_name(self):
		"""
		Return the first_name plus the last_name, with a space in between.
		"""
		return str(self.email)

	def get_short_name(self):
		"""Return the short name for the user."""
		return self.username

	def email_user(self, subject, message, from_email=None, **kwargs):
		"""Send an email to this user."""
		send_mail(subject, message, from_email, [self.email], **kwargs)

	def has_perm(self, perm, obj=None):
		return True

	def has_module_perms(self, app_label):
		return True
コード例 #21
0
class VacancyUser(AbstractBaseUser, PermissionsMixin):
    """
    空室情報ユーザ
    """
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _('username'),
        db_column='username',
        max_length=150,
        unique=True,
        db_index=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )

    display_name = models.CharField(_('display_name'),
                                    db_column='display_name',
                                    max_length=100,
                                    null=True,
                                    blank=True)
    email = models.EmailField(_('email address'),
                              db_column='email',
                              null=True,
                              blank=True)
    is_staff = models.BooleanField(_('staff status'),
                                   db_column='is_staff',
                                   default=False)
    is_active = models.BooleanField(_('active'),
                                    db_column='is_active',
                                    default=True)
    is_company = models.BooleanField(_('company'),
                                     db_column='is_company',
                                     default=False)

    level = models.ForeignKey(
        VacancyLevel,
        db_column='level_id',
        related_name='vacancy_user_levels',
        db_index=True,
        on_delete=models.PROTECT,
        default=3,
    )

    allow_org_image = models.BooleanField(_('allow_org_image'),
                                          db_column='allow_org_image',
                                          default=False)
    trader_name = models.CharField(_('trader_name'),
                                   db_column='trader_name',
                                   max_length=100,
                                   null=True,
                                   blank=True)
    trader_department_name = models.CharField(
        _('trader_department_name'),
        db_column='trader_department_name',
        max_length=100,
        null=True,
        blank=True)
    trader_department_tel = models.CharField(_('trader_department_tel'),
                                             db_column='trader_department_tel',
                                             max_length=20,
                                             null=True,
                                             blank=True)
    trader_department_address = models.CharField(
        _('trader_department_address'),
        db_column='trader_department_address',
        max_length=255,
        null=True,
        blank=True)
    note = models.CharField(_('note'),
                            db_column='note',
                            max_length=255,
                            null=True,
                            blank=True)
    date_joined = models.DateTimeField(_('date joined'),
                                       db_column='date_joined',
                                       default=timezone.now)

    groups = models.ManyToManyField(
        Group,
        verbose_name=_('vacancy groups'),
        blank=True,
        help_text=_(
            'The groups this user belongs to. A user will get all permissions '
            'granted to each of their groups.'),
        related_name="vacancy_user_set",
        related_query_name="vacancy_user",
    )
    user_permissions = models.ManyToManyField(
        Permission,
        verbose_name=_('vacancy user permissions'),
        blank=True,
        help_text=_('Specific permissions for this user.'),
        related_name="vacancy_user_set",
        related_query_name="vacancy_user",
    )

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class Meta:
        managed = False
        db_table = 'auth_vacancy_user'
        verbose_name = _('vacancy_user')
        verbose_name_plural = _('vacancy_users')

    @property
    def idb64(self):
        return base64_decode_id(self.pk)

    @property
    def full_name(self):
        return self.get_full_name()

    @property
    def is_trader(self):
        return not self.is_company

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        return self.display_name

    def get_short_name(self):
        return self.display_name

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)
コード例 #22
0
class User(AbstractBaseUser, PermissionsMixin):
    """
    An abstract base class implementing a fully featured User model with
    admin-compliant permissions.
    Username and password are required. Other fields are optional.
    """
    email = models.EmailField(unique=True,
                              error_messages={
                                  'unique': _("そのEメールアドレスはすでに使用されています"),
                              },
                              verbose_name='Eメール')

    username_validator = UnicodeUsernameValidator()
    username = models.CharField(max_length=150,
                                validators=[username_validator],
                                help_text=_('150文字以下。文字と数字と @/./+/-/_ のみ。'),
                                verbose_name='ユーザ名')

    birthday = models.DateField(blank=True,
                                null=True,
                                help_text=_('例:1996-05-31'),
                                verbose_name='生年月日')

    GENDER_CHOICES = (
        (1, '男性'),
        (2, '女性'),
    )
    gender = models.IntegerField(verbose_name='性別', choices=GENDER_CHOICES)
    place = models.CharField(max_length=100, verbose_name='居住地', null=True)
    height = models.FloatField(help_text=_('男性は170cm未満のかた限定です。'),
                               verbose_name='身長')
    date_joined = models.DateTimeField(default=timezone.now,
                                       verbose_name='登録日')
    user_icon = models.ImageField('画像',
                                  upload_to='images/',
                                  blank=True,
                                  null=True)

    #男性限定の身長バリデーションとメール
    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)
        if self.username == 'dst':  #'dst'はDMの送り方を識別するために使うので予約語としておく。
            raise ValidationError("'dstは名前に使えません'")
        if self.gender == 1:
            if self.height < 150.0 or self.height > 169.9:
                raise ValidationError('身長が170cm以上の男性はご遠慮ください')

    is_active = models.BooleanField(
        _('active'),
        default=True,
    )
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)

    objects = UserManager()

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'birthday', 'gender', 'place', 'height']

    #class Meta:
    #    verbose_name = _('user')
    #    verbose_name_plural = _('users')
    #   #abstract = True # ここを削除しないといけないことを忘れない!!!!!!!!!!
    #    swappable = 'AUTH_USER_MODEL'

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True
コード例 #23
0
class User(AbstractBaseUser, PermissionsMixin):
    """
    An abstract base class implementing a fully featured User model with
    admin-compliant permissions.

    Username and password are required. Other fields are optional.
    """
    username_validator = UnicodeUsernameValidator(
    ) if six.PY3 else ASCIIUsernameValidator()

    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        validators=[validate_fb_username, username_validator],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=30, blank=True)
    email = models.EmailField(_('email address'), blank=True)
    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')
        abstract = True

    def get_full_name(self):
        """
        Returns the first_name plus the last_name, with a space in between.
        """
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        "Returns the short name for the user."
        return self.first_name

    def email_user(self, subject, message, from_email=None, **kwargs):
        """
        Sends an email to this User.
        """
        send_mail(subject, message, from_email, [self.email], **kwargs)

    # Facebook
    USER_TYPE_FACEBOOK = 'f'
    USER_TYPE_DJANGO = 'd'
    CHOICES_USER_TYPE = (
        (USER_TYPE_FACEBOOK, 'Facebook'),
        (USER_TYPE_DJANGO, 'Django'),
    )
    user_type = models.CharField(
        max_length=1,
        choices=CHOICES_USER_TYPE,
    )

    # Additional personal info
    img_profile = models.ImageField(
        upload_to='user',
        blank=True,
    )
    age = models.IntegerField(
        '나이',
        blank=True,
        null=True,
    )
    like_posts = models.ManyToManyField('post.Post',
                                        verbose_name='좋아요 누른 포스트 목록',
                                        related_name='liked_user')
    # 내가 팔로우 하고 있는 유저 목록

    # 나를 follow하고 있는 사람 목록
    #   followers
    # 내가 follow하고 있는 사람 목록은
    #   followed_users
    following_users = models.ManyToManyField(
        'self',
        through='Relation',
        symmetrical=False,
        related_name='followers',
    )
    objects = UserManager()

    class Meta:
        verbose_name = '사용자'
        verbose_name_plural = f'{verbose_name} 목록'

    def follow_toggle(self, user):
        """

        :param user:
        :return:
        """
        if not isinstance(user, User):
            raise ValueError("'user' must be a User instance.")

        relation, relation_created = self.following_user_relations.get_or_create(
            to_user=user)
        if relation_created:
            return True

        relation.delete()
        return False

    def like_post(self, post):
        """자신의 like_posts에 해당내용 추가
        :param post:
        :return:
        """
        self.like_posts.add(post=post)
コード例 #24
0
class CustomUser(AbstractUser):
    username_validator = UnicodeUsernameValidator()

    password = models.CharField(verbose_name=_('password'),
                                max_length=128
                                )
    last_login = models.DateTimeField(verbose_name=_('last login'),
                                      blank=True,
                                      null=True
                                      )
    username = models.CharField(verbose_name=_('username'),
                                max_length=150,
                                unique=True,
                                help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
                                validators=[username_validator],
                                error_messages={
                                    'unique': _("A user with that username already exists."),
                                },
                                null=True
                                )
    first_name = models.CharField(verbose_name=_('first name'),
                                  max_length=30,
                                  blank=True
                                  )
    last_name = models.CharField(verbose_name=_('last name'),
                                 max_length=150,
                                 blank=True
                                 )
    is_staff = models.BooleanField(verbose_name=_('staff status'),
                                   default=False,
                                   help_text=_('Designates whether the user can log into this admin site.'),
                                   )
    is_active = models.BooleanField(verbose_name=_('active'),
                                    default=True,
                                    help_text=_(
                                        'Designates whether this user should be treated as active. '
                                        'Unselect this instead of deleting accounts.'
                                    ),
                                    )
    date_joined = models.DateTimeField(verbose_name=_('date joined'),
                                       default=timezone.now
                                       )

    email = models.EmailField(verbose_name=_('Email адрес'),
                              unique=True,
                              error_messages={
                                  'unique': _("A user with that email already exists."),
                              },
                              )

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name']

    class Meta:
        verbose_name = 'Пользоатель'
        verbose_name_plural = 'Пользователи'
        ordering = ['-date_joined']

    def name(self):
        if self.first_name:
            if self.last_name:
                return self.get_full_name()
            else:
                return self.first_name
        else:
            first_name = ['Неопознаный', 'Загадочный', 'Новый', 'Странный']
            last_name = ['Лемур', 'Слон', 'Тигр', 'Кот', 'Якуар', 'Медведь', 'Динозавр']
            return '{first_name} {last_name}'.format(first_name=choice(first_name), last_name=choice(last_name))

    def __str__(self):
        return '{name} ({email})'.format(name=self.name(), email=self.email)
コード例 #25
0
ファイル: forms.py プロジェクト: fer334/ItemManager
class UpdateUserForm(forms.ModelForm):
    """Formulario para la modificacion del usuario."""
    # Atributo de clase que almacena el id
    # de Usuario que esta siendo modificado
    id = 0
    username_validator = UnicodeUsernameValidator()

    #: Campo para la modificacion del nombre de Usuario
    username = forms.CharField(
        label='Nombre de Usuario',
        min_length=3,
        max_length=150,
        required=True,
        help_text='Requerido. 150 caracteres o menos.'
                  ' Solamente letras, digitos y @/./+/-/_',
        validators=[username_validator],
    )

    field_order = ('username', 'first_name', 'last_name')

    class Meta:
        """Form settings."""

        model = Usuario
        fields = ('first_name', 'last_name')

    def __init__(self, *args, **kwargs):
        """
        Constructor de clase, se modifican algunos atributos predefinidos

        :param args: args por defecto
        :param kwargs: kwargs por defecto
        """
        super().__init__(*args, **kwargs)

        if self.instance is not None:
            print("none")
            self.id = self.instance.id
        print('id')
        print(self.id)

    def update(self, key):
        """
        Metodo que actualiza la base de datos.

        :param key: clave el query a la base de datos
        """
        data = self.cleaned_data
        Usuario.objects.filter(username=key).update(**data)

    def clean_username(self):
        """Comprueba si el usuario es unico"""
        username = self.cleaned_data['username']
        user_taken = Usuario.objects.filter(username=username)

        if user_taken.count() != 0:
            if user_taken[0].id != self.id:
                raise forms.ValidationError(
                    'El nombre de usuario no esta disponible'
                )
        return username
コード例 #26
0
ファイル: models.py プロジェクト: Kudoas/KudoLog
class User(AbstractBaseUser, PermissionsMixin):

    is_staff = models.BooleanField(
        _('staff status'),
        default=False,
        help_text=_(
            'Designates whether the user can log into this admin site.'),
    )
    is_active = models.BooleanField(
        _('active'),
        default=True,
        help_text=_(
            'Designates whether this user should be treated as active. '
            'Unselect this instead of deleting accounts.'),
    )
    username = models.CharField(
        _('username'),
        max_length=150,
        unique=True,
        help_text=
        _('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'
          ),
        validators=[UnicodeUsernameValidator()],
        error_messages={
            'unique': _("A user with that username already exists."),
        },
    )
    display_name = models.CharField(_('name'), max_length=30)
    email = models.EmailField(_('email address'), unique=True)
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
    icon = models.ImageField(upload_to='account', blank=True)
    GENDER_CHOICES = ((
        '女性',
        '女性',
    ), (
        '男性',
        '男性',
    ), (
        '秘密',
        '秘密',
    ))
    gender = models.CharField(max_length=50,
                              blank=True,
                              choices=GENDER_CHOICES)

    def make_select_object(from_x, to_y, dates, increment=True):
        if increment:
            for i in range(from_x, to_y):
                dates.append([i, i])
            else:
                for i in range(from_x, to_y, -1):
                    dates.append([i, i])
        return dates

    years = []
    current_year = datetime.now().year
    BIRTH_YEAR_CHOICES = make_select_object(current_year + 1,
                                            current_year - 80, years)
    for i in range(len(BIRTH_YEAR_CHOICES)):
        BIRTH_YEAR_CHOICES[i] = [str(j) for j in BIRTH_YEAR_CHOICES[i]]
    birth_year = models.CharField(max_length=20,
                                  blank=True,
                                  choices=BIRTH_YEAR_CHOICES)
    months = []
    BIRTH_MONTH_CHOICES = make_select_object(1, 13, months)
    for i in range(len(BIRTH_MONTH_CHOICES)):
        BIRTH_MONTH_CHOICES[i] = [str(j) for j in BIRTH_MONTH_CHOICES[i]]
    birth_month = models.CharField(max_length=20,
                                   blank=True,
                                   choices=BIRTH_MONTH_CHOICES)
    LOCATION_CHOICES = ((
        '北海道',
        '北海道',
    ), (
        '東北',
        '東北',
    ), (
        '関東',
        '関東',
    ), (
        '中部',
        '中部',
    ), (
        '近畿',
        '近畿',
    ), (
        '中国',
        '中国',
    ), (
        '四国',
        '四国',
    ), (
        '九州',
        '九州',
    ))
    location = models.CharField(max_length=50,
                                blank=True,
                                choices=LOCATION_CHOICES)
    favorite_word = models.CharField(max_length=50, blank=True)
    objects = UserManager()
    EMAIL_FIELD = 'email'
    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

    def get_name(self):
        return self.display_name

    def __str__(self):
        return self.username
コード例 #27
0
ファイル: validators.py プロジェクト: jayvynl/django-blog
from django.contrib.auth.validators import UnicodeUsernameValidator

username_validator = UnicodeUsernameValidator()
コード例 #28
0
from django.utils.text import slugify
from django.db import models
from django.db.models import Count, Q
from django.conf import settings
from django.core.cache import cache

from main.core.models import TimeStampedModel
from main.users.manager import UserManager

from autoslug import AutoSlugField
import pytz, os, random, pycountry

countries = sorted([(country.alpha_2, country.name)
                    for country in pycountry.countries])

username_validator = UnicodeUsernameValidator(
) if six.PY3 else ASCIIUsernameValidator()
_PHONE_REGEX = RegexValidator(
    regex=r'(\d{9,15})$',
    message=_(
        "Your phone number should consist of 9-15 digits. Example: 1114442277")
)


def get_random_pin():
    return random.choice(range(100000, 999999))


class User(AbstractBaseUser, PermissionsMixin, TimeStampedModel):
    class Meta:
        verbose_name = _("User")
        verbose_name_plural = _("Users")
コード例 #29
0
ファイル: validators.py プロジェクト: mvasilkov/story-mode
from django.contrib.auth.validators import ASCIIUsernameValidator, UnicodeUsernameValidator

username_val = [ASCIIUsernameValidator()]

persona_name_val = [UnicodeUsernameValidator()]
コード例 #30
0
class User(AbstractBaseUser, PermissionsMixin):
    username_validator = UnicodeUsernameValidator()

    username = models.CharField(
        _("username"),
        max_length=150,
        unique=True,
        help_text=_("Required. 150 characters or fewer. Letters, "
                    "digits and @/./+/-/_ only."),
        validators=[username_validator],
        error_messages={
            "unique": _("A user with that username already exists."),
        },
    )
    role = models.IntegerField(verbose_name=_("Роль"), default=1, choices=ROLE)
    first_name = models.CharField(_("first name"), max_length=30, blank=True)
    last_name = models.CharField(_("last name"), max_length=150, blank=True)
    patronymic = models.CharField(verbose_name=_("Отчество"),
                                  max_length=150,
                                  blank=True,
                                  null=True)
    employe_position = models.CharField(
        verbose_name=_("Должность сотрудника"),
        max_length=150,
        blank=True,
        null=True,
    )
    phone = models.CharField(verbose_name=_("Номер телефона"),
                             max_length=150,
                             blank=True,
                             null=True)
    email = models.EmailField(_("email address"), blank=True)
    is_staff = models.BooleanField(
        _("staff status"),
        default=False,
        help_text=_(
            "Designates whether the user can log into this admin site."),
    )
    is_active = models.BooleanField(
        _("active"),
        default=True,
        help_text=_(
            "Designates whether this user should be treated as active. "
            "Unselect this instead of deleting accounts."),
    )
    date_joined = models.DateTimeField(_("date joined"), default=timezone.now)

    objects = UserManager()

    EMAIL_FIELD = "email"
    USERNAME_FIELD = "username"
    REQUIRED_FIELDS = ["email"]

    class Meta:
        swappable = "AUTH_USER_MODEL"
        verbose_name = _("user")
        verbose_name_plural = _("users")

    def clean(self):
        super().clean()
        self.email = self.__class__.objects.normalize_email(self.email)

    def get_full_name(self):
        """
        Return the first_name plus the last_name, with a space in between.
        """
        full_name = "%s %s" % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        """Return the short name for the user."""
        return self.first_name

    def email_user(self, subject, message, from_email=None, **kwargs):
        """Send an email to this user."""
        send_mail(subject, message, from_email, [self.email], **kwargs)