Browse Source

fix(hadis): resolve CORS preflight headers and query param normalization

- Allow 'cache-control' and 'pragma' headers in CORS_ALLOW_HEADERS to prevent CORS preflight errors on transmitter and hadith requests
- Support both 'hadis' and 'hadis_id' query parameters in AdminHadisCorrectionViewSet
- Support both 'category' and 'category_id' query parameters in AdminHadisInterpretationViewSet
- Support both 'hadis'/'hadis_id' and 'reference'/'reference_id' in AdminHadisReferenceImageViewSet upload handler
master
Mohsen Taba 3 weeks ago
parent
commit
e3da089b2c
  1. 8
      apps/hadis/views_admin.py
  2. 6
      config/settings/base.py

8
apps/hadis/views_admin.py

@ -414,7 +414,7 @@ class AdminHadisCorrectionViewSet(ModelViewSet):
queryset = HadisCorrection.objects.all().select_related("hadis").prefetch_related("references", "references__images").annotate( queryset = HadisCorrection.objects.all().select_related("hadis").prefetch_related("references", "references__images").annotate(
annotated_bookmark_count=Coalesce(Subquery(bookmarks_subquery, output_field=IntegerField()), 0) annotated_bookmark_count=Coalesce(Subquery(bookmarks_subquery, output_field=IntegerField()), 0)
) )
hadis_id = self.request.query_params.get("hadis_id")
hadis_id = self.request.query_params.get("hadis_id") or self.request.query_params.get("hadis")
if hadis_id: if hadis_id:
queryset = queryset.filter(hadis_id=hadis_id) queryset = queryset.filter(hadis_id=hadis_id)
search = self.request.query_params.get("search") search = self.request.query_params.get("search")
@ -475,7 +475,7 @@ class AdminHadisInterpretationViewSet(ModelViewSet):
def get_queryset(self): def get_queryset(self):
queryset = HadisInterpretation.objects.all().select_related("category").prefetch_related("references", "references__images") queryset = HadisInterpretation.objects.all().select_related("category").prefetch_related("references", "references__images")
category_id = self.request.query_params.get("category_id")
category_id = self.request.query_params.get("category_id") or self.request.query_params.get("category")
if category_id: if category_id:
queryset = queryset.filter(category_id=category_id) queryset = queryset.filter(category_id=category_id)
search = self.request.query_params.get("search") search = self.request.query_params.get("search")
@ -647,8 +647,8 @@ class AdminHadisReferenceImageViewSet(ModelViewSet):
return queryset.order_by("priority", "id") return queryset.order_by("priority", "id")
def create(self, request, *args, **kwargs): def create(self, request, *args, **kwargs):
hadis_id = request.data.get("hadis_id")
reference_id = request.data.get("reference_id")
hadis_id = request.data.get("hadis_id") or request.data.get("hadis")
reference_id = request.data.get("reference_id") or request.data.get("reference")
thumbnail = request.FILES.get("thumbnail") or request.FILES.get("image") thumbnail = request.FILES.get("thumbnail") or request.FILES.get("image")
priority = request.data.get("priority", 0) priority = request.data.get("priority", 0)

6
config/settings/base.py

@ -194,6 +194,12 @@ DATABASES = {
CORS_ALLOW_ALL_ORIGINS = True CORS_ALLOW_ALL_ORIGINS = True
from corsheaders.defaults import default_headers
CORS_ALLOW_HEADERS = list(default_headers) + [
'cache-control',
'pragma',
]
THUMBNAIL_ALIASES = { THUMBNAIL_ALIASES = {
'': { '': {

Loading…
Cancel
Save