Skip to content

Commit b246040

Browse files
authored
Merge pull request #57 from moscowpython/feature/hello_advanced_landin
Feature/hello advanced landin
2 parents 47ac8d4 + a8c47bf commit b246040

27 files changed

+1874
-5
lines changed

Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,5 @@ check:
1010
make isort style types test
1111
run:
1212
cd landing_page; DEBUG=1 python manage.py runserver
13+
shell:
14+
cd landing_page; DEBUG=1 python manage.py shell
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Generated by Django 4.2.4 on 2023-09-08 13:49
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('mainpage', '0042_enrollment_platim_url'),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name='enrollment',
15+
name='type',
16+
field=models.CharField(blank=True, choices=[('BASE', 'BASE'), ('ADVANCED', 'ADVANCED')], max_length=10, null=True),
17+
),
18+
]

landing_page/mainpage/models.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import enum
2+
13
from django.db import models
24
from django.utils.timezone import now
35

@@ -55,10 +57,20 @@ def __str__(self) -> str:
5557
)
5658

5759

60+
class EnrollmentType(enum.StrEnum):
61+
BASE = "BASE"
62+
ADVANCED = "ADVANCED"
63+
64+
@classmethod
65+
def get_choices(cls) -> list[tuple[str, str]]:
66+
return [(v, v) for v in cls]
67+
68+
5869
class Enrollment(models.Model):
5970
timepad_event_id = models.CharField(max_length=64, null=True, blank=True)
6071
platim_url = models.CharField(max_length=254, null=True, blank=True)
6172

73+
type = models.CharField(max_length=10, choices=EnrollmentType.get_choices(), null=True, blank=True)
6274
start_date = models.DateField()
6375
end_date = models.DateField()
6476
end_registration_date = models.DateField()
@@ -68,8 +80,11 @@ class Enrollment(models.Model):
6880
late_price_date_from = models.DateField()
6981

7082
@staticmethod
71-
def get_enrollment_with_active_registration() -> "Enrollment | None":
72-
return Enrollment.objects.filter(end_registration_date__gte=now()).first()
83+
def get_enrollment_with_active_registration(enrollment_type: EnrollmentType) -> "Enrollment | None":
84+
return Enrollment.objects.filter(
85+
type=enrollment_type,
86+
end_registration_date__gte=now(),
87+
).first()
7388

7489
def __str__(self) -> str:
75-
return f"Enrollment ({self.start_date} - {self.end_date})"
90+
return f"{self.type.capitalize()} enrollment ({self.start_date} - {self.end_date})"

landing_page/mainpage/static/css/style.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,10 @@ h5 {
402402
color: #f2c94c;
403403
}
404404

405+
.color-purple {
406+
color: #be24f2;
407+
}
408+
405409
.brackets {
406410
text-transform: uppercase;
407411
color: #333333;
60 KB
Loading

landing_page/mainpage/templates/mainpage/advanced.html

Lines changed: 313 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<section id="video-answers" class="video-answers show1">
2+
<div class="container">
3+
<div class="pc-section-header">
4+
<h2>О курсе</h2>
5+
</div>
6+
</div>
7+
</section>
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
{% load static %}
2+
3+
<section id="teachers" class="teachers show1">
4+
<div class="container d-lg-none">
5+
<div class="m-section-header">
6+
<h4>Курс ведут</h4>
7+
</div>
8+
</div>
9+
<div class="container m-hide">
10+
<div class="container d-none d-lg-block">
11+
<div class="pc-section-header ">
12+
<h2>Кто делает курс</h2>
13+
</div>
14+
</div>
15+
<div class="row mx-row can-first-par d-none d-lg-flex">
16+
<div class="col-lg-3 pl-0 d-none d-lg-block pb-lg-4">
17+
<div class="curse-heading">
18+
<h3>Кто мы</h3>
19+
</div>
20+
</div>
21+
<div class="col-lg-9 d-none d-lg-block">
22+
<div class="row m-0" style="position: relative">
23+
<div class="img-who " style="background-image: url({% static 'images/who-we.png' %});"></div>
24+
<div class="who-cont">
25+
<div class="who-are-we">
26+
<h3>Курс организует сообщество MoscowPython</h3>
27+
<p>
28+
C 2012 года проводим митапы Python-разработчиков на площадках Яндекса, ЦИАН, Мегафона,
29+
Mail.ru Group и других компаний. Записываем видео и подкаст для питонистов.
30+
Объединили свыше 5К человек в единое комьюнити.
31+
</p>
32+
<ul class="who-we-icon">
33+
<li>
34+
<div class="who-are-icon">
35+
<img src="{% static 'images/icon-svg/3-year.svg' %}" alt="3 year">
36+
</div>
37+
<div class="who-icon-title">
38+
<h4>5+ лет</h4>
39+
<span>основному курсу</span>
40+
</div>
41+
</li>
42+
<li>
43+
<div class="who-are-icon">
44+
<img src="{% static 'images/icon-svg/11-sets.svg' %}" alt="11 sets">
45+
</div>
46+
<div class="who-icon-title">
47+
<h4>30+ наборов</h4>
48+
<span>прошли обучение</span>
49+
</div>
50+
</li>
51+
<li>
52+
<div class="who-are-icon">
53+
<img src="{% static 'images/icon-svg/400-graduates.svg' %}" alt="400 graduates">
54+
</div>
55+
<div class="who-icon-title">
56+
<h4>1500+</h4>
57+
<span>выпускников</span>
58+
</div>
59+
</li>
60+
</ul>
61+
</div>
62+
</div>
63+
</div>
64+
</div>
65+
</div>
66+
67+
<div class="row mx-row teachers-list-parent">
68+
<div class="d-lg-none">
69+
<div class="mobi-cur-title-main">
70+
<h4>Основные преподаватели и организаторы</h4>
71+
</div>
72+
</div>
73+
<div class="col-lg-3 pl-0 d-none d-lg-block">
74+
<div class="curse-heading">
75+
<h3>Основные преподаватели и организаторы</h3>
76+
<p class="curse-hdescr">
77+
Практики с большим опытом в разработке и управлении проектами. Разработали сам курс.
78+
Ведут занятия. Записывают видеолекции. Помогают со сложными задачами. Отвечают за
79+
организационные и административные вопросы.
80+
</p>
81+
</div>
82+
</div>
83+
<ul class="col-12 col-lg-9 teachers-list row m-0">
84+
<li>
85+
<div class="d-flex darked flex-lg-nowrap flex-wrap">
86+
<div class="img-wrapper order-lg-1">
87+
<img class="img-fluid" src="{% static 'images/mentor/teacher/new_dombrovsky.jpg' %}" alt="Валентин Домбровский"></div>
88+
<div class="teacher-info">
89+
<h3 class="teacher-name brackets brackets-blue-yellow">Валентин Домбровский</h3>
90+
<p class="d-none d-lg-block">
91+
Евангелист и сооснователь MoscowPython сообщества.
92+
</p>
93+
<p class="d-none d-lg-block">
94+
Сооснователь IT-рекрутингового агентства Geekfactor.io.
95+
</p>
96+
</div>
97+
<div class="d-lg-none hdescr">
98+
Евангелист и сооснователь MoscowPython сообщества. Сооснователь IT-рекрутингового агентства Geekfactor.io.
99+
</div>
100+
</div>
101+
</li>
102+
<li>
103+
<div class="d-flex darked flex-lg-nowrap flex-wrap">
104+
<div class="img-wrapper">
105+
<img class="img-fluid" src="{% static 'images/mentor/teacher/lebedev.jpg' %}" alt="Семен Осипов">
106+
</div>
107+
<div class="teacher-info">
108+
<h3 class="teacher-name brackets brackets-blue-yellow">Илья Лебедев</h3>
109+
<p class="d-none d-lg-block">
110+
Евангелист MoscowPython, разработчик в ANNA Money, до этого – технический директор
111+
в Zipsale и BestDoctor.
112+
</p>
113+
</div>
114+
<div class="d-lg-none hdescr">
115+
Программирует и преподаёт Python больше 10 лет.
116+
</div>
117+
</div>
118+
</li>
119+
</ul>
120+
</div>
121+
</div>
122+
</section>
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
{% load static %}
2+
3+
<div class="row can-first-par d-none d-lg-flex m-0">
4+
<div class="col-lg-3 pl-0 col-12">
5+
<div class="about-heading">
6+
<h3 class="d-none d-lg-block">Кому подойдет</h3>
7+
<p class="about-hdescr">
8+
Мы учли интересы всех: и новичков, и продолжающих.
9+
</p>
10+
<h4 class="about-heading d-lg-none">В результате вы можете создавать: </h4>
11+
</div>
12+
</div>
13+
<div class="col-lg-9 col-12">
14+
<div class="row">
15+
<div class="can-image col-sm-10 col-lg-8 col-xl-7" style="background-image: url({% static 'images/about-image1.png' %})"></div>
16+
<div class="can-decr-par">
17+
<div class="can-decr">
18+
<ul class="lambda-style">
19+
<li>
20+
<span>
21+
<kbd>Вы прошли основной курс Learn Python</kbd>
22+
и хотите продолжить обучение.
23+
</span>
24+
</li>
25+
<li>
26+
<span>
27+
<kbd>Вы хотите автоматизировать свою работу</kbd>
28+
в управлении проектами, тестировании, маркетинге, SEO, системном администрировании и т.д.
29+
</span>
30+
</li>
31+
<li>
32+
<span>
33+
<kbd>Вы уже учили основы Python</kbd>
34+
до этого, но где-то «застряли».
35+
</span>
36+
</li>
37+
<li>
38+
<span>
39+
<kbd>Вы хотите сменить работу</kbd>
40+
или попасть в ИТ.
41+
</span>
42+
</li>
43+
<li>
44+
<span>
45+
<kbd>Вы учите Python как второй язык</kbd>
46+
программирования, ведь это лучший второй ЯП для любых задач.
47+
</span>
48+
</li>
49+
<li>
50+
<span>
51+
<kbd>У вас получается писать код</kbd>,
52+
но выглядит он так, что стыдно показать другим.
53+
</span>
54+
</li>
55+
</ul>
56+
<p>
57+
<kbd class="blu-kb">Курс подстроится под вас.</kbd>
58+
Поэтому мы собираем небольшие группы, а куратор следит за вашим прогрессом в течение всей недели.
59+
Если вы забуксуете, он объяснит тему дополнительно. А если будете опережать других, вам
60+
придумают задачек — скучно не будет!
61+
</p>
62+
</div>
63+
</div>
64+
</div>
65+
</div>
66+
</div>
67+
68+
<div class="row mx-0 d-none d-lg-flex about-sticky">
69+
<div class="col-lg-3 pl-0 d-none d-lg-block pb-lg-5">
70+
<div class="about-heading">
71+
<h3>Что вас ждет</h3>
72+
<p class="about-hdescr">
73+
Вы сразу получите результат и поймете, куда расти. И так каждую неделю.
74+
</p>
75+
</div>
76+
</div>
77+
<div class="col-lg-9 col-12 p-0">
78+
<div class="about-widget">
79+
<div>
80+
<div class="d-flex align-items-start widget">
81+
<div class="widget-icon">
82+
<img src="{% static 'images/icon-svg/pc-list-about/icons_practice.svg' %}" alt="80+ часов практики">
83+
</div>
84+
<div class="widget-content">
85+
<h4 class="d-none d-lg-block">Практика с первого дня</h4>
86+
<p class="d-none d-lg-block">от 80 часов с преподавателем и самостоятельно</p>
87+
</div>
88+
</div>
89+
</div>
90+
<div>
91+
<div class="d-flex align-items-start widget">
92+
<div class="widget-icon">
93+
<img src="{% static 'images/icon-svg/pc-list-about/icons_video.svg' %}" alt="30 часов видеоуроков">
94+
</div>
95+
<div class="widget-content">
96+
<h4 class="d-none d-lg-block"> 30 часов видеоуроков </h4>
97+
<p class="d-none d-lg-block"> и презентации в еженедельных рассылках</p>
98+
</div>
99+
</div>
100+
</div>
101+
<div>
102+
<div class="d-flex align-items-start widget">
103+
<div class="widget-icon">
104+
<img src="{% static 'images/icon-svg/pc-list-about/icons_task.svg' %}" alt="Куратор, группа 5-7 человек">
105+
</div>
106+
<div class="widget-content">
107+
<h4 class="d-none d-lg-block">Десятки интересных заданий</h4>
108+
<p class="d-none d-lg-block">создание сайтов, ботов, работа с<br> данными и т.д.</p>
109+
</div>
110+
</div>
111+
</div>
112+
<div>
113+
<div class="d-flex align-items-start widget">
114+
<div class="widget-icon">
115+
<img src="{% static 'images/icon-svg/pc-list-about/icons_group.svg' %}" alt="Интересные задания">
116+
</div>
117+
<div class="widget-content">
118+
<h4 class="d-none d-lg-block">Куратор, группа 5-7 человек</h4>
119+
<p class="d-none d-lg-block">и опытные преподаватели</p>
120+
</div>
121+
</div>
122+
</div>
123+
<div>
124+
<div class="d-flex align-items-start widget">
125+
<div class="widget-icon">
126+
<img src="{% static 'images/icon-svg/pc-list-about/icons_review.svg' %}" alt="Код-ревью">
127+
</div>
128+
<div class="widget-content">
129+
<h4 class="d-none d-lg-block">Проверка задач: код-ревью</h4>
130+
<p class="d-none d-lg-block">и рекомендации куратора</p>
131+
</div>
132+
</div>
133+
</div>
134+
<div>
135+
<div class="d-flex align-items-start widget">
136+
<div class="widget-icon">
137+
<img src="{% static 'images/icon-svg/pc-list-about/icons_connection.svg' %}" alt="Готовое портфолио">
138+
</div>
139+
<div class="widget-content">
140+
<h4 class="d-none d-lg-block">Живое общение и Telegram-чат</h4>
141+
<p class="d-none d-lg-block">с преподавателями и однокурсниками</p>
142+
</div>
143+
</div>
144+
</div>
145+
<div>
146+
<div class="d-flex align-items-start widget">
147+
<div class="widget-icon">
148+
<img src="{% static 'images/icon-svg/pc-list-about/icons_support.svg' %}" alt="Знакомства в отрасли">
149+
</div>
150+
<div class="widget-content">
151+
<h4 class="d-none d-lg-block">Поддержка в течение 2 месяцев</h4>
152+
<p class="d-none d-lg-block">после окончания курса</p>
153+
</div>
154+
</div>
155+
</div>
156+
</div>
157+
</div>
158+
</div>

0 commit comments

Comments
 (0)