29 lines
969 B
Python
29 lines
969 B
Python
from .models import Page
|
|
from django.http import HttpResponse
|
|
from django.db import connections
|
|
from django.shortcuts import get_object_or_404
|
|
import markdown
|
|
from django.core.cache import caches
|
|
from threading import Lock
|
|
|
|
md = markdown.Markdown()
|
|
md_lock = Lock()
|
|
|
|
def search(request):
|
|
with connections["default"].cursor() as cursor:
|
|
cursor.execute("SELECT rowid FROM search_index WHERE search_index = %s;", ["content"])
|
|
row = cursor.fetchone()
|
|
pages = Page.objects.filter(id__in=row)
|
|
return HttpResponse(str(pages), content_type="text/plain")
|
|
|
|
|
|
def content(request, slug):
|
|
page = get_object_or_404(Page, slug=slug)
|
|
|
|
if (cached_content := caches["default"].get(f"page-content-{slug}")) is None:
|
|
with md_lock:
|
|
cached_content = md.convert(page.content)
|
|
md.reset()
|
|
caches["default"].set(f"page-content-{slug}", cached_content)
|
|
|
|
return HttpResponse(cached_content, content_type="text/html")
|