/
gojuon
/
api_alex_math
Обзор
Документация
Войти
/
gojuon
/
api_alex_math
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
mathapi/views.py
129 строк
9 KB
Alexei Petrash
API for GIA
09 ноя 2025, 09:49
09 ноя 2025, 09:49
0ca6f2e
Код
Авторство
О чём код?
from django.http import JsonResponse from random import randint from secrets import choice from gia.models import Kim, GiaTask from .functions.lineareq import make_lineareq from .functions.squareroot import make_squareroot_task def get_kim_variants(request): if request.method == 'OPTIONS': response = JsonResponse('', status=200, safe=False) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Headers'] = 'X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization' elif request.method == 'GET': kim_obj = Kim.objects.filter(visible=True).values("num", "year", "title", "description", "video") response = JsonResponse(list(kim_obj), status=201, safe=False) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Methods'] = 'GET, OPTIONS' response['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept' return response def get_kim(request, kim): if request.method == 'OPTIONS': response = JsonResponse('', status=200, safe=False) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Headers'] = ('X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, ' 'Access-Control-Request-Method, Access-Control-Request-Headers, ' 'Authorization') elif request.method == 'GET': tasks = [{ "task_type__task_number": 0, "task_text": "<p>В заданиях используются следующие соглашения.</p><ol><li>Обозначения для логических " "связок (операций): <ul style='list-style-type: none'><li>a) отрицание (инверсия, " "логическое НЕ) обозначается \\(\\neg\\) (например, \\(\\neg A\\));</li><li>b) конъюнкция (" "логическое умножение, логическое И) обозначается \\(\\land\\) (например, \\(A \\land B\\)) " "либо \\(\\&\\) (например, \\( A \\, \\& \\, B \\));</li><li>c) дизъюнкция (логическое " "сложение, логическое ИЛИ) обозначается \\(\\lor\\) (например, \\(A \\lor B\\)) либо \\(|\\) " "(например, \\( A \\, | \\, B \\));</li> <li>d) следование (импликация) обозначается \\(" "\\to\\) (например, \\(A \\to B\\));</li> <li>e) тождество обозначается \\(\\equiv\\) (" "например, \\(A \\equiv B\\)); выражение \\(A \\equiv B\\) истинно тогда и только тогда, " "когда значения \\(A\\) и \\(B\\) совпадают (либо они оба истинны, либо они оба ложны);</li> " "<li>f) символ \\(1\\) используется для обозначения истины (истинного высказывания); символ " "\\(0\\) — для обозначения лжи (ложного высказывания).</li></ul></li><li>Два " "логических выражения, содержащие переменные, называются равносильными (эквивалентными), " "если значения этих выражений совпадают при любых значениях переменных. Так выражения \\(A " "\\to B\\) и \\( (\\neg A) \\lor B\\) равносильны, а \\(A \\lor B\\) и \\(A \\land B\\) " "неравносильны (значения выражений разные, например, при \\(A = 1,\\) \\(B = 0\\)).</li> " "<li>Приоритеты логических операций: инверсия (отрицание), конъюнкция (логическое " "умножение), дизъюнкция (логическое сложение), импликация (следование), тождество. Таким " "образом, \\( \\neg A \\land B \\lor C \\land D\\) обозначает тоже, что и \\((( \\neg A ) " "\\land B ) \\lor ( C \\land D )\\). Возможна запись \\( A \\land B \\land C\\) вместо \\( " "( A \\land B ) \\land C\\). То же относится к дизъюнкции: возможна запись \\( A \\lor B " "\\lor C\\) вместо \\( ( A \\lor B ) \\lor C\\).</li><li>Обозначения Мбайт и Кбайт " "используются в традиционном для информатики смысле — как обозначения единиц " "измерения, соотношение которых с единицей «байт» выражается степенью " "двойки.</li></ol>", "answer": "", "task_kim_url": [], "task_kim_file_names": [] }] option_obj = Kim.objects.filter(num=kim).values('num', 'hide_answers', 'task25_cols', 'total_tasks', 'version') options = option_obj[0] kim_obj = GiaTask.objects.filter(kim__num=kim).order_by("task_type__task_number").values("task_text", "answer", "task_kim_url", "task_kim_file_names", "task_type__task_number") tasks_tmp = list(kim_obj) for task_num in range(1, int(options['total_tasks']) + 1): tmp = [t for t in tasks_tmp if int(t["task_type__task_number"]) == task_num] if len(tmp) == 0: continue elif len(tmp) == 1: tasks += tmp else: tasks += [choice(tmp)] #tasks += list(kim_obj) response = JsonResponse({"tasks": tasks, "options": options}, status=201, safe=False) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Methods'] = 'GET, OPTIONS' response['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept' return response def multtab(request): if request.method == 'OPTIONS': response = JsonResponse('', status=200) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Headers'] = 'X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization' elif request.method == 'GET': first_number, second_number = randint(2, 9), randint(2, 9) ans = first_number * second_number problem_text = f"{first_number} \\times {second_number}" response_text = {'problemText': problem_text, 'answer': ans} response = JsonResponse(response_text, status=201) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Methods'] = 'GET, OPTIONS' response['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept' return response def lineareq(request, level): if request.method == 'OPTIONS': response = JsonResponse('', status=200) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Headers'] = 'X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization' elif request.method == 'GET': problem_text, ans = make_lineareq(level) response_text = {'problemText': problem_text, 'answer': ans} response = JsonResponse(response_text, status=201) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Methods'] = 'GET, OPTIONS' response['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept' return response def squareroot(request, level): if request.method == 'OPTIONS': response = JsonResponse('', status=200) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Headers'] = 'X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization' elif request.method == 'GET': problem_text, ans = make_squareroot_task(level) response_text = {'problemText': problem_text, 'answer': ans} response = JsonResponse(response_text, status=201) response['Access-Control-Allow-Origin'] = '*' response['Access-Control-Allow-Methods'] = 'GET, OPTIONS' response['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept' return response