Features: 1) Enhance queryset filtering in get_queryset to include additional active checks for brand, category, stocks, and vendor; 2) Add caching and header variation for sitemap_index and sitemap_detail views; 3) Update sitemap limit settings for Category and Brand sitemaps to adjust capacity;
Fixes: 1) Replace usage of `slugify` with direct access to `obj.slug` in sitemap location methods; Extra: 1) Remove unused `slugify` import from `core/sitemaps.py`.
This commit is contained in:
parent
89301d6432
commit
b6983b63a3
3 changed files with 18 additions and 10 deletions
|
|
@ -1,5 +1,4 @@
|
|||
from django.contrib.sitemaps import Sitemap
|
||||
from django.utils.text import slugify
|
||||
|
||||
from core.models import Brand, Category, Product
|
||||
from evibes.settings import LANGUAGE_CODE
|
||||
|
|
@ -9,7 +8,7 @@ class ProductSitemap(Sitemap):
|
|||
protocol = "https"
|
||||
changefreq = "daily"
|
||||
priority = 0.9
|
||||
limit = 40000
|
||||
limit = 25000
|
||||
|
||||
def items(self):
|
||||
return (
|
||||
|
|
@ -33,7 +32,7 @@ class CategorySitemap(Sitemap):
|
|||
protocol = "https"
|
||||
changefreq = "weekly"
|
||||
priority = 0.7
|
||||
limit = 40000
|
||||
limit = 10000
|
||||
|
||||
def items(self):
|
||||
return Category.objects.filter(is_active=True).only("uuid", "name", "modified").order_by("-modified")
|
||||
|
|
@ -42,15 +41,14 @@ class CategorySitemap(Sitemap):
|
|||
return obj.modified
|
||||
|
||||
def location(self, obj):
|
||||
slug = slugify(obj.name)
|
||||
return f"/{LANGUAGE_CODE}/catalog/{obj.uuid}/{slug}"
|
||||
return f"/{LANGUAGE_CODE}/catalog/{obj.slug}"
|
||||
|
||||
|
||||
class BrandSitemap(Sitemap):
|
||||
protocol = "https"
|
||||
changefreq = "weekly"
|
||||
priority = 0.6
|
||||
limit = 40000
|
||||
limit = 10000
|
||||
|
||||
def items(self):
|
||||
return Brand.objects.filter(is_active=True).only("uuid", "name", "modified").order_by("-modified")
|
||||
|
|
@ -59,5 +57,4 @@ class BrandSitemap(Sitemap):
|
|||
return obj.modified
|
||||
|
||||
def location(self, obj):
|
||||
slug = slugify(obj.name)
|
||||
return f"/{LANGUAGE_CODE}/brand/{obj.uuid}/{slug}"
|
||||
return f"/{LANGUAGE_CODE}/brand/{obj.slug}"
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ from django.shortcuts import redirect
|
|||
from django.utils.encoding import force_str
|
||||
from django.utils.http import urlsafe_base64_decode
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.decorators.cache import cache_page
|
||||
from django.views.decorators.vary import vary_on_headers
|
||||
from django_ratelimit.decorators import ratelimit
|
||||
from djangorestframework_camel_case.render import CamelCaseJSONRenderer
|
||||
from djangorestframework_camel_case.util import camelize
|
||||
|
|
@ -52,6 +54,8 @@ from evibes.settings import LANGUAGES
|
|||
from payments.serializers import TransactionProcessSerializer
|
||||
|
||||
|
||||
@cache_page(60 * 60 * 12)
|
||||
@vary_on_headers("Host")
|
||||
def sitemap_index(request, *args, **kwargs):
|
||||
"""
|
||||
Handles the request for the sitemap index and returns an XML response. It ensures the response includes
|
||||
|
|
@ -70,7 +74,8 @@ def sitemap_index(request, *args, **kwargs):
|
|||
response["Content-Type"] = "application/xml; charset=utf-8"
|
||||
return response
|
||||
|
||||
|
||||
@cache_page(60 * 60 * 24)
|
||||
@vary_on_headers("Host")
|
||||
def sitemap_detail(request, *args, **kwargs):
|
||||
"""
|
||||
Handles the detailed view response for a sitemap. This function processes
|
||||
|
|
|
|||
|
|
@ -362,7 +362,13 @@ class ProductViewSet(EvibesViewSet):
|
|||
qs = super().get_queryset()
|
||||
if self.request.user.has_perm("core.view_product"):
|
||||
return qs
|
||||
return qs.filter(is_active=True)
|
||||
return qs.filter(
|
||||
is_active=True,
|
||||
brand__is_active=True,
|
||||
category__is_active=True,
|
||||
stocks__isnull=False,
|
||||
stocks__vendor__is_active=True,
|
||||
)
|
||||
|
||||
def get_object(self):
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
|
|
|
|||
Loading…
Reference in a new issue