Merge branch 'feature/user_update' into feature/authentication

remotes/origin/hasaccess
Ivlev Denis 8 years ago
commit 6bd9bf13f0
  1. 16
      apps/auth/views.py
  2. 7
      apps/user/admin.py
  3. 57
      apps/user/migrations/0001_initial.py
  4. 58
      apps/user/models.py
  5. 3
      project/settings.py
  6. 575
      project/templates/lilcity/main.html
  7. 2
      project/urls.py
  8. 0
      web/build/img/sprite.svg

@ -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})

@ -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.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']

@ -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/

@ -0,0 +1,575 @@
{% extends "templates/lilcity/index.html" %} {% load static %}
{% block title %}School LIL.CITY{% endblock title %}
{% block content %}
<div class="main" style="background-image: url({% static 'img/bg-1.jpg' %});">
<div class="main__center center">
<div class="main__title">Первая онлайн-школа креативного мышления для детей! 5+</div>
<a class="main__btn btn" href="#">КУПИТЬ ДОСУП ЗА 2000р. в мес.</a>
</div>
</div>
<div class="section">
<div class="section__center center">
<div class="text text_lg">
<p>Каждый день, с понедельника по пятницу в 17:00 по московскому времени мы встречаемся в прямом эфире. </p>
<p>Пять предметов на каждый день: Персонаж, Развитие креативного мышления, Акварель, Пластилиновая живопись и История
искусств. </p>
<img class="text__curve text__curve_one" src="{% static 'img/curve-1.svg' %}" width="320">
</div>
<div class="title title_center">О школе</div>
<div class="about">
<div class="about__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="about__wrap">
<div class="about__content">
<p>С раннего возраста мы стремимся развить в детях креативность, умение думать и анализировать, работать в смешанных
техниках и всевозможными материалами. Каждый урок интересный и уникальный.</p>
<p>Для раскрытия творческого потенциала создаем благоприятные условия которые вдохновляют к развитию. Наша школа создает
необходимую среду, в которой маленькое семечко способностей и желания рисовать вырастет в могучее дерево безграничного
потенциала.
</p>
<p>Наши ученики становяться осознанными, уверенными и творческий личностями, способные решать сложные задачи благодаря
воображению.
</p>
</div>
<div class="about__ceo">- Sasha Kru, CEO и основатель
<a href='#'>Lil.City</a>
</div>
<a class="about__video video" href="#">
<img class="video__pic" src="{% static 'img/video-1.jpg' %}">
<svg class="icon icon-play">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-play"></use>
</svg>
</a>
<div class="about__more">Другие видео смотрите на нашем
<a href='#'>канале</a>
</div>
</div>
</div>
</div>
</div>
<a class="online" href="#" style="background-image: url({% static 'img/video-1.jpg' %});">
<div class="online__center center">
<div class="online__type">ПРЯМОЙ ЭФИР</div>
<div class="online__title">Каждый день в 17.00 (по Мск) </div>
<div class="online__text text">Кроме выходных. Запись эфира доступна в&nbsp;течение 24-х&nbsp;часов.</div>
<div class="online__action">
<svg class="icon icon-play">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-play"></use>
</svg>СМОТРЕТЬ ПРИМЕР ЭФИРА</div>
</div>
</a>
<div class="section">
<div class="section__center center">
<div class="title title_center">Преимущества</div>
<div class="text">
<p>Если цените время и стремитесь быть продуктивными, то онлайн-образование это выбор прогрессивного человека для достижения
необходимых результатов.</p>
<img class="text__curve text__curve_two" src="{% static 'img/curve-2.svg' %}" width="211">
</div>
<div class="benefits">
<div class="benefits__item">
<div class="benefits__preview">
<svg class="icon icon-thumb">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-thumb"></use>
</svg>
</div>
<div class="benefits__title">Доступность</div>
<div class="benefits__content">Учитесь, не выходя из дома. С&nbsp;активной жизнью в больших городах, времени для образование остается не много.
Маленьким городам, наоборот, не хватает разнообразия мегаполисов.</div>
</div>
<div class="benefits__item">
<div class="benefits__preview">
<svg class="icon icon-wallet">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-wallet"></use>
</svg>
</div>
<div class="benefits__title">Стоимость</div>
<div class="benefits__content">Онлайн-образование дешевле. Здесь не требуется аренда помещения, нет коммунальных платежей.</div>
</div>
<div class="benefits__item">
<div class="benefits__preview">
<svg class="icon icon-location">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-location"></use>
</svg>
</div>
<div class="benefits__title">Свобода перемещений</div>
<div class="benefits__content">Это важный критерий для родителей. С онлайн-образованием собирать, одевать и стоять в бесконечных пробках теперь
не нужно.</div>
</div>
<div class="benefits__item">
<div class="benefits__preview">
<svg class="icon icon-searching">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-searching"></use>
</svg>
</div>
<div class="benefits__title">Выбор преподавателя </div>
<div class="benefits__content">Личные аккаунты Инстаграм также доступны, чтобы узнать о творчестве, мыслях и интересах. Принять решение у какого
преподавателя учиться теперь просто.</div>
</div>
</div>
<div class="text text_mb0">
<p>И, наконец, учиться онлайн можете в пижаме, без макияжа и с огурцами на лице!</p>
</div>
</div>
</div>
<div class="section section_review">
<div class="section__center center center_md">
<div class="title title_center">Отзывы</div>
<div class="text">Мы получаем сотни тёплых отзывов от довольных родителей. Их можно почитать
<a href="#">здесь;)</a>
</div>
<div class="reviews">
<div class="reviews__item">
<div class="reviews__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="reviews__wrap">
<div class="reviews__name">@redanna333</div>
<div class="reviews__content">Мой ребёнок зарисовал!!! Хотя, я и не ставила таких глобальных целей, участвуя в этом лагере, просто занять дитё
чем-то творческим хоть иногда, но он реально рисует, сам, и не надо приглашать и уговаривать, просто берёт и
рисует) Спасибо, Саша, от всей души) Надеемся на встречу в школе)</div>
</div>
</div>
<div class="reviews__item">
<div class="reviews__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="reviews__wrap">
<div class="reviews__name">@redanna333</div>
<div class="reviews__content">Саша, огромное спасибо за ещё одну возможность погружения в удивительный мир Ваших уроков! С начала первого летнего
лагеря и до сегодняшнего дня, был запущен творческий круговорот разных идей, по заданиям и просто так)). На самом
деле, удивительная способность, находясь далеко, по другую сторону экрана, создавать уникальный контакт присутствия
рядом, будто в одной комнате и давно знакомы). И ещё одно важное качество- быть на стороне ребёнка в непростом
творческом процессе- моя дочь, слушая Ваше задание, расправляет "крылья", не боясь оценочного мнения , а сосредоточившись
на задаче)). P.S В школу идём без сомнений!</div>
</div>
</div>
<div class="reviews__item">
<div class="reviews__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="reviews__wrap">
<div class="reviews__name">@redanna333</div>
<div class="reviews__content">Саша, 👋 Вы потрясающе четко и качественно можете объяснить задание урока! Дети настолько увлекаются процессом,
что взрослые и сами включаются в эту интересную игру ТВОРЧЕСТВО! Спасибо Вам за Вдохновение, Любовь и желание
творить Чудеса! Темыч теперь легко может начать рисовать "трудные" картинки, потому что тетя Саша сказала: "все
состоит из простых форм!" Теперь это наш девиз) главное ушёл страх, что не выйдет ПРАВИЛЬНО, потому что нет ограничений
и правил в творчестве😜🙌надеемся на скорую встречу!!!</div>
</div>
</div>
</div>
</div>
</div>
<div class="section">
<div class="section__center center">
<div class="title title_center">Галерея</div>
<div class="text">
<p>Тысячи шедевров уже созданы благодаря Lil City School. Более 10000 работ можно
<a href='#'>увидеть</a> в Инстаграм</p>
<img class="text__curve text__curve_three" src="{% static 'img/curve-3.svg' %}">
</div>
<div class="gallery">
<div class="gallery__grid">
<div class="gallery__item gallery__item_lg">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
</div>
<div class="gallery__grid">
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item gallery__item_lg">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
<div class="gallery__item">
<img class="gallery__pic" src="{% static 'img/box.jpg' %}">
</div>
</div>
</div>
</div>
</div>
<div class="app">
<div class="app__center center">
<div class="app__col">
<div class="app__theme">ПРИЛОЖЕНИЯ LIL CITY</div>
<div class="app__title">Лучшие работы попадают в приложение Lil World</div>
<div class="app__content">Lil World – это арт-фото редактор многократно отмеченный AppStore по всему миру как лучшее приложение с огромной коллекцией
иллюстраций стикеров. Украшайте ваши фото и превращайте их в волшебные миры.</div>
<div class="app__links">
<a class="app__link" href="#">
<img class="app__pic" src="{% static 'img/app-store.svg' %}">
</a>
<a class="app__link" href="#">
<img class="app__pic" src="{% static 'img/google-play.svg' %}">
</a>
</div>
</div>
<div class="app__col">
<div class="app__preview">
<img class="app__pic" src="{% static 'img/screens.png' %}">
</div>
</div>
</div>
</div>
<div class="section">
<div class="section__center center center_md">
<div class="title title_center">Преподаватели</div>
<div class="text">
<p>Преподаватели Lil City School имеют большой опыт, поэтому с первых минут детям будет интересно с нами.</p>
<img class="text__curve text__curve_three" src="{% static 'img/curve-3.svg' %}">
</div>
<div class="teachers">
<div class="teachers__item">
<div class="teachers__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="teachers__wrap">
<div class="teachers__title">Саша Крю,
<a href='#'>#lil_персонаж</a>
</div>
<div class="teachers__name">@sashakru</div>
<div class="teachers__content">
<p>Закончила ПХУ им К.А.Савицкого художник театра и кино. Работала с&nbsp;крупнейшими российскими и зарубежными
издательствами. </p>
<p>Участник и победитель международных выставок. </p>
<p>Основатель компании "Lil City".</p>
</div>
</div>
</div>
<div class="teachers__item">
<div class="teachers__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="teachers__wrap">
<div class="teachers__title">Саша Крю,
<a href='#'>#lil_персонаж</a>
</div>
<div class="teachers__name">@sashakru</div>
<div class="teachers__content">
<p>Закончила ПХУ им К.А.Савицкого художник театра и кино. Работала с&nbsp;крупнейшими российскими и зарубежными
издательствами. </p>
<p>Участник и победитель международных выставок. </p>
<p>Основатель компании "Lil City".</p>
</div>
</div>
</div>
<div class="teachers__item">
<div class="teachers__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="teachers__wrap">
<div class="teachers__title">Саша Крю,
<a href='#'>#lil_персонаж</a>
</div>
<div class="teachers__name">@sashakru</div>
<div class="teachers__content">
<p>Закончила ПХУ им К.А.Савицкого художник театра и кино. Работала с&nbsp;крупнейшими российскими и зарубежными
издательствами. </p>
<p>Участник и победитель международных выставок. </p>
<p>Основатель компании "Lil City".</p>
</div>
</div>
</div>
<div class="teachers__item">
<div class="teachers__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}">
</div>
<div class="teachers__wrap">
<div class="teachers__title">Саша Крю,
<a href='#'>#lil_персонаж</a>
</div>
<div class="teachers__name">@sashakru</div>
<div class="teachers__content">
<p>Закончила ПХУ им К.А.Савицкого художник театра и кино. Работала с&nbsp;крупнейшими российскими и зарубежными
издательствами. </p>
<p>Участник и победитель международных выставок. </p>
<p>Основатель компании "Lil City".</p>
</div>
</div>
</div>
</div>
<div class="text text_mb0">Если хотите к нам в команду, то ждем ваше резюме
<a href='#'>на&nbsp;почту</a>
</div>
</div>
</div>
<div class="section section_gray">
<div class="section__center center center_md">
<div class="title title_center">Расписание</div>
<div class="schedule">
<div class="schedule__item">
<div class="schedule__day">Понедельник</div>
<div class="schedule__wrap">
<div class="schedule__title">Персонаж.</div>
<div class="schedule__content">Учимся создавать персонажей из простых форм. Изучаем характеры и эмоции.</div>
<div class="schedule__toggle toggle">
<button class="toggle__head js-toggle-head">Материалы
<svg class="icon icon-arrow-down">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-arrow-down"></use>
</svg>
</button>
<div class="toggle__body">Cамое главное - иметь альбом или блокнот с пустыми страницами (без линий и клеток) плотной гладкой бумагой, формат
А4. Рисовать будем цветными карандашами, а также простым, мягкостью B2. Иногда пригодятся вырезки из журналов
и клей-карандаш.</div>
</div>
</div>
</div>
<div class="schedule__item">
<div class="schedule__day">Вторник</div>
<div class="schedule__wrap">
<div class="schedule__title">Персонаж.</div>
<div class="schedule__content">Учимся создавать персонажей из простых форм. Изучаем характеры и эмоции.</div>
<div class="schedule__toggle toggle">
<button class="toggle__head js-toggle-head">Материалы
<svg class="icon icon-arrow-down">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-arrow-down"></use>
</svg>
</button>
<div class="toggle__body">Cамое главное - иметь альбом или блокнот с пустыми страницами (без линий и клеток) плотной гладкой бумагой, формат
А4. Рисовать будем цветными карандашами, а также простым, мягкостью B2. Иногда пригодятся вырезки из журналов
и клей-карандаш.</div>
</div>
</div>
</div>
<div class="schedule__item">
<div class="schedule__day">Среда</div>
<div class="schedule__wrap">
<div class="schedule__title">Персонаж.</div>
<div class="schedule__content">Учимся создавать персонажей из простых форм. Изучаем характеры и эмоции.</div>
<div class="schedule__toggle toggle">
<button class="toggle__head js-toggle-head">Материалы
<svg class="icon icon-arrow-down">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-arrow-down"></use>
</svg>
</button>
<div class="toggle__body">Cамое главное - иметь альбом или блокнот с пустыми страницами (без линий и клеток) плотной гладкой бумагой, формат
А4. Рисовать будем цветными карандашами, а также простым, мягкостью B2. Иногда пригодятся вырезки из журналов
и клей-карандаш.</div>
</div>
</div>
</div>
<div class="schedule__item">
<div class="schedule__day">Четверг</div>
<div class="schedule__wrap">
<div class="schedule__title">Персонаж.</div>
<div class="schedule__content">Учимся создавать персонажей из простых форм. Изучаем характеры и эмоции.</div>
<div class="schedule__toggle toggle">
<button class="toggle__head js-toggle-head">Материалы
<svg class="icon icon-arrow-down">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-arrow-down"></use>
</svg>
</button>
<div class="toggle__body">Cамое главное - иметь альбом или блокнот с пустыми страницами (без линий и клеток) плотной гладкой бумагой, формат
А4. Рисовать будем цветными карандашами, а также простым, мягкостью B2. Иногда пригодятся вырезки из журналов
и клей-карандаш.</div>
</div>
</div>
</div>
<div class="schedule__item">
<div class="schedule__day">Пятница</div>
<div class="schedule__wrap">
<div class="schedule__title">Персонаж.</div>
<div class="schedule__content">Учимся создавать персонажей из простых форм. Изучаем характеры и эмоции.</div>
<div class="schedule__toggle toggle">
<button class="toggle__head js-toggle-head">Материалы
<svg class="icon icon-arrow-down">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-arrow-down"></use>
</svg>
</button>
<div class="toggle__body">Cамое главное - иметь альбом или блокнот с пустыми страницами (без линий и клеток) плотной гладкой бумагой, формат
А4. Рисовать будем цветными карандашами, а также простым, мягкостью B2. Иногда пригодятся вырезки из журналов
и клей-карандаш.</div>
</div>
</div>
</div>
</div>
<div class="text text_mb0">
<a href='#'>Распечатать расписание</a> чтобы не забыть</div>
</div>
</div>
<div class="section">
<div class="section__center center">
<div class="title title_center">Онлайн-курсы</div>
<div class="text">Помимо онлайн-школы Lil City у нас есть отдельные
<a href='#'>курсы в записи</a>. Учитесь и развивайте креативное мышление когда вам удобно.</div>
<div class="courses">
<div class="courses__list">
<div class="courses__item">
<a class="courses__preview" href="#">
<img class="courses__pic" src="{% static 'img/pic-1.jpg' %}" />
<div class="courses__view">Подробнее</div>
<div class="courses__label courses__label_fav"></div>
</a>
<div class="courses__details">
<a class="courses__theme theme" href="#">АНИМАЦИЯ</a>
<div class="courses__price">30$</div>
</div>
<a class="courses__title" href="#">Базовый курс для детей по основам иллюстрации</a>
<div class="courses__content">Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.</div>
<div class="courses__user user">
<div class="user__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}" />
</div>
<div class="user__info">
<div class="user__name">Александра Неимоверноумная</div>
<div class="user__meta">
<div class="user__date">SEPT 12, 2017</div>
<a class="user__likes likes" href="#">
<div class="likes__counter">253</div>
<div class="likes__icon">
<svg class="icon icon-like">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-like"></use>
</svg>
<svg class="icon icon-like-fill">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-like-fill"></use>
</svg>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="courses__item">
<a class="courses__preview" href="#">
<img class="courses__pic" src="{% static 'img/pic-1.jpg' %}" />
<div class="courses__view">Подробнее</div>
<div class="courses__soon">
<div class="courses__left">До запуска курса осталось:</div>
<div class="courses__time">16 часов 13 минут</div>
</div>
<div class="courses__label courses__label_clock"></div>
</a>
<div class="courses__details">
<a class="courses__theme theme theme_green" href="#">АНИМАЦИЯ</a>
<div class="courses__price">30$</div>
</div>
<a class="courses__title" href="#">Базовый курс для детей по основам иллюстрации</a>
<div class="courses__content">Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.</div>
<div class="courses__user user">
<div class="user__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}" />
</div>
<div class="user__info">
<div class="user__name">Александра Неимоверноумная</div>
<div class="user__meta">
<div class="user__date">SEPT 12, 2017</div>
<a class="user__likes likes" href="#">
<div class="likes__counter">253</div>
<div class="likes__icon">
<svg class="icon icon-like">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-like"></use>
</svg>
<svg class="icon icon-like-fill">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-like-fill"></use>
</svg>
</div>
</a>
</div>
</div>
</div>
</div>
<div class="courses__item">
<a class="courses__preview" href="#">
<img class="courses__pic" src="{% static 'img/pic-1.jpg' %}" />
<div class="courses__view">Подробнее</div>
</a>
<div class="courses__details">
<a class="courses__theme theme theme_violet" href="#">АНИМАЦИЯ</a>
<div class="courses__price">30$</div>
</div>
<a class="courses__title" href="#">Базовый курс для детей по основам иллюстрации</a>
<div class="courses__content">Этот курс поможет детям узнать о том как из простых форм создавать веселый и харизматичных персонажей.</div>
<div class="courses__user user">
<div class="user__ava ava">
<img class="ava__pic" src="{% static 'img/user.jpg' %}" />
</div>
<div class="user__info">
<div class="user__name">Александра Неимоверноумная</div>
<div class="user__meta">
<div class="user__date">SEPT 12, 2017</div>
<a class="user__likes likes" href="#">
<div class="likes__counter">253</div>
<div class="likes__icon">
<svg class="icon icon-like">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-like"></use>
</svg>
<svg class="icon icon-like-fill">
<use xlink:href="{% static 'img/sprite.svg' %}#icon-like-fill"></use>
</svg>
</div>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="courses__more more">
<a class="more__btn btn btn_light" href="#">УЗНАТЬ ПОДРОБНЕЕ</a>
</div>
</div>
</div>
</div>
<div class="game">
<div class="game__center center">
<div class="game__wrap">
<div class="game__theme">LILCITY</div>
<div class="game__title">Приложения, развивающие игры и интерактивные книги от Lil City.</div>
<a class="game__btn btn btn_dark" href="#">УЗНАТЬ БОЛЬШЕ</a>
</div>
</div>
<div class="game__preview">
<img class="game__pic" src="{% static 'img/icons.png' %}">
</div>
</div>
<div class="section">
<div class="section__center center">
<div class="title title_center">Наши партнеры</div>
<div class="partners">
<a class="partners__item" href="#">
<img class="partners__pic" src="{% static 'img/box.jpg' %}">
</a>
<a class="partners__item" href="#">
<img class="partners__pic" src="{% static 'img/box.jpg' %}">
</a>
<a class="partners__item" href="#">
<img class="partners__pic" src="{% static 'img/box.jpg' %}">
</a>
<a class="partners__item" href="#">
<img class="partners__pic" src="{% static 'img/box.jpg' %}">
</a>
<a class="partners__item" href="#">
<img class="partners__pic" src="{% static 'img/box.jpg' %}">
</a>
<a class="partners__item" href="#">
<img class="partners__pic" src="{% static 'img/box.jpg' %}">
</a>
</div>
</div>
</div>
{% endblock content %}

@ -24,7 +24,7 @@ urlpatterns = [
path('admin/', admin.site.urls),
path('auth/', include(('apps.auth.urls', 'lilcity'))),
path('courses/', CoursesView.as_view(), name='courses'),
path('', TemplateView.as_view(template_name="templates/lilcity/index.html"), name='index'),
path('', TemplateView.as_view(template_name="templates/lilcity/main.html"), name='index'),
]

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Loading…
Cancel
Save