|
|
|
|
@ -3,9 +3,12 @@ from django.contrib.auth.models import AbstractUser, UserManager |
|
|
|
|
from django.contrib.postgres import fields as pgfields |
|
|
|
|
from django.utils.translation import gettext_lazy as _ |
|
|
|
|
|
|
|
|
|
from rest_framework.authtoken.models import Token |
|
|
|
|
|
|
|
|
|
from json import dumps |
|
|
|
|
from api.v1 import serializers |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class User(AbstractUser): |
|
|
|
|
USER_ROLE = 0 |
|
|
|
|
AUTHOR_ROLE = 1 |
|
|
|
|
@ -24,8 +27,10 @@ class User(AbstractUser): |
|
|
|
|
(FEMALE, 'Женщина'), |
|
|
|
|
) |
|
|
|
|
email = models.EmailField(_('email address'), unique=True) |
|
|
|
|
role = models.PositiveSmallIntegerField('Роль', default=0, choices=ROLE_CHOICES) |
|
|
|
|
gender = models.CharField('Пол', max_length=1, default='n', choices=GENDER_CHOICES) |
|
|
|
|
role = models.PositiveSmallIntegerField( |
|
|
|
|
'Роль', default=0, choices=ROLE_CHOICES) |
|
|
|
|
gender = models.CharField( |
|
|
|
|
'Пол', max_length=1, default='n', choices=GENDER_CHOICES) |
|
|
|
|
birthday = models.DateField('День рождения', null=True, blank=True) |
|
|
|
|
country = models.CharField('Страна', max_length=50, null=True, blank=True) |
|
|
|
|
city = models.CharField('Город', max_length=85, null=True, blank=True) |
|
|
|
|
@ -38,7 +43,9 @@ class User(AbstractUser): |
|
|
|
|
vkontakte = models.URLField('ВКонтакте', default='', null=True, blank=True) |
|
|
|
|
fb_id = models.BigIntegerField(null=True, blank=True, unique=True) |
|
|
|
|
fb_data = pgfields.JSONField(default={}, null=True, blank=True) |
|
|
|
|
is_email_proved = models.BooleanField('Верифицирован по email', default=False) |
|
|
|
|
is_email_proved = models.BooleanField( |
|
|
|
|
'Верифицирован по email', default=False |
|
|
|
|
) |
|
|
|
|
photo = models.ImageField('Фото', null=True, blank=True, upload_to='users') |
|
|
|
|
|
|
|
|
|
USERNAME_FIELD = 'email' |
|
|
|
|
@ -51,3 +58,17 @@ class User(AbstractUser): |
|
|
|
|
user_data = serializers.user.UserSerializer(instance=self).data |
|
|
|
|
user_data = dumps(user_data, ensure_ascii=False) |
|
|
|
|
return user_data |
|
|
|
|
|
|
|
|
|
@receiver(post_save, sender=User) |
|
|
|
|
def create_auth_token(sender, instance=None, created=False, **kwargs): |
|
|
|
|
if ( |
|
|
|
|
(instance.is_active or instance.fb_id) and |
|
|
|
|
instance.role in [User.AUTHOR_ROLE, User.ADMIN_ROLE] and not |
|
|
|
|
hasattr(instance, 'auth_token') |
|
|
|
|
): |
|
|
|
|
Token.objects.create(user=instance) |
|
|
|
|
elif ( |
|
|
|
|
not (instance.is_active or instance.fb_id) or |
|
|
|
|
instance.role not in [User.AUTHOR_ROLE, User.ADMIN_ROLE] |
|
|
|
|
) and hasattr(instance, 'auth_token'): |
|
|
|
|
instance.auth_token.delete() |
|
|
|
|
|