checkpoint
This commit is contained in:
@@ -38,3 +38,11 @@ class AccountView(BaseView):
|
||||
self.request.user.save()
|
||||
login(self.request, self.request.user)
|
||||
return "/account?error_message=Пароль успешно установлен"
|
||||
|
||||
def post_notifications(self):
|
||||
self.request.user.userinfo.telegram_chat_id = self.request.POST['chat_id']
|
||||
for attr in dir(self.request.user.userinfo):
|
||||
if attr.startswith('notification'):
|
||||
setattr(self.request.user.userinfo, attr, attr in self.request.POST.keys())
|
||||
self.request.user.userinfo.save()
|
||||
return '/account'
|
||||
|
@@ -12,8 +12,7 @@ class RegisterView(BaseView):
|
||||
self.context["error_message"] = self.request.GET.get("error_message", "")
|
||||
|
||||
def post(self):
|
||||
data = {**self.request.POST}
|
||||
data["password"] = data["password"].strip()
|
||||
data = self.request.POST
|
||||
if len(data["password"]) < 8:
|
||||
return "/register?error_message=Пароль слишком слабый"
|
||||
if data["password"] != data["repeat_password"]:
|
||||
|
10
Main/views/SolutionView.py
Normal file
10
Main/views/SolutionView.py
Normal file
@@ -0,0 +1,10 @@
|
||||
from SprintLib.BaseView import BaseView, AccessError
|
||||
|
||||
|
||||
class SolutionView(BaseView):
|
||||
view_file = 'solution.html'
|
||||
required_login = True
|
||||
|
||||
def pre_handle(self):
|
||||
if self.entities.solution.user != self.request.user:
|
||||
raise AccessError()
|
17
Main/views/TaskRuntimeView.py
Normal file
17
Main/views/TaskRuntimeView.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from django.http import HttpResponse
|
||||
|
||||
from Main.models import Progress
|
||||
from SprintLib.BaseView import BaseView
|
||||
|
||||
|
||||
class TaskRuntimeView(BaseView):
|
||||
view_file = 'task_runtime.html'
|
||||
required_login = True
|
||||
|
||||
def get(self):
|
||||
progress = Progress.objects.get(task=self.entities.task, user=self.request.user)
|
||||
self.context['progress'] = progress
|
||||
if 'render' in self.request.GET.keys():
|
||||
return
|
||||
if progress.finished:
|
||||
return HttpResponse('done')
|
@@ -1,7 +1,7 @@
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.http import HttpResponse
|
||||
from django.utils import timezone
|
||||
|
||||
from Main.models import ExtraFile
|
||||
from Main.models import ExtraFile, Progress
|
||||
from SprintLib.BaseView import BaseView, AccessError
|
||||
|
||||
|
||||
@@ -12,6 +12,10 @@ class TaskSettingsView(BaseView):
|
||||
def pre_handle(self):
|
||||
if self.entities.task not in self.request.user.userinfo.available_tasks:
|
||||
raise AccessError()
|
||||
if self.request.method == 'POST':
|
||||
for progress in Progress.objects.filter(task=self.entities.task, finished=False):
|
||||
progress.start_time = timezone.now()
|
||||
progress.save()
|
||||
|
||||
def get(self):
|
||||
self.context['error_message'] = self.request.GET.get('error_message', '')
|
||||
@@ -29,8 +33,10 @@ class TaskSettingsView(BaseView):
|
||||
name = filename.strip('.a')
|
||||
if not name.isnumeric():
|
||||
return f'/admin/task?task_id={self.entities.task.id}&error_message=Формат файла не соответствует тесту'
|
||||
ef, created = ExtraFile.objects.get_or_create(task=self.entities.task, is_test=True, test_number=int(name))
|
||||
ef, created = ExtraFile.objects.get_or_create(task=self.entities.task, is_test=True, filename=filename)
|
||||
if not created:
|
||||
ef.is_sample = False
|
||||
ef.save()
|
||||
return f'/admin/task?task_id={self.entities.task.id}'
|
||||
if ef is None or created is None:
|
||||
ef, created = ExtraFile.objects.get_or_create(
|
||||
@@ -78,3 +84,11 @@ class TaskSettingsView(BaseView):
|
||||
|
||||
def post_create_test(self):
|
||||
return self._create(True)
|
||||
|
||||
def post_save_test(self):
|
||||
ef = ExtraFile.objects.get(id=self.request.POST['test_id'])
|
||||
with open(ef.path, 'w') as fs:
|
||||
fs.write(self.request.POST['text'])
|
||||
ef.is_sample = 'is_sample' in self.request.POST.keys()
|
||||
ef.save()
|
||||
return f'/admin/task?task_id={self.entities.task.id}'
|
||||
|
@@ -1,6 +1,6 @@
|
||||
from zipfile import ZipFile
|
||||
|
||||
from Main.models import Solution
|
||||
from Main.models import Solution, Progress
|
||||
from Main.tasks import start_testing
|
||||
from SprintLib.BaseView import BaseView, Language
|
||||
from SprintLib.testers import *
|
||||
@@ -12,6 +12,8 @@ class TaskView(BaseView):
|
||||
|
||||
def get(self):
|
||||
self.context['languages'] = Language.objects.filter(opened=True).order_by('name')
|
||||
progress, _ = Progress.objects.get_or_create(user=self.request.user, task=self.entities.task)
|
||||
self.context['progress'] = progress
|
||||
|
||||
def pre_handle(self):
|
||||
if self.request.method == 'GET':
|
||||
|
@@ -1,6 +1,5 @@
|
||||
from Main.models import Task
|
||||
from SprintLib.BaseView import BaseView
|
||||
from django.db.models import Q
|
||||
|
||||
|
||||
class TasksView(BaseView):
|
||||
|
@@ -9,3 +9,5 @@ from Main.views.RatingView import RatingView
|
||||
from Main.views.SetsView import SetsView
|
||||
from Main.views.TaskView import TaskView
|
||||
from Main.views.SolutionsTableView import SolutionsTableView
|
||||
from Main.views.TaskRuntimeView import TaskRuntimeView
|
||||
from Main.views.SolutionView import SolutionView
|
||||
|
Reference in New Issue
Block a user