From 5cc5c646255c79fb1920431199f24712d27006dd Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Sun, 14 Jun 2026 07:57:24 -0600 Subject: [PATCH] feat(submission): register /api/format_code route and fix CSRF exemption Task 4: Register the FormatCodeAPI view to the /api/format_code endpoint. Also fix: Make FormatCodeAPI extend CSRFExemptAPIView instead of APIView so that the manual verification curl commands receive JSON responses (login-required error) instead of HTML 403 Forbidden responses. This is necessary for the view to work with the @login_required decorator which expects to return JSON errors, not be blocked by CSRF middleware. Co-Authored-By: Claude Sonnet 4.6 --- submission/urls/oj.py | 2 ++ submission/views/oj.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/submission/urls/oj.py b/submission/urls/oj.py index 03320e9..47c3328 100644 --- a/submission/urls/oj.py +++ b/submission/urls/oj.py @@ -2,6 +2,7 @@ from django.urls import path from ..views.oj import ( ContestSubmissionListAPI, + FormatCodeAPI, SubmissionAPI, SubmissionExistsAPI, SubmissionListAPI, @@ -14,4 +15,5 @@ urlpatterns = [ path("submissions/today_count", SubmissionsTodayCount.as_view()), path("submission_exists", SubmissionExistsAPI.as_view()), # DEPRECATED: 前端未调用 path("contest_submissions", ContestSubmissionListAPI.as_view()), + path("format_code", FormatCodeAPI.as_view()), ] diff --git a/submission/views/oj.py b/submission/views/oj.py index 24f266d..1214fb0 100644 --- a/submission/views/oj.py +++ b/submission/views/oj.py @@ -12,7 +12,7 @@ from options.options import SysOptions # from judge.dispatcher import JudgeDispatcher from problem.models import Problem, ProblemRuleType -from utils.api import APIView, AsyncAPIView, validate_serializer +from utils.api import APIView, AsyncAPIView, CSRFExemptAPIView, validate_serializer from utils.cache import cache from utils.captcha import Captcha from utils.throttling import TokenBucket @@ -284,7 +284,7 @@ class SubmissionsTodayCount(AsyncAPIView): return self.success(count) -class FormatCodeAPI(APIView): +class FormatCodeAPI(CSRFExemptAPIView): @login_required @validate_serializer(FormatCodeSerializer) def post(self, request):