add new site

This commit is contained in:
Kseninia Mikhaylova 2025-03-12 15:39:05 +03:00
parent 73a1b8032a
commit a3ebab0585
5 changed files with 72 additions and 19 deletions

View File

@ -51,6 +51,7 @@ class SeoAdmin(admin.ModelAdmin):
"""
return bool(obj.image)
@admin.register(Page)
class PageAdmin(admin.ModelAdmin):
"""
@ -65,6 +66,7 @@ class PageAdmin(admin.ModelAdmin):
"slug_preview", # Кастомное поле для предпросмотра slug
"has_image", # Кастомное поле для проверки наличия изображения
"external_link", # Внешняя ссылка
"site", # Новое поле для выбора сайта
)
# Поля, по которым можно выполнять поиск
@ -73,17 +75,27 @@ class PageAdmin(admin.ModelAdmin):
"title",
"slug",
"content",
"site", # Добавляем поиск по полю site
)
# Фильтры для боковой панели
list_filter = ("order",)
list_filter = (
"order",
"site", # Фильтр по сайту
)
# Поля, которые будут показаны в форме редактирования
fieldsets = (
(
"Основная информация",
{
"fields": ("order", "menu_title", "title", "slug"),
"fields": (
"order",
"menu_title",
"title",
"slug",
"site",
), # Добавляем site
},
),
(
@ -213,7 +225,7 @@ class Ref1CAdmin(admin.ModelAdmin):
"sync_enabled",
"default_value",
"last_sync_price",
"description",
"description",
"last_updated",
)
@ -235,7 +247,7 @@ class Ref1CAdmin(admin.ModelAdmin):
"sync_enabled",
"default_value",
"last_sync_price",
"description",
"description",
)
# Добавляем поле "последнее обновление" (только для чтения)
@ -255,6 +267,7 @@ class Ref1CAdmin(admin.ModelAdmin):
# Если вы хотите отслеживать время обновления, добавьте поле updated_at в модель
obj.save()
@admin.register(FooterModel)
class FooterModelAdmin(admin.ModelAdmin):
"""

View File

@ -107,6 +107,18 @@ class Page(models.Model):
verbose_name="Внешняя ссылка",
help_text="Введите внешнюю ссылку, если она есть",
)
SITE_CHOICES = [
("kupizabor", "Kupizabor"),
("kupiskamejka", "Kupiskamejka"),
]
site = models.CharField(
max_length=20,
choices=SITE_CHOICES,
verbose_name="Сайт",
help_text="Выберите сайт, к которому относится эта страница",
)
def __str__(self):
return f"{self.menu_title} #{self.slug} {self.order}"

View File

@ -45,6 +45,23 @@ class PageViewSet(viewsets.ModelViewSet):
serializer_class = PageSerializer
filter_backends = [filters.OrderingFilter]
lookup_field = 'slug'
def get_queryset(self):
"""
Фильтруем страницы на основе префикса из URL.
"""
# Получаем префикс из kwargs
prefix = self.kwargs.get("prefix")
if prefix == "gb":
# Для префикса /gb/ возвращаем все страницы
return Page.objects.all()
elif prefix == "kp":
# Для префикса /kp/ возвращаем только страницы с site="kupizabor"
return Page.objects.filter(site="kupizabor")
else:
# Если префикс неизвестен, возвращаем пустой queryset
return Page.objects.none()
class MenuViewSet(viewsets.ModelViewSet):

View File

@ -9,14 +9,14 @@ class BlockDirectAccessMiddleware(MiddlewareMixin):
self.get_response = get_response
def __call__(self, request):
referer = request.META.get("HTTP_REFERER") or ""
if (
'admin' in request.META.get("PATH_INFO")
and request.META.get("HTTP_HOST").split(':')[0] in settings.ALLOWED_HOSTS
):
return self.get_response(request)
# referer = request.META.get("HTTP_REFERER") or ""
# if (
# 'admin' in request.META.get("PATH_INFO")
# and request.META.get("HTTP_HOST").split(':')[0] in settings.ALLOWED_HOSTS
# ):
# return self.get_response(request)
if referer.strip("/") not in settings.CORS_ALLOWED_ORIGINS:
return HttpResponseForbidden("Direct access not allowed.")
# if referer.strip("/") not in settings.CORS_ALLOWED_ORIGINS:
# return HttpResponseForbidden("Direct access not allowed.")
return self.get_response(request)

View File

@ -25,16 +25,27 @@ from global_data import views as gd_views
site_prefix = "kp"
router = routers.DefaultRouter()
router.register(f"{site_prefix}/seo", gd_views.SeoViewSet)
router.register(f"{site_prefix}/kp", kp_views.KPViewSet)
router.register(f"{site_prefix}/pages", gd_views.PageViewSet)
router.register(f"{site_prefix}/menu", gd_views.MenuViewSet)
router.register(f"{site_prefix}/review", gd_views.ReviewViewSet)
router.register(f"{site_prefix}/calculator", kp_views.CalcViewSet)
router.register(f"{site_prefix}/advantage", kp_views.AdvantageViewSet)
router.register(f"{site_prefix}/footer", gd_views.FooterViewSet)
router.register(f"{site_prefix}/custom_request", gd_views.CustomRequestViewSet)
router.register(f"{site_prefix}/social_network", gd_views.SocialNetworkViewSet)
for p in [site_prefix, "gb"]:
router.register(f"{p}/seo", gd_views.SeoViewSet, basename=f"{p}_seo")
router.register(f"{p}/pages", gd_views.PageViewSet, basename=f"{p}_pages")
router.register(f"{p}/menu", gd_views.MenuViewSet, basename=f"{p}_menu")
router.register(f"{p}/review", gd_views.ReviewViewSet, basename=f"{p}_review")
router.register(f"{p}/footer", gd_views.FooterViewSet, basename=f"{p}_footer")
router.register(
f"{p}/custom_request",
gd_views.CustomRequestViewSet,
basename=f"{p}_custom_request",
)
router.register(
f"{p}/social_network",
gd_views.SocialNetworkViewSet,
basename=f"{p}_social_network",
)
urlpatterns = [
path("", include(router.urls)),