Commit 318b3079 authored by impfundev's avatar impfundev

feat: implement cache framework with redis

parent 51b012d8
from django.urls import path from django.urls import path
from book_loans.views import index, update, delete from book_loans.views import index, update, delete
from django.views.decorators.cache import cache_page
from django.conf import settings
urlpatterns = [ urlpatterns = [
path("", index, name="book_loan_lists"), path(
"",
cache_page(settings.CACHE_TTL, key_prefix="book_loans")(index),
name="book_loan_lists",
),
path("<id>/update/", update, name="update_book"), path("<id>/update/", update, name="update_book"),
path("<id>/delete/", delete, name="delete_book_loan"), path("<id>/delete/", delete, name="delete_book_loan"),
] ]
import jwt import jwt
from django.conf import settings from django.conf import settings
from django.core.cache import cache
from datetime import datetime from datetime import datetime
from django.db.models import Q
# from django.db.models import Q
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from book_loans.models import Book, BookLoans from book_loans.models import Book, BookLoans
...@@ -49,6 +51,7 @@ def index(request): ...@@ -49,6 +51,7 @@ def index(request):
librarians_id=librarians_id, librarians_id=librarians_id,
return_date=return_date, return_date=return_date,
) )
cache.clear()
if request.method == "GET": if request.method == "GET":
# query = request.GET.get("q") # query = request.GET.get("q")
...@@ -61,8 +64,10 @@ def index(request): ...@@ -61,8 +64,10 @@ def index(request):
# context["book_loans"] = filtered_book_list # context["book_loans"] = filtered_book_list
if order == "new": if order == "new":
cache.clear()
context["book_loans"] = BookLoans.objects.all().order_by("-created_at")[:10] context["book_loans"] = BookLoans.objects.all().order_by("-created_at")[:10]
elif order == "old": elif order == "old":
cache.clear()
context["book_loans"] = BookLoans.objects.all().order_by("created_at")[:10] context["book_loans"] = BookLoans.objects.all().order_by("created_at")[:10]
return render(request, "loans.html", context) return render(request, "loans.html", context)
...@@ -121,6 +126,7 @@ def update(request, id): ...@@ -121,6 +126,7 @@ def update(request, id):
if updated_loan.return_date is not None and book.stock < new_stock: if updated_loan.return_date is not None and book.stock < new_stock:
Book.objects.filter(id=book_id).update(stock_in=new_stock) Book.objects.filter(id=book_id).update(stock_in=new_stock)
cache.clear()
return HttpResponseRedirect("/dashboard/book-loans") return HttpResponseRedirect("/dashboard/book-loans")
context["form"] = form context["form"] = form
...@@ -142,6 +148,7 @@ def delete(request, id): ...@@ -142,6 +148,7 @@ def delete(request, id):
books.filter(id=book_id).update(stock=new_stock) books.filter(id=book_id).update(stock=new_stock)
book_loan.delete() book_loan.delete()
cache.clear()
return HttpResponseRedirect("/dashboard/book-loans") return HttpResponseRedirect("/dashboard/book-loans")
......
from django.urls import path from django.urls import path
from .views import index, update, delete from .views import index, update, delete
from django.views.decorators.cache import cache_page
from django.conf import settings
urlpatterns = [ urlpatterns = [
path("", index, name="book_list"), path(
"",
cache_page(settings.CACHE_TTL, key_prefix="books")(index),
name="book_list",
),
path("<int:id>/update/", update, name="book_update"), path("<int:id>/update/", update, name="book_update"),
path("<int:id>/delete/", delete, name="book_delete"), path("<int:id>/delete/", delete, name="book_delete"),
] ]
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.core.cache import cache
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from datetime import datetime from datetime import datetime
from django.db.models import Q from django.db.models import Q
...@@ -20,20 +21,24 @@ def index(request): ...@@ -20,20 +21,24 @@ def index(request):
description = form.data["description"] description = form.data["description"]
Book.objects.create(title=title, stock=stock, description=description) Book.objects.create(title=title, stock=stock, description=description)
cache.clear()
if request.method == "GET": if request.method == "GET":
query = request.GET.get("q") query = request.GET.get("q")
order = request.GET.get("o") order = request.GET.get("o")
if query is not None: if query is not None:
cache.clear()
filtered_book_list = Book.objects.filter( filtered_book_list = Book.objects.filter(
Q(title__icontains=query) | Q(description__icontains=query) Q(title__icontains=query) | Q(description__icontains=query)
).order_by("-created_at")[:10] ).order_by("-created_at")[:10]
context["books"] = filtered_book_list context["books"] = filtered_book_list
if order == "new": if order == "new":
cache.clear()
context["books"] = Book.objects.all().order_by("-updated_at")[:10] context["books"] = Book.objects.all().order_by("-updated_at")[:10]
elif order == "old": elif order == "old":
cache.clear()
context["books"] = Book.objects.all().order_by("updated_at")[:10] context["books"] = Book.objects.all().order_by("updated_at")[:10]
return render(request, "book.html", context) return render(request, "book.html", context)
...@@ -64,6 +69,7 @@ def update(request, id): ...@@ -64,6 +69,7 @@ def update(request, id):
description=description, description=description,
updated_at=datetime.now(), updated_at=datetime.now(),
) )
cache.clear()
return HttpResponseRedirect("/dashboard/books") return HttpResponseRedirect("/dashboard/books")
context["form"] = form context["form"] = form
...@@ -77,6 +83,7 @@ def delete(request, id): ...@@ -77,6 +83,7 @@ def delete(request, id):
if request.method == "POST": if request.method == "POST":
book.delete() book.delete()
cache.clear()
return HttpResponseRedirect("/dashboard/books") return HttpResponseRedirect("/dashboard/books")
return render(request, "book.html", context) return render(request, "book.html", context)
...@@ -174,6 +174,8 @@ CACHES = { ...@@ -174,6 +174,8 @@ CACHES = {
}, },
} }
CACHE_TTL = 60 * 15 # 15 Minute
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db" SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
# Default primary key field type # Default primary key field type
......
...@@ -19,9 +19,15 @@ from django.contrib import admin ...@@ -19,9 +19,15 @@ from django.contrib import admin
from django.urls import path from django.urls import path
from django.conf.urls import include from django.conf.urls import include
from dashboards.views import home from dashboards.views import home
from django.views.decorators.cache import cache_page
from django.conf import settings
urlpatterns = [ urlpatterns = [
path("", home, name="homepage"), path(
"",
cache_page(settings.CACHE_TTL, key_prefix="homepage")(home),
name="homepage",
),
path("dashboard/", include("dashboards.urls")), path("dashboard/", include("dashboards.urls")),
path("admin/", admin.site.urls), path("admin/", admin.site.urls),
path("auth/", include("authentications.urls")), path("auth/", include("authentications.urls")),
......
from django.urls import path, include from django.urls import path, include
from dashboards.views import index from dashboards.views import index
from django.views.decorators.cache import cache_page
from django.conf import settings
urlpatterns = [ urlpatterns = [
path("", index, name="dashboard"), path(
"",
cache_page(settings.CACHE_TTL, key_prefix="dashboard")(index),
name="dashboard",
),
path("books/", include("books.urls")), path("books/", include("books.urls")),
path("members/", include("members.urls")), path("members/", include("members.urls")),
path("book-loans/", include("book_loans.urls")), path("book-loans/", include("book_loans.urls")),
......
from django.urls import path from django.urls import path
from librarians.views import index, update, delete from librarians.views import index, update, delete
from django.views.decorators.cache import cache_page
from django.conf import settings
urlpatterns = [ urlpatterns = [
path("", index, name="librarian_lists"), path(
"",
cache_page(settings.CACHE_TTL, key_prefix="librarians")(index),
name="librarian_lists",
),
path("<id>/update/", update, name="update_librarian"), path("<id>/update/", update, name="update_librarian"),
path("<id>/delete/", delete, name="delete_librarian"), path("<id>/delete/", delete, name="delete_librarian"),
] ]
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.core.cache import cache
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.db.models import Q from django.db.models import Q
from datetime import datetime from datetime import datetime
...@@ -19,22 +20,26 @@ def index(request): ...@@ -19,22 +20,26 @@ def index(request):
password = form.data["password"] password = form.data["password"]
Librarians.objects.create(name=name, email=email, password=password) Librarians.objects.create(name=name, email=email, password=password)
cache.clear()
if request.method == "GET": if request.method == "GET":
query = request.GET.get("q") query = request.GET.get("q")
order = request.GET.get("o") order = request.GET.get("o")
if query is not None: if query is not None:
cache.clear()
filtered_book_list = Librarians.objects.filter( filtered_book_list = Librarians.objects.filter(
Q(name__icontains=query) | Q(email__icontains=query) Q(name__icontains=query) | Q(email__icontains=query)
).order_by("-created_at")[:10] ).order_by("-created_at")[:10]
context["librarians"] = filtered_book_list context["librarians"] = filtered_book_list
if order == "new": if order == "new":
cache.clear()
context["librarians"] = Librarians.objects.all().order_by("-updated_at")[ context["librarians"] = Librarians.objects.all().order_by("-updated_at")[
:10 :10
] ]
elif order == "old": elif order == "old":
cache.clear()
context["librarians"] = Librarians.objects.all().order_by("updated_at")[:10] context["librarians"] = Librarians.objects.all().order_by("updated_at")[:10]
return render(request, "librarians.html", context) return render(request, "librarians.html", context)
...@@ -61,6 +66,7 @@ def update(request, id): ...@@ -61,6 +66,7 @@ def update(request, id):
librarian.update( librarian.update(
name=name, email=email, password=password, updated_at=datetime.now() name=name, email=email, password=password, updated_at=datetime.now()
) )
cache.clear()
return HttpResponseRedirect("/dashboard/librarians") return HttpResponseRedirect("/dashboard/librarians")
context["form"] = form context["form"] = form
...@@ -74,6 +80,7 @@ def delete(request, id): ...@@ -74,6 +80,7 @@ def delete(request, id):
if request.method == "POST": if request.method == "POST":
librarian.delete() librarian.delete()
cache.clear()
return HttpResponseRedirect("/dashboard/librarians") return HttpResponseRedirect("/dashboard/librarians")
return render(request, "librarians.html", context) return render(request, "librarians.html", context)
from django.urls import path from django.urls import path
from members.views import index, update, delete from members.views import index, update, delete
from django.views.decorators.cache import cache_page
from django.conf import settings
urlpatterns = [ urlpatterns = [
path("", index, name="member_lists"), path(
"",
cache_page(settings.CACHE_TTL, key_prefix="members")(index),
name="member_lists",
),
path("<id>/update/", update, name="update_member"), path("<id>/update/", update, name="update_member"),
path("<id>/delete/", delete, name="delete_member"), path("<id>/delete/", delete, name="delete_member"),
] ]
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.core.cache import cache
from django.http import HttpResponseRedirect from django.http import HttpResponseRedirect
from django.db.models import Q from django.db.models import Q
from datetime import datetime from datetime import datetime
...@@ -19,20 +20,24 @@ def index(request): ...@@ -19,20 +20,24 @@ def index(request):
password = form.data["password"] password = form.data["password"]
Members.objects.create(name=name, email=email, password=password) Members.objects.create(name=name, email=email, password=password)
cache.clear()
if request.method == "GET": if request.method == "GET":
query = request.GET.get("q") query = request.GET.get("q")
order = request.GET.get("o") order = request.GET.get("o")
if query is not None: if query is not None:
cache.clear()
filtered_book_list = Members.objects.filter( filtered_book_list = Members.objects.filter(
Q(name__icontains=query) | Q(email__icontains=query) Q(name__icontains=query) | Q(email__icontains=query)
).order_by("-created_at")[:10] ).order_by("-created_at")[:10]
context["members"] = filtered_book_list context["members"] = filtered_book_list
if order == "new": if order == "new":
cache.clear()
context["members"] = Members.objects.all().order_by("-updated_at")[:10] context["members"] = Members.objects.all().order_by("-updated_at")[:10]
elif order == "old": elif order == "old":
cache.clear()
context["members"] = Members.objects.all().order_by("updated_at")[:10] context["members"] = Members.objects.all().order_by("updated_at")[:10]
return render(request, "members.html", context) return render(request, "members.html", context)
...@@ -59,6 +64,7 @@ def update(request, id): ...@@ -59,6 +64,7 @@ def update(request, id):
member.update( member.update(
name=name, email=email, password=password, updated_at=datetime.now() name=name, email=email, password=password, updated_at=datetime.now()
) )
cache.clear()
return HttpResponseRedirect("/dashboard/members") return HttpResponseRedirect("/dashboard/members")
context["form"] = form context["form"] = form
...@@ -72,6 +78,7 @@ def delete(request, id): ...@@ -72,6 +78,7 @@ def delete(request, id):
if request.method == "POST": if request.method == "POST":
member.delete() member.delete()
cache.clear()
return HttpResponseRedirect("/dashboard/members") return HttpResponseRedirect("/dashboard/members")
return render(request, "members.html", context) return render(request, "members.html", context)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment