/
servgri
/
interview
Обзор
Документация
Войти
/
servgri
/
interview
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
bot_api/view_editor.py
68 строк
2 KB
Seal
initial
27 ноя 2025, 03:03
27 ноя 2025, 03:03
447211e
Код
Авторство
О чём код?
from django.shortcuts import render from django.contrib.auth import get_user_model from rest_framework.decorators import api_view, permission_classes from rest_framework.response import Response from rest_framework import status from rest_framework_simplejwt.tokens import AccessToken from bot_api.permissions import TelegramUserPermission from tasks.models import Task, UserProgress from .docker_runner import run_in_sandbox from .serializers import TaskSerializer def code_editor_view(request): """ Отображает HTML-редактор. task_id — передаётся GET параметром jwt — для аутентификации """ print(request.GET.get('task_id')) return render(request, "bot/main.html", { "SERVER_URL": request.get_host(), "TASK_ID": request.GET.get("task_id"), "JWT": request.GET.get("jwt"), }) # ================= API ================= @api_view(["GET"]) @permission_classes([TelegramUserPermission]) def api_get_task(request, task_id): try: task = Task.objects.get(pk=task_id) except Task.DoesNotExist: return Response({"error": "Task not found"}, status=404) return Response(TaskSerializer(task).data) @api_view(["POST"]) @permission_classes([TelegramUserPermission]) def api_submit_solution(request, task_id): """ Получает python code → запускает в Docker sandbox → сохраняет результат. """ user = request.user code = request.data.get("user_solution", "") try: task = Task.objects.get(pk=task_id) except Task.DoesNotExist: return Response({"error": "Task not found"}, status=404) # Запуск в sandbox контейнере ok, output = run_in_sandbox(code) # Сохраняем в UserProgress progress, _ = UserProgress.objects.get_or_create(user=user, task=task) progress.user_answer = code progress.correct = ok progress.save() return Response({ "success": ok, "output": output, })