This commit is contained in:
Egor Matveev 2021-11-20 23:15:11 +03:00
parent 9a20711820
commit 68245ffa43
89 changed files with 139 additions and 2283 deletions

View File

@ -1,13 +1,49 @@
import telebot
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from telebot.types import Message
from Main.models import UserInfo
bot = telebot.TeleBot("1994460106:AAGrGsCZjF6DVG_T-zycELuVfxnWw8x7UyU")
@bot.message_handler(commands=["start"])
def do_action(message: Message):
bot.send_message(message.chat.id, "Привет! Я тут чтобы помогать!\n/register - зарегистрироваться в сервисе\nБольше команд нет:(")
@bot.message_handler(commands=["register"])
def register(message: Message):
username = message.from_user.username
if username == "":
bot.send_message(message.chat.id, "Добавть имя пользователя к своему телеграм аккаунту")
return
ui = UserInfo.objects.filter(telegram_chat_id=message.chat.id).first()
if ui:
bot.send_message(message.chat.id, "Ты уже зарегистрировался")
return
user = User.objects.create(username=username)
UserInfo.objects.create(user=user, telegram_chat_id=message.chat.id)
bot.send_message(message.chat.id, 'Приветствую в Sprint! Сейчас я помогу тебе создать аккаунт.\nДля начала отправь мне свою фамилию')
@bot.message_handler(content_types=["text"])
def do_action(message):
bot.send_message(chat_id=message.chat.id, text=f"ID чата: {message.chat.id}")
def do_action(message: Message):
user = User.objects.filter(userinfo__telegram_chat_id=message.chat.id).first()
if not user:
bot.send_message(message.chat.id, "Зарегистрируйся в сервисе, чтобы взаимодействовать со мной")
return
if user.userinfo.surname is None:
user.userinfo.surname = message.text
user.userinfo.save()
bot.send_message(message.chat.id, "Отлично! Теперь отправь мне свое имя")
elif user.userinfo.name is None:
user.userinfo.name = message.text
user.userinfo.save()
bot.send_message(message.chat.id, f"Регистрация завершена! Теперь можешь ты можешь войти в сервис под именем пользователя: {user.username}")
else:
bot.send_message(message.chat.id, "Я пока больше ничего не умею")
class Command(BaseCommand):

View File

@ -1,215 +0,0 @@
# Generated by Django 3.0.2 on 2020-06-25 20:11
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name="Block",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.TextField()),
("time_start", models.DateTimeField()),
("time_end", models.DateTimeField()),
("opened", models.IntegerField()),
],
),
migrations.CreateModel(
name="Course",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.TextField()),
],
),
migrations.CreateModel(
name="UserInfo",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("surname", models.TextField()),
("name", models.TextField()),
("middle_name", models.TextField()),
("group_name", models.TextField()),
(
"user",
models.OneToOneField(
null=True,
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
],
),
migrations.CreateModel(
name="Task",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.TextField()),
("legend", models.TextField()),
("input", models.TextField()),
("output", models.TextField()),
("specifications", models.TextField()),
("time_limit", models.IntegerField()),
(
"block",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.Block"
),
),
],
),
migrations.CreateModel(
name="Subscribe",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("is_assistant", models.IntegerField()),
(
"course",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.Course"
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
],
),
migrations.CreateModel(
name="Solution",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("result", models.TextField()),
(
"task",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.Task"
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
],
),
migrations.CreateModel(
name="Restore",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("code", models.TextField()),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
],
),
migrations.CreateModel(
name="Mark",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("mark", models.IntegerField()),
(
"block",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.Block"
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
],
),
migrations.AddField(
model_name="block",
name="course",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.Course"
),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.0.2 on 2020-06-26 09:46
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("Main", "0001_initial"),
]
operations = [
migrations.RenameField(
model_name="userinfo",
old_name="group_name",
new_name="group",
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.0.2 on 2020-06-27 19:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0002_auto_20200626_0946"),
]
operations = [
migrations.AlterField(
model_name="subscribe",
name="is_assistant",
field=models.IntegerField(default=0),
),
]

View File

@ -1,38 +0,0 @@
# Generated by Django 3.0.2 on 2020-06-28 09:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0003_auto_20200627_1959"),
]
operations = [
migrations.AlterField(
model_name="task",
name="input",
field=models.TextField(default=""),
),
migrations.AlterField(
model_name="task",
name="legend",
field=models.TextField(default=""),
),
migrations.AlterField(
model_name="task",
name="output",
field=models.TextField(default=""),
),
migrations.AlterField(
model_name="task",
name="specifications",
field=models.TextField(default=""),
),
migrations.AlterField(
model_name="task",
name="time_limit",
field=models.IntegerField(default=10000),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.0.2 on 2020-06-28 10:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0004_auto_20200628_0917"),
]
operations = [
migrations.AddField(
model_name="solution",
name="time_sent",
field=models.DateTimeField(null=True),
),
]

View File

@ -1,21 +0,0 @@
# Generated by Django 3.0.2 on 2020-06-28 13:15
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("Main", "0005_solution_time_sent"),
]
operations = [
migrations.AlterField(
model_name="solution",
name="user",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.UserInfo"
),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.0.2 on 2020-06-29 08:33
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("Main", "0006_auto_20200628_1315"),
]
operations = [
migrations.AlterField(
model_name="solution",
name="user",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.0.2 on 2020-07-02 18:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0007_auto_20200629_0833"),
]
operations = [
migrations.AddField(
model_name="userinfo",
name="mark_notification",
field=models.IntegerField(default=0),
),
migrations.AddField(
model_name="userinfo",
name="new_block_notification",
field=models.IntegerField(default=0),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.0.2 on 2020-07-04 14:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0008_auto_20200702_2140"),
]
operations = [
migrations.AddField(
model_name="solution",
name="comment",
field=models.TextField(default=""),
),
migrations.AddField(
model_name="solution",
name="mark",
field=models.IntegerField(null=True),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 3.0.2 on 2020-07-24 10:08
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0009_auto_20200704_1703"),
]
operations = [
migrations.CreateModel(
name="System",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("key", models.TextField()),
("value", models.TextField()),
],
),
]

View File

@ -1,31 +0,0 @@
# Generated by Django 3.0.2 on 2020-08-14 17:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0010_system"),
]
operations = [
migrations.CreateModel(
name="ThreadSafe",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("key", models.CharField(max_length=80, unique=True)),
],
),
migrations.DeleteModel(
name="Mark",
),
]

View File

@ -1,40 +0,0 @@
# Generated by Django 3.1 on 2020-09-01 08:54
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("Main", "0011_auto_20200814_2035"),
]
operations = [
migrations.AddField(
model_name="task",
name="weight",
field=models.FloatField(default=1.0),
),
migrations.CreateModel(
name="ExtraFile",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("file", models.FileField(upload_to="")),
(
"task",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.task"
),
),
],
),
]

View File

@ -1,16 +0,0 @@
# Generated by Django 3.1 on 2020-09-01 09:11
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("Main", "0012_auto_20200901_1154"),
]
operations = [
migrations.DeleteModel(
name="ExtraFile",
),
]

View File

@ -1,36 +0,0 @@
# Generated by Django 3.1 on 2020-09-01 09:12
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("Main", "0013_delete_extrafile"),
]
operations = [
migrations.CreateModel(
name="ExtraFile",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("file", models.FileField(upload_to="")),
("filename", models.TextField()),
(
"task",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.task"
),
),
],
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.1 on 2020-09-02 12:55
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0014_extrafile"),
]
operations = [
migrations.AddField(
model_name="task",
name="max_mark",
field=models.IntegerField(default=10),
),
migrations.AlterField(
model_name="extrafile",
name="file",
field=models.FileField(upload_to="data\\extra_files"),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1 on 2020-09-02 13:13
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0015_auto_20200902_1555"),
]
operations = [
migrations.AddField(
model_name="task",
name="max_solutions_count",
field=models.IntegerField(default=10),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1 on 2020-09-05 12:45
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0016_task_max_solutions_count"),
]
operations = [
migrations.AddField(
model_name="solution",
name="details",
field=models.TextField(default=""),
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 3.1 on 2020-09-17 08:45
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("Main", "0017_solution_details"),
]
operations = [
migrations.RemoveField(
model_name="extrafile",
name="file",
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1 on 2020-09-17 09:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0018_remove_extrafile_file"),
]
operations = [
migrations.AddField(
model_name="task",
name="show_details",
field=models.IntegerField(default=1),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1 on 2020-10-08 08:57
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0019_task_show_details"),
]
operations = [
migrations.AddField(
model_name="task",
name="solution_type",
field=models.TextField(default="Solution"),
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 3.1 on 2020-10-08 10:20
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("Main", "0020_task_solution_type"),
]
operations = [
migrations.RemoveField(
model_name="task",
name="solution_type",
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1 on 2020-10-22 14:28
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0021_remove_task_solution_type"),
]
operations = [
migrations.AddField(
model_name="task",
name="full_solution",
field=models.IntegerField(default=0),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1 on 2020-11-01 19:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0022_task_full_solution"),
]
operations = [
migrations.AddField(
model_name="extrafile",
name="for_compilation",
field=models.IntegerField(default=0),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1 on 2020-11-06 08:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0023_extrafile_for_compilation"),
]
operations = [
migrations.AddField(
model_name="extrafile",
name="sample",
field=models.IntegerField(default=0),
),
]

View File

@ -1,51 +0,0 @@
# Generated by Django 3.1 on 2020-11-06 15:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0024_extrafile_sample"),
]
operations = [
migrations.RemoveField(
model_name="userinfo",
name="mark_notification",
),
migrations.RemoveField(
model_name="userinfo",
name="new_block_notification",
),
migrations.AlterField(
model_name="block",
name="opened",
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name="extrafile",
name="for_compilation",
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name="extrafile",
name="sample",
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name="subscribe",
name="is_assistant",
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name="task",
name="full_solution",
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name="task",
name="show_details",
field=models.BooleanField(default=False),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1.3 on 2020-12-01 08:29
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0025_auto_20201106_1848"),
]
operations = [
migrations.AddField(
model_name="block",
name="show_rating",
field=models.BooleanField(default=True),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1.3 on 2020-12-26 13:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0026_block_show_rating"),
]
operations = [
migrations.AddField(
model_name="task",
name="mark_formula",
field=models.TextField(default="None"),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1.3 on 2021-01-01 09:15
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0027_task_mark_formula"),
]
operations = [
migrations.AddField(
model_name="task",
name="show_result",
field=models.BooleanField(default=True),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.1.3 on 2021-01-30 16:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0028_task_show_result"),
]
operations = [
migrations.AddField(
model_name="block",
name="priority",
field=models.IntegerField(default=5),
),
migrations.AddField(
model_name="task",
name="priority",
field=models.IntegerField(default=5),
),
]

View File

@ -1,54 +0,0 @@
# Generated by Django 3.1.3 on 2021-02-06 21:17
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("Main", "0029_auto_20210130_1950"),
]
operations = [
migrations.CreateModel(
name="Message",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("for_all", models.BooleanField()),
("text", models.TextField()),
(
"reply_to",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.CASCADE,
to="Main.message",
),
),
(
"sender",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
(
"task",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.task"
),
),
],
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1.3 on 2021-03-13 08:06
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0030_message"),
]
operations = [
migrations.AddField(
model_name="block",
name="cheating_checking",
field=models.BooleanField(default=False),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.1.3 on 2021-03-14 12:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0031_block_cheating_checking"),
]
operations = [
migrations.AddField(
model_name="block",
name="cheating_data",
field=models.TextField(default="[]"),
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 3.1.3 on 2021-03-14 13:15
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("Main", "0032_block_cheating_data"),
]
operations = [
migrations.RemoveField(
model_name="block",
name="cheating_data",
),
]

View File

@ -1,152 +0,0 @@
# Generated by Django 3.2.5 on 2021-07-25 15:48
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0033_remove_block_cheating_data"),
]
operations = [
migrations.CreateModel(
name="Set",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.TextField()),
],
),
migrations.RenameModel(
old_name="Course",
new_name="Group",
),
migrations.RemoveField(
model_name="block",
name="course",
),
migrations.RemoveField(
model_name="extrafile",
name="task",
),
migrations.RemoveField(
model_name="message",
name="reply_to",
),
migrations.RemoveField(
model_name="message",
name="sender",
),
migrations.RemoveField(
model_name="message",
name="task",
),
migrations.RemoveField(
model_name="restore",
name="user",
),
migrations.RemoveField(
model_name="solution",
name="task",
),
migrations.RemoveField(
model_name="solution",
name="user",
),
migrations.RemoveField(
model_name="subscribe",
name="course",
),
migrations.RemoveField(
model_name="subscribe",
name="user",
),
migrations.DeleteModel(
name="System",
),
migrations.DeleteModel(
name="ThreadSafe",
),
migrations.RemoveField(
model_name="task",
name="block",
),
migrations.RemoveField(
model_name="task",
name="full_solution",
),
migrations.RemoveField(
model_name="task",
name="input",
),
migrations.RemoveField(
model_name="task",
name="legend",
),
migrations.RemoveField(
model_name="task",
name="mark_formula",
),
migrations.RemoveField(
model_name="task",
name="max_mark",
),
migrations.RemoveField(
model_name="task",
name="max_solutions_count",
),
migrations.RemoveField(
model_name="task",
name="output",
),
migrations.RemoveField(
model_name="task",
name="priority",
),
migrations.RemoveField(
model_name="task",
name="show_details",
),
migrations.RemoveField(
model_name="task",
name="show_result",
),
migrations.RemoveField(
model_name="task",
name="specifications",
),
migrations.RemoveField(
model_name="task",
name="time_limit",
),
migrations.RemoveField(
model_name="task",
name="weight",
),
migrations.DeleteModel(
name="Block",
),
migrations.DeleteModel(
name="ExtraFile",
),
migrations.DeleteModel(
name="Message",
),
migrations.DeleteModel(
name="Restore",
),
migrations.DeleteModel(
name="Solution",
),
migrations.DeleteModel(
name="Subscribe",
),
]

View File

@ -1,20 +0,0 @@
# Generated by Django 3.2.5 on 2021-07-25 16:10
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("Main", "0034_auto_20210725_1848"),
]
operations = [
migrations.AddField(
model_name="group",
name="users",
field=models.ManyToManyField(to=settings.AUTH_USER_MODEL),
),
]

View File

@ -1,43 +0,0 @@
# Generated by Django 3.2.5 on 2021-07-25 16:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0035_group_users"),
]
operations = [
migrations.AddField(
model_name="set",
name="tasks",
field=models.ManyToManyField(to="Main.Task"),
),
migrations.AddField(
model_name="task",
name="input_format",
field=models.TextField(default=""),
),
migrations.AddField(
model_name="task",
name="legend",
field=models.TextField(default=""),
),
migrations.AddField(
model_name="task",
name="output_format",
field=models.TextField(default=""),
),
migrations.AddField(
model_name="task",
name="public",
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name="task",
name="specifications",
field=models.TextField(default=""),
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 3.2.5 on 2021-07-25 18:02
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
("Main", "0036_auto_20210725_1922"),
]
operations = [
migrations.RemoveField(
model_name="userinfo",
name="group",
),
]

View File

@ -1,25 +0,0 @@
# Generated by Django 3.2.5 on 2021-07-25 18:05
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("Main", "0037_remove_userinfo_group"),
]
operations = [
migrations.AddField(
model_name="task",
name="creator",
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
]

View File

@ -1,46 +0,0 @@
# Generated by Django 3.2.5 on 2021-07-31 15:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0038_task_creator"),
]
operations = [
migrations.AddField(
model_name="task",
name="time_limit",
field=models.IntegerField(default=10000),
),
migrations.AlterField(
model_name="group",
name="id",
field=models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
migrations.AlterField(
model_name="set",
name="id",
field=models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
migrations.AlterField(
model_name="task",
name="id",
field=models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
migrations.AlterField(
model_name="userinfo",
name="id",
field=models.BigAutoField(
auto_created=True, primary_key=True, serialize=False, verbose_name="ID"
),
),
]

View File

@ -1,41 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-03 09:24
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
("Main", "0039_auto_20210731_1850"),
]
operations = [
migrations.AddField(
model_name="userinfo",
name="last_request",
field=models.DateTimeField(default=django.utils.timezone.now),
),
migrations.CreateModel(
name="File",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.TextField()),
(
"task",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.task"
),
),
],
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-03 11:09
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0040_auto_20210803_1224"),
]
operations = [
migrations.AddField(
model_name="userinfo",
name="profile_picture",
field=models.ImageField(null=True, upload_to="profile_pictures"),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-03 11:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("Main", "0041_userinfo_profile_picture"),
]
operations = [
migrations.AddField(
model_name="userinfo",
name="rating",
field=models.IntegerField(default=0),
),
]

View File

@ -1,44 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-03 13:51
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("Main", "0042_userinfo_rating"),
]
operations = [
migrations.CreateModel(
name="Subscription",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("role", models.IntegerField()),
(
"group",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.group"
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
],
),
]

View File

@ -1,41 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-03 13:55
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("Main", "0043_subscription"),
]
operations = [
migrations.CreateModel(
name="SetTask",
fields=[
(
"id",
models.BigAutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=2)),
(
"set",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.set"
),
),
(
"task",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE, to="Main.task"
),
),
],
),
]

View File

@ -1,41 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-03 15:01
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("Main", "0044_settask"),
]
operations = [
migrations.RemoveField(
model_name="group",
name="users",
),
migrations.RemoveField(
model_name="set",
name="tasks",
),
migrations.AddField(
model_name="group",
name="sets",
field=models.ManyToManyField(to="Main.Set"),
),
migrations.AddField(
model_name="set",
name="public",
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name="settask",
name="task",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="settasks",
to="Main.task",
),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-03 15:07
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
("Main", "0045_auto_20210803_1801"),
]
operations = [
migrations.AlterField(
model_name="subscription",
name="group",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="subscriptions",
to="Main.group",
),
),
]

View File

@ -1,25 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-06 09:34
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("Main", "0046_alter_subscription_group"),
]
operations = [
migrations.AddField(
model_name="set",
name="creator",
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
to=settings.AUTH_USER_MODEL,
),
),
]

View File

@ -1,27 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-08 19:19
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('Main', '0047_set_creator'),
]
operations = [
migrations.CreateModel(
name='Solution',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('time_sent', models.DateTimeField(default=django.utils.timezone.now)),
('result', models.TextField(default='In queue')),
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Main.task')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -1,20 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-08 19:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0048_solution'),
]
operations = [
migrations.CreateModel(
name='Language',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField()),
],
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-08 19:29
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('Main', '0049_language'),
]
operations = [
migrations.AddField(
model_name='solution',
name='language',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='Main.language'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-08 20:53
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0050_solution_language'),
]
operations = [
migrations.AddField(
model_name='language',
name='file_type',
field=models.TextField(null=True),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-08 21:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0051_language_file_type'),
]
operations = [
migrations.AddField(
model_name='language',
name='logo',
field=models.ImageField(null=True, upload_to=''),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-08 21:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0052_language_logo'),
]
operations = [
migrations.AddField(
model_name='language',
name='opened',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='language',
name='logo',
field=models.ImageField(null=True, upload_to='logos'),
),
]

View File

@ -1,24 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-08 22:17
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('Main', '0053_auto_20210809_0032'),
]
operations = [
migrations.CreateModel(
name='ExtraFile',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('filename', models.TextField()),
('is_test', models.BooleanField()),
('file', models.FileField(upload_to='files')),
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Main.task')),
],
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-08 22:22
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0054_extrafile'),
]
operations = [
migrations.AddField(
model_name='extrafile',
name='readable',
field=models.BooleanField(null=True),
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-09 07:08
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('Main', '0055_extrafile_readable'),
]
operations = [
migrations.RemoveField(
model_name='extrafile',
name='file',
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-13 12:42
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0056_remove_extrafile_file'),
]
operations = [
migrations.AlterField(
model_name='extrafile',
name='is_test',
field=models.BooleanField(null=True),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-13 12:49
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0057_alter_extrafile_is_test'),
]
operations = [
migrations.AddField(
model_name='extrafile',
name='test_number',
field=models.IntegerField(null=True),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-16 14:05
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0058_extrafile_test_number'),
]
operations = [
migrations.AddField(
model_name='language',
name='image',
field=models.TextField(default='ubuntu'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.5 on 2021-08-17 07:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0059_language_image'),
]
operations = [
migrations.AddField(
model_name='language',
name='work_name',
field=models.TextField(default=''),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-01 08:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0060_language_work_name'),
]
operations = [
migrations.AddField(
model_name='extrafile',
name='is_sample',
field=models.BooleanField(null=True),
),
]

View File

@ -1,27 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-01 09:25
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('Main', '0061_extrafile_is_sample'),
]
operations = [
migrations.CreateModel(
name='Progress',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('start_time', models.DateTimeField(default=datetime.datetime.now)),
('finished_time', models.DateTimeField(null=True)),
('task', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Main.task')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View File

@ -1,19 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-01 09:26
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('Main', '0062_progress'),
]
operations = [
migrations.AlterField(
model_name='progress',
name='start_time',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

View File

@ -1,22 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-01 13:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0063_alter_progress_start_time'),
]
operations = [
migrations.RemoveField(
model_name='userinfo',
name='rating',
),
migrations.AddField(
model_name='progress',
name='score',
field=models.IntegerField(default=0),
),
]

View File

@ -1,23 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-01 14:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0064_auto_20210901_1643'),
]
operations = [
migrations.AddField(
model_name='task',
name='time_estimation',
field=models.IntegerField(default=5),
),
migrations.AddField(
model_name='userinfo',
name='rating',
field=models.IntegerField(default=0),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-01 14:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0065_auto_20210901_1721'),
]
operations = [
migrations.AddField(
model_name='progress',
name='finished',
field=models.BooleanField(default=False),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-01 19:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0066_progress_finished'),
]
operations = [
migrations.AddField(
model_name='userinfo',
name='notification_solution_result',
field=models.BooleanField(default=False),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-02 06:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0067_userinfo_notification_solution_result'),
]
operations = [
migrations.AddField(
model_name='userinfo',
name='telegram_chat_id',
field=models.IntegerField(null=True),
),
]

View File

@ -1,17 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-02 06:36
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('Main', '0068_userinfo_telegram_chat_id'),
]
operations = [
migrations.RemoveField(
model_name='userinfo',
name='telegram_chat_id',
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-02 06:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0069_remove_userinfo_telegram_chat_id'),
]
operations = [
migrations.AddField(
model_name='userinfo',
name='telegram_chat_id',
field=models.TextField(default=''),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-02 08:58
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0070_userinfo_telegram_chat_id'),
]
operations = [
migrations.AddField(
model_name='language',
name='highlight',
field=models.TextField(default='nohighlight'),
),
]

View File

@ -1,18 +0,0 @@
# Generated by Django 3.2.4 on 2021-09-02 09:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0071_language_highlight'),
]
operations = [
migrations.AlterField(
model_name='language',
name='highlight',
field=models.TextField(default='plaintext'),
),
]

View File

@ -1,29 +0,0 @@
# Generated by Django 3.2.4 on 2021-11-05 22:25
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('Main', '0072_alter_language_highlight'),
]
operations = [
migrations.AddField(
model_name='set',
name='end_time',
field=models.DateTimeField(default=django.utils.timezone.now),
),
migrations.AddField(
model_name='set',
name='opened',
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name='set',
name='start_time',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

View File

@ -1,22 +0,0 @@
# Generated by Django 3.2.4 on 2021-11-06 09:15
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0073_auto_20211106_0125'),
]
operations = [
migrations.RemoveField(
model_name='solution',
name='language',
),
migrations.AddField(
model_name='solution',
name='language_id',
field=models.IntegerField(default=0),
),
]

View File

@ -1,31 +0,0 @@
# Generated by Django 3.2.4 on 2021-11-10 20:17
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('Main', '0074_auto_20211106_1215'),
]
operations = [
migrations.CreateModel(
name='SolutionFile',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('path', models.TextField()),
('fs_id', models.IntegerField()),
('solution', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='Main.solution')),
],
),
migrations.DeleteModel(
name='Language',
),
migrations.AddField(
model_name='extrafile',
name='fs_id',
field=models.IntegerField(null=True),
),
]

View File

@ -1,22 +0,0 @@
# Generated by Django 3.2.4 on 2021-11-19 17:50
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('Main', '0075_auto_20211110_2317'),
]
operations = [
migrations.RemoveField(
model_name='userinfo',
name='profile_picture',
),
migrations.AddField(
model_name='userinfo',
name='profile_picture_fs_id',
field=models.IntegerField(null=True),
),
]

17
Main/models/token.py Normal file
View File

@ -0,0 +1,17 @@
from random import choice
from django.db.models import JSONField
from django.db import models
from django.utils import timezone
def create_token():
symbols = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'
return "".join([choice(symbols) for _ in range(30)])
class Token(models.Model):
token = models.CharField(max_length=30, default=create_token)
created_dt = models.DateTimeField(default=timezone.now)
reason = models.CharField(max_length=20)
extras = JSONField()

View File

@ -11,9 +11,8 @@ from SprintLib.language import languages
class UserInfo(models.Model):
surname = models.TextField()
name = models.TextField()
middle_name = models.TextField()
surname = models.TextField(null=True)
name = models.TextField(null=True)
last_request = models.DateTimeField(default=timezone.now)
profile_picture_fs_id = models.IntegerField(null=True)
favourite_language_id = models.IntegerField(null=True)
@ -21,6 +20,7 @@ class UserInfo(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
telegram_chat_id = models.TextField(default="")
notification_solution_result = models.BooleanField(default=False)
code = models.IntegerField(null=True)
@property
def has_favourite_language(self):
@ -80,6 +80,3 @@ class UserInfo(models.Model):
if self.has_profile_pic:
return "/image?id=" + str(self.profile_picture_fs_id)
return "https://i2.wp.com/electrolabservice.com/wp-content/uploads/2021/01/blank-profile-picture-mystery-man-avatar-973460.jpg"
def __str__(self):
return "{} {} {}".format(self.surname, self.name, self.middle_name)

View File

@ -1,29 +1,6 @@
from django.contrib.auth import authenticate, login
from django.contrib.auth.models import User
from django.core.exceptions import ObjectDoesNotExist
from SprintLib.BaseView import BaseView
class EnterView(BaseView):
view_file = "enter.html"
required_login = False
def get(self):
self.context["error_message"] = self.request.GET.get("error_message", "")
def post(self):
try:
user = User.objects.get(username=self.request.POST["email"])
except ObjectDoesNotExist:
try:
user = User.objects.get(email=self.request.POST["email"])
except ObjectDoesNotExist:
return "/enter?error_message=Данного пользователя не существует"
user = authenticate(
username=user.username, password=self.request.POST["password"].strip()
)
if user is not None:
login(self.request, user)
return "/"
return "/enter?error_message=Неверный пароль"

View File

@ -1,39 +0,0 @@
from django.contrib.auth.models import User
from Main.models import UserInfo
from SprintLib.BaseView import BaseView
class RegisterView(BaseView):
view_file = "register.html"
required_login = False
def get(self):
self.context["error_message"] = self.request.GET.get("error_message", "")
def post(self):
data = self.request.POST
if len(data["password"]) < 8:
return "/register?error_message=Пароль слишком слабый"
if data["password"] != data["repeat_password"]:
return "/register?error_message=Пароли не совпадают"
if len(User.objects.filter(username=data["username"])):
return "/register?error_message=Данное имя пользователя уже занято"
if len(User.objects.filter(email=data["email"])):
return "/register?error_message=Пользователь под таким email уже зарегистрирован"
user = User.objects.create_user(
data["username"],
data["email"],
password=data["password"],
)
userinfo = UserInfo.objects.create(
surname=data["surname"],
name=data["name"],
middle_name=data["middle_name"],
user=user,
)
user.userinfo = userinfo
user.save()
# todo: реализовать подтверждение по почте
return "/enter"

View File

@ -0,0 +1,31 @@
from django.contrib.auth import login
from Main.management.commands.bot import bot
from SprintLib.BaseView import BaseView
from django.contrib.auth.models import User
from random import randrange
class SendCodeView(BaseView):
def post_create(self):
username = self.request.POST["username"]
user = User.objects.filter(username=username).first()
if not user:
return {"success": False, "message": "Пользователя с таким именем не существует"}
code = randrange(10000, 100000)
user.userinfo.code = code
user.userinfo.save()
bot.send_message(user.userinfo.telegram_chat_id, "Код для входа в сервис: " + str(code))
return {"success": True, "message": "Код отправлен"}
def post_check(self):
username = self.request.POST["username"]
user = User.objects.filter(username=username).first()
if not user:
return {"success": False, "message": "Пользователя с таким именем не существует"}
code = int(self.request.POST["code"])
if code == user.userinfo.code:
login(self.request, user)
return {"success": True, "message": "Успешно"}
else:
return {"success": False, "message": "Код неверен"}

View File

@ -12,3 +12,4 @@ from Main.views.SolutionsTableView import SolutionsTableView
from Main.views.TaskRuntimeView import TaskRuntimeView
from Main.views.SolutionView import SolutionView
from Main.views.ImageView import ImageView
from Main.views.SendCodeView import SendCodeView

View File

@ -133,11 +133,10 @@ STATIC_URL = "/static/"
MEDIA_URL = "/media/"
STATIC_ROOT = os.path.join(BASE_DIR, "static")
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
DATA_ROOT = os.path.join(BASE_DIR, "data")
EXTRA_FILES_ROOT = os.path.join(BASE_DIR, "extra_files")
SOLUTIONS_ROOT_EXTERNAL = os.getenv("SOLUTIONS_ROOT_EXTERNAL", os.path.join(DATA_ROOT, "solutions"))
for root in DATA_ROOT, EXTRA_FILES_ROOT, MEDIA_ROOT:
for root in DATA_ROOT, EXTRA_FILES_ROOT:
if not os.path.exists(root):
os.mkdir(root)

View File

@ -18,6 +18,7 @@ urlpatterns = [
path("solutions_table", SolutionsTableView.as_view()),
path("task_runtime", TaskRuntimeView.as_view()),
path("image", ImageView.as_view()),
path("send_code", SendCodeView.as_view()),
path("", MainView.as_view()),
path("admin/", admin.site.urls),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
]

View File

@ -2,7 +2,7 @@ from typing import Optional
from django.db import transaction
from django.core.handlers.wsgi import WSGIRequest
from django.http import HttpResponseRedirect
from django.http import HttpResponseRedirect, JsonResponse
from django.shortcuts import render
from django.utils import timezone
@ -57,6 +57,8 @@ class BaseView:
data = method()
if type(data) == str:
return HttpResponseRedirect(data)
if type(data) == dict:
return JsonResponse(data)
if data is not None:
return data
context = {**context, **c.context}

View File

@ -22,7 +22,7 @@
</div>
<div class="col-9">
<h3>
{{ account.userinfo.surname }} {{ account.userinfo.name }} {{ account.userinfo.middle_name }}
{{ account.userinfo.surname }} {{ account.userinfo.name }}
<span style="margin-left: 15px;" class="badge badge-{% if account.userinfo.activity_status == online_status %}success{% else %}secondary{% endif %}">{{ account.userinfo.activity_status }}</span>
{% if user.is_superuser %}
<a style="margin-left: 15px;" href="/admin/" class="badge badge-secondary"> Админ</a>
@ -38,15 +38,6 @@
<p style="padding-top: 8px; font-size: 24px;">{{ account.username }}</p>
</td>
</tr>
<tr>
<td>
<h2><i class="fa fa-at"></i></h2>
</td>
<td><div style="width: 20px;"></div></td>
<td>
<p style="padding-top: 8px; font-size: 24px;">{{ account.email }}</p>
</td>
</tr>
<tr>
<td>
<h2><i class="fa fa-star"></i></h2>

View File

@ -2,6 +2,41 @@
{% block title %}Вход{% endblock %}
{% block scripts %}
function send_code() {
const p = document.getElementById('message');
if (document.getElementById('state').value == 'code') {
$.ajax({
type: "POST",
url: '/send_code',
data: {"username": document.getElementById('username').value, "csrfmiddlewaretoken": document.getElementsByName('csrfmiddlewaretoken')[0].value, "action": "create"},
success: function(data) {
if (data['success']) {
document.getElementById('code').hidden = false;
document.getElementById('enter').firstChild.data = "Вход";
document.getElementById('state').value = "verify";
p.innerHTML = '';
} else {
p.innerHTML = data['message'];
}
}});
} else {
$.ajax({
type: "POST",
url: '/send_code',
data: {"username": document.getElementById('username').value, "code": document.getElementById('code').value, "csrfmiddlewaretoken": document.getElementsByName('csrfmiddlewaretoken')[0].value, "action": "check"},
success: function(data) {
if (data['success']) {
window.location.href = '/';
} else {
p.innerHTML = data['message'];
}
},
});
}
}
{% endblock %}
{% block body %}
<div class="center">
<center>
@ -11,19 +46,15 @@
</h1>
</div>
<div>
<p style="color: red;">{{ error_message }}</p>
<form method="POST">
{% csrf_token %}
<input type="text" class="form" name="email" placeholder="email or username"><br>
<input type="password" class="form" name="password" placeholder="password"><br>
<input type="submit" value="Вход" class="sub btn btn-dark form">
</form>
<p id="message" style="color: red;"></p>
{% csrf_token %}
<input type="text" class="form" name="username" id="username" placeholder="username"><br>
<input type="password" class="form" name="code" id="code" placeholder="code" hidden><br>
<input type="hidden" id="state" value="code">
<button type="button" onclick="send_code()" id="enter" class="sub btn btn-dark form">Отправить код</button>
</div>
<div>
<button onclick="window.location.href='/restore'" class="sub btn btn-dark form">Восстановить пароль</button>
</div>
<div>
<button onclick="window.location.href='/register'" class="sub btn btn-dark form">Регистрация</button>
<a href="https://t.me/sprint_notifications_bot" target="_blank" class="sub btn btn-dark form">Регистрация</a>
</div>
</center>
</div>

View File

@ -1,73 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
{% load static %}
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>
Регистрация
</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href={% static "css/styles.css" %}>
<script src="https://use.fontawesome.com/49b98aaeb5.js"></script>
<script type="text/javascript" src={% static "js/scripts.js" %}></script>
<style type="text/css">
.center {
height: 400px;
width: 400px;
position: fixed;
top: 40%;
left: 50%;
margin-top: -200px;
margin-left: -200px;
}
h1 {
font-size: 500%;
}
.form {
border: none;
border-bottom: 2px solid;
outline: none;
text-align: center;
width: 300px;
margin-top: 20px;
}
.sub {
margin-top: 20px;
}
</style>
</head>
<body>
<div class="center">
<center>
<div>
<h1>
<i class="fa fa-random"></i> <a style="color: black;" href="/enter">Sprint</a>
</h1>
</div>
<div>
<p style="color: red;">{{ error_message }}</p>
<form method="POST">
{% csrf_token %}
<input type="text" class="form" name="surname"><br>
Фамилия<br>
<input type="text" class="form" name="name"><br>
Имя<br>
<input type="text" class="form" name="middle_name"><br>
Отчество<br>
<input type="text" class="form" name="username"><br>
Имя пользователя<br>
<input type="text" class="form" name="email"><br>
email<br>
<input type="password" class="form" name="password"><br>
Пароль<br>
<input type="password" class="form" name="repeat_password"><br>
Повторить пароль<br>
<input type="submit" value="Регистрация" class="sub btn btn-dark form">
</form>
</div>
</center>
</div>
</body>
</html>