mod: проверка статей-хабов
This commit is contained in:
@@ -1,15 +1,13 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from django.shortcuts import render, get_object_or_404, redirect
|
from django.shortcuts import render, get_object_or_404, redirect
|
||||||
from django.http import HttpRequest, HttpResponse, Http404
|
from django.http import HttpRequest, HttpResponse, Http404
|
||||||
|
|
||||||
from frontend.models import TbArticle
|
from frontend.models import TbArticle
|
||||||
|
from lpon_site.settings import *
|
||||||
|
import json
|
||||||
|
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
class BreadcrumbItem:
|
class BreadcrumbItem:
|
||||||
"""
|
"""
|
||||||
@@ -228,13 +226,33 @@ def hub_detail(request: HttpRequest, slug: str) -> HttpResponse:
|
|||||||
|
|
||||||
# Если статья не найдена — отдаём честный статус 404
|
# Если статья не найдена — отдаём честный статус 404
|
||||||
if not article:
|
if not article:
|
||||||
return render(request, "404.html", {"requested_slug": slug}, status=404)
|
amin_hint = (f"Статья или хаб со слагом «<strong>{ slug }</strong>» отсутствует в базе данных."
|
||||||
|
f" Создайте статью со слагом «<strong>{ slug }</strong>» (тип <code>HUB</code>)"
|
||||||
|
" в админис­тративной панели.")
|
||||||
|
return render(request, "404.html", {"amin_hint": amin_hint}, status=404)
|
||||||
# Если нашлась статья с таким слагом и она не HUB, то делаем канонический 301-редирект на собственную ветку роутинга
|
# Если нашлась статья с таким слагом и она не HUB, то делаем канонический 301-редирект на собственную ветку роутинга
|
||||||
# Предполагается, что у всех статей с типом ArticleType.INFO, ArticleType.TXT и т.д. есть роутинг в urls.py
|
# Предполагается, что у всех статей с типом ArticleType.INFO, ArticleType.TXT и т.д. есть роутинг в urls.py
|
||||||
elif article and article.l_article_type != TbArticle.ArticleType.HUB:
|
elif article and article.l_article_type != TbArticle.ArticleType.HUB:
|
||||||
return redirect(article.get_absolute_url(), permanent=True)
|
return redirect(article.get_absolute_url(), permanent=True)
|
||||||
|
|
||||||
|
# Проверяем, что в мета-данных j_article_metadata JSON-объект
|
||||||
|
try:
|
||||||
|
metadata = json.loads(article.j_article_metadata)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
amin_hint = (f"Статья со слагом «<strong>{ slug }</strong>» (<code>id={ article.id }</code>) объявлена"
|
||||||
|
f" как хаб, но в её мета-данных j_article_metadata не валидный JSON."
|
||||||
|
" Исправьте данные в административной панели.")
|
||||||
|
return render(request, "404.html", {"amin_hint": amin_hint}, status=404)
|
||||||
|
|
||||||
|
# Проверяем, что в мета-данных есть ключ HUB.
|
||||||
|
if KEY_ARTICLE_HUB not in metadata:
|
||||||
|
amin_hint = (f"Статья со слагом «<strong>{ slug }</strong>» (<code>id={ article.id }</code>) объявлена"
|
||||||
|
f" как хаб, но в её мета-данных нет ключа <code>{ KEY_ARTICLE_HUB }</code>"
|
||||||
|
" с описанием хаба. Внесите изменения в административной панели.")
|
||||||
|
return render(request, "404.html", {"amin_hint": amin_hint}, status=404)
|
||||||
|
|
||||||
# Это статья-ХАБ!! ТУТ будет сложный код, над которым я думаю.
|
# Это статья-ХАБ!! ТУТ будет сложный код, над которым я думаю.
|
||||||
|
|
||||||
context = {}
|
context = {}
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -342,6 +342,9 @@ KEY_IMAGE_NOTE = 'IMG_NOTE' # Ключ для хранения заметк
|
|||||||
KEY_OFFER_NOTE = 'OFR_NT' # Ключ для заметок по офферу (например, "замят угол конверта" и т.д.)
|
KEY_OFFER_NOTE = 'OFR_NT' # Ключ для заметок по офферу (например, "замят угол конверта" и т.д.)
|
||||||
KEY_OFFER_ALL_MEDIA = 'OFR_MF' # Ключ для хранения информации о том, какие носители входят в оффер (например, CD+2LP)
|
KEY_OFFER_ALL_MEDIA = 'OFR_MF' # Ключ для хранения информации о том, какие носители входят в оффер (например, CD+2LP)
|
||||||
|
|
||||||
|
# Ключи метанных статей (TbArticle).
|
||||||
|
KEY_ARTICLE_HUB = 'HUB' # Ключ для хранения информации о том, что статья является хабом (содержит ссылки на другие статьи)
|
||||||
|
|
||||||
|
|
||||||
# ДЛЯ ВАЛИДАЦИИ (поиска похожих исполнителей, стилей и т.д. (используется в TbLabel.matching_type, TbSeller.matching_type и т.д.)
|
# ДЛЯ ВАЛИДАЦИИ (поиска похожих исполнителей, стилей и т.д. (используется в TbLabel.matching_type, TbSeller.matching_type и т.д.)
|
||||||
VALIDATE_KEY__MATCH_TYPE = 'MATCH_TYPE'
|
VALIDATE_KEY__MATCH_TYPE = 'MATCH_TYPE'
|
||||||
|
|||||||
Reference in New Issue
Block a user