Миграции юзера

feature/fix_generate_pass
Andrey 8 years ago
parent 0bb4f5c186
commit b6c4759d19
  1. 3
      access/admin.py
  2. 5
      access/init_group.py
  3. 16
      access/load_users.py
  4. 30
      access/migrations/0010_auto_20171016_1709.py
  5. 30
      access/migrations/0012_auto_20171017_0924.py
  6. 35
      access/migrations/0013_auto_20171017_0933.py
  7. 52
      access/models.py

@ -1,7 +1,8 @@
from django.contrib import admin from django.contrib import admin
from access.models import ActiveObject, ExtraPrivilege, User, Account from access.models import ActiveObject, ExtraPrivilege, User, Account, Invite
admin.site.register(User) admin.site.register(User)
admin.site.register(Account) admin.site.register(Account)
admin.site.register(ExtraPrivilege) admin.site.register(ExtraPrivilege)
admin.site.register(ActiveObject) admin.site.register(ActiveObject)
admin.site.register(Invite)

@ -10,3 +10,8 @@ from django.contrib.auth.models import Group
if __name__ == '__main__': if __name__ == '__main__':
Group.objects.get_or_create(name='students') Group.objects.get_or_create(name='students')
Group.objects.get_or_create(name='teachers') Group.objects.get_or_create(name='teachers')
Group.objects.get_or_create(name='managers')
Group.objects.get_or_create(name='lead_managers')
Group.objects.get_or_create(name='curator')
Group.objects.get_or_create(name='partner')
Group.objects.get_or_create(name='project_manager')

@ -0,0 +1,16 @@
import os, sys, django, csv
sys.path.append("../")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup()
from django.contrib.auth import get_user_model
if __name__ == '__main__':
with open('../csv/access/users.csv') as user_csv:
user_reader = csv.DictReader(user_csv)
for row in user_reader:
try:
get_user_model().objects.get_or_create(**dict(row))
except ValueError:
pass

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-10-16 17:09
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('access', '0009_auto_20171016_1634'),
]
operations = [
migrations.AlterField(
model_name='account',
name='gender',
field=models.SmallIntegerField(choices=[(1, 'male'), (2, 'female'), (0, 'undefined')], default=0),
),
migrations.AlterField(
model_name='invite',
name='hash',
field=models.CharField(default='QtrdrGbAnXtRHSL', max_length=15),
),
migrations.AlterField(
model_name='user',
name='last_login',
field=models.DateTimeField(blank=True, null=True, verbose_name='last login'),
),
]

@ -0,0 +1,30 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-10-17 09:24
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('access', '0011_auto_20171017_0800'),
]
operations = [
migrations.AddField(
model_name='invite',
name='date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='account',
name='gender',
field=models.SmallIntegerField(choices=[(0, 'undefined'), (2, 'female'), (1, 'male')], default=0),
),
migrations.AlterField(
model_name='invite',
name='hash',
field=models.CharField(default='JnNSTfEkoDEclgp', max_length=15),
),
]

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.6 on 2017-10-17 09:33
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('access', '0012_auto_20171017_0924'),
]
operations = [
migrations.AlterField(
model_name='account',
name='gender',
field=models.SmallIntegerField(choices=[(0, 'undefined'), (1, 'male'), (2, 'female')], default=0),
),
migrations.AlterField(
model_name='invite',
name='hash',
field=models.CharField(default='RGmRBoJxBvpmTzm', max_length=15),
),
migrations.AlterField(
model_name='user',
name='first_name',
field=models.CharField(blank=True, default='Guest', max_length=63, verbose_name='first name'),
),
migrations.AlterField(
model_name='user',
name='last_name',
field=models.CharField(blank=True, max_length=63, verbose_name='last name'),
),
]

@ -21,6 +21,7 @@ class Invite(models.Model):
hash = models.CharField( hash = models.CharField(
max_length=15, default=''.join(random.choice(string.ascii_letters) for x in range(15)) max_length=15, default=''.join(random.choice(string.ascii_letters) for x in range(15))
) )
date = models.DateTimeField(null=True, blank=True)
class Account(models.Model): class Account(models.Model):
@ -36,15 +37,32 @@ class Account(models.Model):
photo = models.ImageField(null=True, blank=True, default='user/photo/default_avatar.png', upload_to='user/photo/') photo = models.ImageField(null=True, blank=True, default='user/photo/default_avatar.png', upload_to='user/photo/')
phone = models.CharField(max_length=15, blank=True) phone = models.CharField(max_length=15, blank=True)
def __str__(self):
return self.owner.email
class CustomUserManager(BaseUserManager): class CustomUserManager(BaseUserManager):
use_in_migrations = True use_in_migrations = True
@transaction_decorator def get_or_create(self, email=None, password=None, **kwargs):
def _create_user(self, email, password=None, is_staff=False, is_superuser=False, is_active=False, if not email:
first_name='Guest', **extra_fields): raise ValueError('email not set')
if password:
kwargs["hash_password"] = password
kwargs['email'] = self.normalize_email(email)
now = timezone.now() try:
return self.get(email=kwargs['email'])
except self.model.DoesNotExist:
return self._create_user(**kwargs)
@transaction_decorator
def _create_user(self, email, password=None, is_staff=False, is_superuser=False,
is_active=False, first_name='Guest', hash_password=None, is_send=False,
date_joined=timezone.now(), last_login=timezone.now(), **extra_fields):
if not email: if not email:
raise ValueError('The given email must be set') raise ValueError('The given email must be set')
@ -52,18 +70,23 @@ class CustomUserManager(BaseUserManager):
email = self.normalize_email(email) email = self.normalize_email(email)
user = self.model(email=email, is_staff=is_staff, is_active=is_active, first_name=first_name, user = self.model(email=email, is_staff=is_staff, is_active=is_active, first_name=first_name,
is_superuser=is_superuser, last_login=now, **extra_fields) is_superuser=is_superuser, date_joined=date_joined, last_login=last_login, **extra_fields)
if not password: if not password:
password = ''.join(random.choice(string.ascii_letters) for x in range(8)) password = ''.join(random.choice(string.ascii_letters) for x in range(8))
user.set_password(password) if not hash_password:
user.set_password(password)
else:
user.password = hash_password
user.save(using=self._db) user.save(using=self._db)
group = Group.objects.create(name=user.email)
user.groups.add(group)
Account.objects.create(owner=user) Account.objects.create(owner=user)
Invite.objects.create(owner=user)
# Должна идти отбивка if is_send:
pass
Invite.objects.create(owner=user)
# Должна идти отбивка
return user return user
def create_user(self, email, password, **extra_fields): def create_user(self, email, password, **extra_fields):
@ -73,7 +96,7 @@ class CustomUserManager(BaseUserManager):
return self._create_user(email=email, password=password, is_superuser=True, is_staff=True, is_active=True) return self._create_user(email=email, password=password, is_superuser=True, is_staff=True, is_active=True)
def create_student(self, email, password, **extra_fields): def create_student(self, email, password, **extra_fields):
user = self.create_user(email=email, password=password, **extra_fields) user = self.create_user(email=email, password=password, is_send=True, **extra_fields)
group = Group.objects.get(name='students') group = Group.objects.get(name='students')
user.groups.add(group) user.groups.add(group)
return user return user
@ -81,10 +104,9 @@ class CustomUserManager(BaseUserManager):
class User(AbstractBaseUser, PermissionsMixin): class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True) email = models.EmailField(_('email address'), unique=True)
first_name = models.CharField(_('first name'), max_length=30, blank=True, default='Guest') first_name = models.CharField(_('first name'), max_length=63, blank=True, default='Guest')
last_name = models.CharField(_('last name'), max_length=30, blank=True) last_name = models.CharField(_('last name'), max_length=63, blank=True)
date_joined = models.DateTimeField(_('date joined'), auto_now_add=True) date_joined = models.DateTimeField(_('date joined'))
last_login = models.DateTimeField(_('last login'), auto_now_add=True)
is_staff = models.BooleanField(verbose_name='флаг персонала', default=False, is_staff = models.BooleanField(verbose_name='флаг персонала', default=False,
help_text='Определяет разрешение пользователя на вход в административную часть.') help_text='Определяет разрешение пользователя на вход в административную часть.')
is_active = models.BooleanField(verbose_name='активен', default=False, is_active = models.BooleanField(verbose_name='активен', default=False,

Loading…
Cancel
Save