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 import telebot
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand 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 = telebot.TeleBot("1994460106:AAGrGsCZjF6DVG_T-zycELuVfxnWw8x7UyU")
@bot.message_handler(commands=["start"]) @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"]) @bot.message_handler(content_types=["text"])
def do_action(message): def do_action(message: Message):
bot.send_message(chat_id=message.chat.id, text=f"ID чата: {message.chat.id}") 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): 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): class UserInfo(models.Model):
surname = models.TextField() surname = models.TextField(null=True)
name = models.TextField() name = models.TextField(null=True)
middle_name = models.TextField()
last_request = models.DateTimeField(default=timezone.now) last_request = models.DateTimeField(default=timezone.now)
profile_picture_fs_id = models.IntegerField(null=True) profile_picture_fs_id = models.IntegerField(null=True)
favourite_language_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) user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
telegram_chat_id = models.TextField(default="") telegram_chat_id = models.TextField(default="")
notification_solution_result = models.BooleanField(default=False) notification_solution_result = models.BooleanField(default=False)
code = models.IntegerField(null=True)
@property @property
def has_favourite_language(self): def has_favourite_language(self):
@ -80,6 +80,3 @@ class UserInfo(models.Model):
if self.has_profile_pic: if self.has_profile_pic:
return "/image?id=" + str(self.profile_picture_fs_id) 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" 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 from SprintLib.BaseView import BaseView
class EnterView(BaseView): class EnterView(BaseView):
view_file = "enter.html" view_file = "enter.html"
required_login = False 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.TaskRuntimeView import TaskRuntimeView
from Main.views.SolutionView import SolutionView from Main.views.SolutionView import SolutionView
from Main.views.ImageView import ImageView from Main.views.ImageView import ImageView
from Main.views.SendCodeView import SendCodeView

View File

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

View File

@ -18,6 +18,7 @@ urlpatterns = [
path("solutions_table", SolutionsTableView.as_view()), path("solutions_table", SolutionsTableView.as_view()),
path("task_runtime", TaskRuntimeView.as_view()), path("task_runtime", TaskRuntimeView.as_view()),
path("image", ImageView.as_view()), path("image", ImageView.as_view()),
path("send_code", SendCodeView.as_view()),
path("", MainView.as_view()), path("", MainView.as_view()),
path("admin/", admin.site.urls), 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.db import transaction
from django.core.handlers.wsgi import WSGIRequest 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.shortcuts import render
from django.utils import timezone from django.utils import timezone
@ -57,6 +57,8 @@ class BaseView:
data = method() data = method()
if type(data) == str: if type(data) == str:
return HttpResponseRedirect(data) return HttpResponseRedirect(data)
if type(data) == dict:
return JsonResponse(data)
if data is not None: if data is not None:
return data return data
context = {**context, **c.context} context = {**context, **c.context}

View File

@ -22,7 +22,7 @@
</div> </div>
<div class="col-9"> <div class="col-9">
<h3> <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> <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 %} {% if user.is_superuser %}
<a style="margin-left: 15px;" href="/admin/" class="badge badge-secondary"> Админ</a> <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> <p style="padding-top: 8px; font-size: 24px;">{{ account.username }}</p>
</td> </td>
</tr> </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> <tr>
<td> <td>
<h2><i class="fa fa-star"></i></h2> <h2><i class="fa fa-star"></i></h2>

View File

@ -2,6 +2,41 @@
{% block title %}Вход{% endblock %} {% 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 %} {% block body %}
<div class="center"> <div class="center">
<center> <center>
@ -11,19 +46,15 @@
</h1> </h1>
</div> </div>
<div> <div>
<p style="color: red;">{{ error_message }}</p> <p id="message" style="color: red;"></p>
<form method="POST"> {% csrf_token %}
{% csrf_token %} <input type="text" class="form" name="username" id="username" placeholder="username"><br>
<input type="text" class="form" name="email" placeholder="email or username"><br> <input type="password" class="form" name="code" id="code" placeholder="code" hidden><br>
<input type="password" class="form" name="password" placeholder="password"><br> <input type="hidden" id="state" value="code">
<input type="submit" value="Вход" class="sub btn btn-dark form"> <button type="button" onclick="send_code()" id="enter" class="sub btn btn-dark form">Отправить код</button>
</form>
</div> </div>
<div> <div>
<button onclick="window.location.href='/restore'" 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>
<div>
<button onclick="window.location.href='/register'" class="sub btn btn-dark form">Регистрация</button>
</div> </div>
</center> </center>
</div> </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>