Migrate to new user model

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent 6aa3acdd8c
commit b9ef367c6d
  1. 14
      apps/auth/views.py
  2. 7
      apps/user/admin.py
  3. 57
      apps/user/migrations/0001_initial.py
  4. 60
      apps/user/models.py
  5. 3
      project/settings.py

@ -13,7 +13,6 @@ from django.views.generic import FormView, View
from django.views.generic.edit import BaseFormView
from apps.notification.utils import send_email
from apps.user.models import LilcityUserSettings, LilcityUserProxy
from .forms import LearnerRegistrationForm
from .tokens import verification_email_token
@ -120,9 +119,9 @@ class FacebookLoginOrRegistration(View):
except FacepyError:
return JsonResponse({"success": False})
facebook_id = data.get('id')
fb_id = data.get('id')
lilcity_user_settings = LilcityUserSettings.objects.filter(facebook_id=facebook_id)
lilcity_user_settings = User.objects.filter(fb_id=fb_id)
if lilcity_user_settings.count():
login(requests, user=lilcity_user_settings[0].user)
return JsonResponse({"success": True})
@ -136,9 +135,8 @@ class FacebookLoginOrRegistration(View):
first_name = data.get('first_name', '')
last_name = data.get('last_name', '')
user = LilcityUserProxy.objects.create_user(username=email, email=email, first_name=first_name, last_name=last_name, password=uuid4().hex)
user.lilcity_user_settings.is_verification_email = True
user.lilcity_user_settings.facebook_id = facebook_id
user.lilcity_user_settings.save()
user = User.objects.create_user(username=email, email=email, first_name=first_name, last_name=last_name, password=uuid4().hex)
user.is_email_proved = True
user.fb_id = fb_id
user.save()
return JsonResponse({"success": True})

@ -1,8 +1 @@
from django.contrib import admin
from .models import LilcityUserSettings
@admin.register(LilcityUserSettings)
class LilcityUserSettingsAdmin(admin.ModelAdmin):
pass

@ -1,9 +1,10 @@
# Generated by Django 2.0.1 on 2018-01-15 08:33
# Generated by Django 2.0.1 on 2018-01-27 16:03
import apps.user.models
from django.conf import settings
import django.contrib.auth.models
import django.contrib.auth.validators
import django.contrib.postgres.fields.jsonb
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
@ -12,33 +13,47 @@ class Migration(migrations.Migration):
dependencies = [
('auth', '0009_alter_user_last_name_max_length'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='LilcityUserSettings',
name='User',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('is_verification_email', models.BooleanField(default=False)),
],
),
migrations.CreateModel(
name='LilcityUserProxy',
fields=[
('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=[django.contrib.auth.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=150, verbose_name='last name')),
('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')),
('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')),
('role', models.PositiveSmallIntegerField(choices=[(0, 'пользователь'), (1, 'автор'), (2, 'администратор')], default=0)),
('gender', models.CharField(choices=[('n', 'не указан'), ('m', 'Мужчина'), ('f', 'Женщина')], max_length=1)),
('country', models.CharField(default='', max_length=50)),
('city', models.CharField(default='', max_length=85)),
('about', models.CharField(default='', max_length=1000)),
('instagram', models.URLField(default='')),
('facebook', models.URLField(default='')),
('twitter', models.URLField(default='')),
('pinterest', models.URLField(default='')),
('youtube', models.URLField(default='')),
('vkontakte', models.URLField(default='')),
('fb_id', models.PositiveIntegerField(blank=True, null=True, unique=True)),
('fb_data', django.contrib.postgres.fields.jsonb.JSONField(default={})),
('is_email_proved', models.BooleanField(default=False)),
('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={
'proxy': True,
'indexes': [],
'verbose_name': 'user',
'verbose_name_plural': 'users',
'abstract': False,
},
bases=('auth.user',),
managers=[
('objects', apps.user.models.LilcityUserManager()),
('objects', django.contrib.auth.models.UserManager()),
],
),
migrations.AddField(
model_name='lilcityusersettings',
name='user',
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='lilcity_user_settings', to=settings.AUTH_USER_MODEL),
),
]

@ -1,27 +1,35 @@
from django.db import models
from django.contrib.auth import get_user_model
from django.contrib.auth.models import AbstractUser, UserManager
User = get_user_model()
class LilcityUserManager(UserManager):
def create_user(self, username, email=None, password=None, **extra_fields):
user = super().create_user(username, email, password, **extra_fields)
LilcityUserSettings.objects.create(user=user)
return user
class LilcityUserProxy(User):
objects = LilcityUserManager()
class Meta:
proxy = True
class LilcityUserSettings(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='lilcity_user_settings')
is_verification_email = models.BooleanField(default=False)
facebook_id = models.PositiveIntegerField(null=True, blank=True, unique=True)
from django.contrib.auth.models import AbstractUser
from django.contrib.postgres import fields as pgfields
from django.utils.translation import gettext_lazy as _
class User(AbstractUser):
ROLE_CHOICES = (
(0, 'пользователь'),
(1, 'автор'),
(2, 'администратор'),
)
GENDER_CHOICES = (
('n', 'не указан'),
('m', 'Мужчина'),
('f', 'Женщина'),
)
email = models.EmailField(_('email address'), unique=True)
role = models.PositiveSmallIntegerField(default=0, choices=ROLE_CHOICES)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
country = models.CharField(max_length=50, default='')
city = models.CharField(max_length=85, default='')
about = models.CharField(max_length=1000, default='')
instagram = models.URLField(default='')
facebook = models.URLField(default='')
twitter = models.URLField(default='')
pinterest = models.URLField(default='')
youtube = models.URLField(default='')
vkontakte = models.URLField(default='')
fb_id = models.PositiveIntegerField(null=True, blank=True, unique=True)
fb_data = pgfields.JSONField(default={})
is_email_proved = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []

@ -27,7 +27,6 @@ DEBUG = True
ALLOWED_HOSTS = ["*"] # fixme: production mode
# Application definition
INSTALLED_APPS = [
@ -110,6 +109,8 @@ AUTH_PASSWORD_VALIDATORS = [
},
]
AUTH_USER_MODEL = 'user.User'
# Internationalization
# https://docs.djangoproject.com/en/2.0/topics/i18n/

Loading…
Cancel
Save