#13 update global cache backend, add last_modified complete, add etag for documentation reasons, will be removed in next commit
This commit is contained in:
parent
2ca47411ef
commit
8ee6ae9016
@ -27,52 +27,15 @@ from django.template.defaultfilters import register
|
|||||||
from django.views.decorators.cache import cache_page
|
from django.views.decorators.cache import cache_page
|
||||||
from django.views.decorators.http import condition
|
from django.views.decorators.http import condition
|
||||||
|
|
||||||
|
from .cache import (get_etag_index, set_etag_index,
|
||||||
|
get_etag_country, set_etag_country,
|
||||||
|
get_last_modified_index, set_last_modified_index,
|
||||||
|
get_last_modified_country, set_last_modified_country)
|
||||||
from .models import Country, Stamp, Coin, User
|
from .models import Country, Stamp, Coin, User
|
||||||
|
from .helper import total_coin_sum, coin_sum_of_
|
||||||
|
|
||||||
|
|
||||||
def total_coin_sum():
|
@condition(etag_func=get_etag_index, last_modified_func=get_last_modified_index)
|
||||||
''' add each coin_sum from each country and return the result
|
|
||||||
>>> total_coin_sum()
|
|
||||||
173.57
|
|
||||||
'''
|
|
||||||
|
|
||||||
total_coin_sum = 0
|
|
||||||
for country in Country.objects.order_by('name'):
|
|
||||||
total_coin_sum += coin_sum_of_(country)
|
|
||||||
|
|
||||||
return total_coin_sum
|
|
||||||
|
|
||||||
|
|
||||||
def coin_sum_of_(country):
|
|
||||||
''' calculate the sum of all coins from a country
|
|
||||||
>>> coin_sum_of_(germany)
|
|
||||||
346.82
|
|
||||||
'''
|
|
||||||
|
|
||||||
coin_count = {'total': 0}
|
|
||||||
for value in [1, 2, 5, 10, 20, 50, 100, 200, 201, 202, 203]:
|
|
||||||
|
|
||||||
coin_count[value] = Coin.objects.filter(
|
|
||||||
country=country,
|
|
||||||
value=value
|
|
||||||
).exclude(found_by__isnull=True).count()
|
|
||||||
|
|
||||||
if value > 200:
|
|
||||||
coin_count['total'] += 200 * coin_count[value]
|
|
||||||
else:
|
|
||||||
coin_count['total'] += value * coin_count[value]
|
|
||||||
|
|
||||||
return coin_count['total'] / 100
|
|
||||||
|
|
||||||
|
|
||||||
def latest_coin_added_to_(request, name_iso):
|
|
||||||
''' return the datetime of the last coin added to a country
|
|
||||||
>>> latest_coin_added_to_(germany)
|
|
||||||
datetime.datetime
|
|
||||||
'''
|
|
||||||
return Coin.objects.filter(country=name_iso).latest('date_modified').date_modified
|
|
||||||
|
|
||||||
|
|
||||||
def index(request):
|
def index(request):
|
||||||
''' index view '''
|
''' index view '''
|
||||||
|
|
||||||
@ -83,13 +46,13 @@ def index(request):
|
|||||||
context = {
|
context = {
|
||||||
'countrys': countrys,
|
'countrys': countrys,
|
||||||
'users': users,
|
'users': users,
|
||||||
'coin_sum': f"{coin_sum:.2f} €"
|
'coin_sum': f'{coin_sum:.2f} €'
|
||||||
}
|
}
|
||||||
|
|
||||||
return HttpResponse(template.render(context, request))
|
return HttpResponse(template.render(context, request))
|
||||||
|
|
||||||
|
|
||||||
@condition(last_modified_func=latest_coin_added_to_)
|
@condition(etag_func=get_etag_country, last_modified_func=get_last_modified_country)
|
||||||
def detail_country(request, name_iso):
|
def detail_country(request, name_iso):
|
||||||
''' wrapper_view for a *single* country '''
|
''' wrapper_view for a *single* country '''
|
||||||
|
|
||||||
@ -292,6 +255,8 @@ def add_coin(request):
|
|||||||
name no - str
|
name no - str
|
||||||
found_by no None obj User
|
found_by no None obj User
|
||||||
found_on no None str %Y-%m-%d
|
found_on no None str %Y-%m-%d
|
||||||
|
date-added no auto str %Y-%m-%d %H:%M:%S.%s
|
||||||
|
date-modified no auto str %Y-%m-%d %H:%M:%S.%s
|
||||||
circulation no 0 int [0; 1000000000]
|
circulation no 0 int [0; 1000000000]
|
||||||
buy_only no False bool
|
buy_only no False bool
|
||||||
checked no False bool
|
checked no False bool
|
||||||
@ -409,6 +374,10 @@ def add_coin(request):
|
|||||||
in_collector = ec,
|
in_collector = ec,
|
||||||
exists = exists)
|
exists = exists)
|
||||||
|
|
||||||
|
set_etag_index()
|
||||||
|
set_last_modified_index()
|
||||||
|
set_etag_country(name_iso)
|
||||||
|
set_last_modified_country(name_iso)
|
||||||
return response()
|
return response()
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,6 +129,18 @@ MAINTENANCE_MODE_READ_ONLY = False
|
|||||||
# do not redirect after login
|
# do not redirect after login
|
||||||
LOGIN_REDIRECT_URL = './'
|
LOGIN_REDIRECT_URL = './'
|
||||||
|
|
||||||
# caching
|
# caching modes, i.e. file based, memcached, or other fancy stuff
|
||||||
CACHE_MIDDLEWARE_ALIAS = willipink_coinc
|
# https://docs.djangoproject.com/en/3.1/topics/cache/#cache-arguments
|
||||||
CACHE_MIDDLEWARE_SECONDS = 600
|
CACHES = {
|
||||||
|
'default': {
|
||||||
|
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
|
||||||
|
'LOCATION': '/var/tmp/django_cache',
|
||||||
|
'TIMEOUT': None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# per-site cache
|
||||||
|
# updatecachemiddleware: adds 'Expires' and 'Cache-Control' headers to give the
|
||||||
|
# page a maximum age CACHE_MIDDLEWARE_SECONDS
|
||||||
|
# CACHE_MIDDLEWARE_ALIAS = 'default'
|
||||||
|
# CACHE_MIDDLEWARE_SECONDS = 600
|
||||||
|
Loading…
x
Reference in New Issue
Block a user