basic json caching
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
# Generated by Django 3.1.2 on 2020-11-23 16:19
|
||||
|
||||
import anatomy.models
|
||||
import django.core.files.storage
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('anatomy', '0003_auto_20201119_1941'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='exam',
|
||||
name='recreate_json',
|
||||
field=models.BooleanField(default=False, help_text='If the json cache needs updating'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='anatomyquestion',
|
||||
name='image',
|
||||
field=models.ImageField(storage=django.core.files.storage.FileSystemStorage(base_url='http://161.35.163.87//media/anatomy/', location='/home/ross/sites/rad/media//anatomy/'), upload_to=anatomy.models.image_directory_path),
|
||||
),
|
||||
]
|
||||
@@ -195,6 +195,9 @@ class Exam(models.Model):
|
||||
active = models.BooleanField(help_text="If an exam should be available",
|
||||
default=True)
|
||||
|
||||
recreate_json = models.BooleanField(help_text="If the json cache needs updating",
|
||||
default=False)
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
<li>{{ question }}</lid>
|
||||
{% endfor %}
|
||||
</ol>
|
||||
<a href="{% url 'anatomy:exam_json' pk=exam.pk %}">JSON</a>
|
||||
|
||||
</div>
|
||||
{% endblock %}
|
||||
+14
-1
@@ -8,7 +8,8 @@ from django.contrib.auth.models import User
|
||||
|
||||
from django.db.models.functions import Lower
|
||||
|
||||
from django.http import Http404, JsonResponse
|
||||
from django.core.cache import cache
|
||||
|
||||
|
||||
from .forms import AnatomyAnswerForm, MarkAnatomyQuestionForm
|
||||
from .models import (
|
||||
@@ -453,11 +454,18 @@ def active_exams(request):
|
||||
|
||||
|
||||
def exam_json(request, pk):
|
||||
|
||||
exam = get_object_or_404(Exam, pk=pk)
|
||||
|
||||
if not exam.active:
|
||||
raise Http404("No available exam")
|
||||
|
||||
exam_json_cache = cache.get("exam_json_{}".format(pk))
|
||||
|
||||
if exam_json_cache is not None and not exam.recreate_json:
|
||||
return JsonResponse(exam_json)
|
||||
|
||||
|
||||
questions = exam.exam_questions.all()
|
||||
|
||||
exam_questions = defaultdict(dict)
|
||||
@@ -477,6 +485,11 @@ def exam_json(request, pk):
|
||||
"exam_mode": True,
|
||||
"questions": exam_questions,
|
||||
}
|
||||
|
||||
exam.recreate_json = False
|
||||
|
||||
cache.set("exam_json_{}".format(pk), exam_json, 3600)
|
||||
|
||||
return JsonResponse(exam_json)
|
||||
|
||||
|
||||
|
||||
@@ -179,3 +179,10 @@ LOGGING = {
|
||||
}
|
||||
|
||||
CORS_ORIGIN_ALLOW_ALL = True
|
||||
|
||||
CACHES = {
|
||||
'default': {
|
||||
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
|
||||
'LOCATION': '/var/tmp/django_cache',
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user