Если цените время и стремитесь быть продуктивными, то онлайн-образование это выбор прогрессивного человека для достижения + необходимых результатов.
+diff --git a/apps/auth/views.py b/apps/auth/views.py index 7e30114e..b932e5a9 100644 --- a/apps/auth/views.py +++ b/apps/auth/views.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 @@ -133,10 +132,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}) @@ -150,10 +148,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}) diff --git a/apps/user/admin.py b/apps/user/admin.py index 92876bde..694323fa 100644 --- a/apps/user/admin.py +++ b/apps/user/admin.py @@ -1,8 +1 @@ from django.contrib import admin - -from .models import LilcityUserSettings - - -@admin.register(LilcityUserSettings) -class LilcityUserSettingsAdmin(admin.ModelAdmin): - pass diff --git a/apps/user/migrations/0001_initial.py b/apps/user/migrations/0001_initial.py index 54aa1ab8..a2ed6c65 100644 --- a/apps/user/migrations/0001_initial.py +++ b/apps/user/migrations/0001_initial.py @@ -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), - ), ] diff --git a/apps/user/models.py b/apps/user/models.py index 82ec3c6d..c0aac8ca 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -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.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('Верифицирован по email', default=False) + + USERNAME_FIELD = 'email' + REQUIRED_FIELDS = ['username'] diff --git a/project/settings.py b/project/settings.py index 10946d9e..8ad324da 100644 --- a/project/settings.py +++ b/project/settings.py @@ -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/ diff --git a/project/templates/lilcity/main.html b/project/templates/lilcity/main.html new file mode 100644 index 00000000..68994872 --- /dev/null +++ b/project/templates/lilcity/main.html @@ -0,0 +1,575 @@ +{% extends "templates/lilcity/index.html" %} {% load static %} + +{% block title %}School LIL.CITY{% endblock title %} +{% block content %} +
Каждый день, с понедельника по пятницу в 17:00 по московскому времени мы встречаемся в прямом эфире.
+Пять предметов на каждый день: Персонаж, Развитие креативного мышления, Акварель, Пластилиновая живопись и История + искусств.
+
+ С раннего возраста мы стремимся развить в детях креативность, умение думать и анализировать, работать в смешанных + техниках и всевозможными материалами. Каждый урок интересный и уникальный.
+Для раскрытия творческого потенциала создаем благоприятные условия которые вдохновляют к развитию. Наша школа создает + необходимую среду, в которой маленькое семечко способностей и желания рисовать вырастет в могучее дерево безграничного + потенциала. +
+Наши ученики становяться осознанными, уверенными и творческий личностями, способные решать сложные задачи благодаря + воображению. +
+
+
+
+ Если цените время и стремитесь быть продуктивными, то онлайн-образование это выбор прогрессивного человека для достижения + необходимых результатов.
+И, наконец, учиться онлайн можете в пижаме, без макияжа и с огурцами на лице!
+
+
+
+ Тысячи шедевров уже созданы благодаря Lil City School. Более 10000 работ можно + увидеть в Инстаграм
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Преподаватели Lil City School имеют большой опыт, поэтому с первых минут детям будет интересно с нами.
+
+ Закончила ПХУ им К.А.Савицкого художник театра и кино. Работала с крупнейшими российскими и зарубежными + издательствами.
+Участник и победитель международных выставок.
+Основатель компании "Lil City".
+
+ Закончила ПХУ им К.А.Савицкого художник театра и кино. Работала с крупнейшими российскими и зарубежными + издательствами.
+Участник и победитель международных выставок.
+Основатель компании "Lil City".
+
+ Закончила ПХУ им К.А.Савицкого художник театра и кино. Работала с крупнейшими российскими и зарубежными + издательствами.
+Участник и победитель международных выставок.
+Основатель компании "Lil City".
+
+ Закончила ПХУ им К.А.Савицкого художник театра и кино. Работала с крупнейшими российскими и зарубежными + издательствами.
+Участник и победитель международных выставок.
+Основатель компании "Lil City".
+
+
+
+
+
+
+