mirror of
https://gitlab.science.ru.nl/technicie/MarietjeDjango.git
synced 2025-12-10 12:12:21 +01:00
Add caching for song searching
This commit is contained in:
@ -3,12 +3,14 @@ from functools import wraps
|
|||||||
|
|
||||||
import django.middleware.csrf as csrf
|
import django.middleware.csrf as csrf
|
||||||
from django.contrib.auth import authenticate, login
|
from django.contrib.auth import authenticate, login
|
||||||
|
from django.core.cache import caches
|
||||||
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from django.db.models import Q, Sum, Value
|
from django.db.models import Q, Sum, Value
|
||||||
from django.db.models.functions import Coalesce
|
from django.db.models.functions import Coalesce
|
||||||
from django.http import JsonResponse, HttpResponseForbidden
|
from django.http import JsonResponse, HttpResponseForbidden
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
from django.views.decorators.cache import cache_page
|
||||||
from django.views.decorators.http import require_http_methods
|
from django.views.decorators.http import require_http_methods
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from mutagen import File
|
from mutagen import File
|
||||||
@ -80,16 +82,17 @@ def songs(request):
|
|||||||
try:
|
try:
|
||||||
pagesize = int(request.POST.get('pagesize'))
|
pagesize = int(request.POST.get('pagesize'))
|
||||||
except:
|
except:
|
||||||
pagesize = 10
|
pagesize = 50
|
||||||
|
|
||||||
if not pagesize or pagesize < 10:
|
if not pagesize or pagesize < 50:
|
||||||
pagesize = 10
|
pagesize = 50
|
||||||
|
|
||||||
try:
|
try:
|
||||||
page = int(request.POST.get('page'))
|
page = int(request.POST.get('page'))
|
||||||
except:
|
except:
|
||||||
page = 1
|
page = 1
|
||||||
|
|
||||||
|
def search_songs():
|
||||||
queries = [Q(deleted=False)]
|
queries = [Q(deleted=False)]
|
||||||
queries.extend([Q(Q(artist__icontains=word) | Q(title__icontains=word)) for word in request.POST.get('all', '').split()])
|
queries.extend([Q(Q(artist__icontains=word) | Q(title__icontains=word)) for word in request.POST.get('all', '').split()])
|
||||||
queries.extend([Q(user__name__icontains=word) for word in request.POST.get('uploader', '').split()])
|
queries.extend([Q(user__name__icontains=word) for word in request.POST.get('uploader', '').split()])
|
||||||
@ -108,7 +111,10 @@ def songs(request):
|
|||||||
except EmptyPage:
|
except EmptyPage:
|
||||||
songs = paginator.page(paginator.num_pages)
|
songs = paginator.page(paginator.num_pages)
|
||||||
|
|
||||||
songs_dict = [song_to_dict(song, user=True) for song in songs.object_list]
|
return [song_to_dict(song, user=True) for song in songs.object_list], paginator
|
||||||
|
|
||||||
|
cache_key = '|'.join(request.POST.get(k) for k in ('all', 'uploader', 'pagesize', 'page'))
|
||||||
|
songs_dict, paginator = caches['song_search'].get_or_set(cache_key, search_songs, 60*60*2)
|
||||||
|
|
||||||
return JsonResponse({
|
return JsonResponse({
|
||||||
'per_page': pagesize,
|
'per_page': pagesize,
|
||||||
|
|||||||
@ -94,8 +94,13 @@ PASSWORD_HASHERS = [
|
|||||||
CACHES = {
|
CACHES = {
|
||||||
'default': {
|
'default': {
|
||||||
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
|
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
|
||||||
'LOCATION': '/var/tmp/MarietjeDjango_cache',
|
'LOCATION': '/var/tmp/MarietjeDjango_cache/default',
|
||||||
}
|
},
|
||||||
|
'song_search': {
|
||||||
|
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
|
||||||
|
'LOCATION': '/var/tmp/MarietjeDjango_cache/song_search',
|
||||||
|
'OPTIONS': { 'MAX_ENTRIES': 1000 },
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
AUTH_USER_MODEL = 'marietje.User'
|
AUTH_USER_MODEL = 'marietje.User'
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from django.core.cache import cache
|
from django.core.cache import caches
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db.models import Count, Q
|
from django.db.models import Count, Q
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
@ -12,8 +12,8 @@ from songs.models import Song
|
|||||||
|
|
||||||
def recache_stats():
|
def recache_stats():
|
||||||
new_stats = compute_stats()
|
new_stats = compute_stats()
|
||||||
cache.delete('stats')
|
caches['default'].delete('stats')
|
||||||
cache.set('stats', new_stats, 7200)
|
caches['default'].set('stats', new_stats, 7200)
|
||||||
return new_stats
|
return new_stats
|
||||||
|
|
||||||
def compute_stats():
|
def compute_stats():
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from django.core.cache import cache
|
from django.core.cache import caches
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
|
||||||
def stats(request):
|
def stats(request):
|
||||||
stats = cache.get('stats')
|
stats = caches['default'].get('stats')
|
||||||
status = 503
|
status = 503
|
||||||
current_age = None
|
current_age = None
|
||||||
current_age_text = None
|
current_age_text = None
|
||||||
|
|||||||
Reference in New Issue
Block a user