- Quiz, Question, Choice, QuizAttempt, QuestionResponse models with migrations - seed-based deterministic randomization for questions and choices per attempt - SC/MC grading (all-or-nothing per question), short-answer regex/keyword matching - submit_attempt: grades all responses, computes score_percent, marks passed/failed - DRF API: start attempt, submit response, submit (finalize) attempt, quiz detail - 25 unit + integration tests covering grading correctness, boundary conditions, randomization reproducibility, API flows, and access control Co-Authored-By: Paperclip <noreply@paperclip.ing>
20 lines
667 B
Python
20 lines
667 B
Python
from django.urls import path
|
|
|
|
from .views import (
|
|
AttemptDetailView,
|
|
QuizDetailView,
|
|
StartAttemptView,
|
|
SubmitAttemptView,
|
|
SubmitResponseView,
|
|
)
|
|
|
|
app_name = "quizzes"
|
|
|
|
urlpatterns = [
|
|
path("<uuid:quiz_id>/", QuizDetailView.as_view(), name="quiz-detail"),
|
|
path("<uuid:quiz_id>/attempts/", StartAttemptView.as_view(), name="start-attempt"),
|
|
path("attempts/<uuid:attempt_id>/", AttemptDetailView.as_view(), name="attempt-detail"),
|
|
path("attempts/<uuid:attempt_id>/responses/", SubmitResponseView.as_view(), name="submit-response"),
|
|
path("attempts/<uuid:attempt_id>/submit/", SubmitAttemptView.as_view(), name="submit-attempt"),
|
|
]
|