16 changed files with 2362 additions and 235 deletions
-
10apps/account/middleware/admin_access.py
-
4apps/account/serializers/user.py
-
1660apps/course/services/api.md
-
153apps/course/views/course.py
-
267apps/course/views/live_session.py
-
5config/enhanced_auth_middleware.py
-
22config/middleware/__init__.py
-
32config/middleware/site_middleware.py
-
1config/settings/base.py
-
20config/urls.py
-
26config/urls_dovoodi.py
-
26config/urls_imamjavad.py
-
19nginx/dovodi.conf
-
223nginx/imamjavad.conf
-
21utils/admin.py
-
42utils/redis.py
1660
apps/course/services/api.md
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,22 @@ |
|||
""" |
|||
Middleware utilities and helpers |
|||
""" |
|||
|
|||
|
|||
def get_admin_namespace(request): |
|||
""" |
|||
Determine the admin namespace based on the request domain. |
|||
Returns the appropriate admin namespace for use in reverse() calls. |
|||
|
|||
Usage: |
|||
from config.middleware import get_admin_namespace |
|||
admin_ns = get_admin_namespace(request) |
|||
url = reverse(f'{admin_ns}:model_changelist') |
|||
""" |
|||
host = request.get_host() |
|||
|
|||
# Check if the request is from Dovoodi domain |
|||
if 'dovodi' in host or 'dovoodi' in host: |
|||
return 'dovoodi_admin' |
|||
else: |
|||
return 'imam_javad_admin' |
|||
@ -0,0 +1,32 @@ |
|||
""" |
|||
Domain-based URL Configuration Middleware |
|||
|
|||
This middleware detects the request domain and routes to the appropriate |
|||
URLconf (URL configuration) for each site: |
|||
- Dovoodi domains → config.urls_dovoodi |
|||
- Imam Javad domains → config.urls_imamjavad |
|||
""" |
|||
|
|||
|
|||
class SiteMiddleware: |
|||
""" |
|||
Middleware to route requests to different URL configurations based on domain. |
|||
|
|||
This allows each domain to have clean /admin/ URLs instead of path-based |
|||
differentiation (/imam-javad/admin vs /dovoodi/admin). |
|||
""" |
|||
|
|||
def __init__(self, get_response): |
|||
self.get_response = get_response |
|||
|
|||
def __call__(self, request): |
|||
host = request.get_host() |
|||
|
|||
# Check if the request is from Dovoodi domain |
|||
if 'dovodi' in host or 'dovoodi' in host: |
|||
request.urlconf = 'config.urls_dovoodi' |
|||
# Otherwise, use Imam Javad configuration (default) |
|||
else: |
|||
request.urlconf = 'config.urls_imamjavad' |
|||
|
|||
return self.get_response(request) |
|||
@ -0,0 +1,26 @@ |
|||
""" |
|||
URL configuration for Dovoodi domain |
|||
This configuration is loaded when accessing from dovodi.* or dovoodi.* domains |
|||
""" |
|||
from django.urls import path, include |
|||
from django.conf.urls.i18n import i18n_patterns |
|||
from config.urls import urlpatterns as base_urlpatterns, swagger_urlpatterns |
|||
from utils.admin import dovoodi_admin_site |
|||
from apps.api.views import CustomAPIDocumentationView |
|||
|
|||
|
|||
# Combine base patterns with Dovoodi specific admin |
|||
urlpatterns = base_urlpatterns + i18n_patterns( |
|||
# Admin panel accessible at /admin/ (Django will redirect to /en/admin/ or /fa/admin/) |
|||
path("admin/", dovoodi_admin_site.urls), |
|||
|
|||
# API documentation |
|||
path('docs/', CustomAPIDocumentationView.as_view(), name='docs-index'), |
|||
|
|||
# Swagger and API documentation |
|||
*swagger_urlpatterns, |
|||
|
|||
# Filer (Django file manager) |
|||
path('admin/filer/', include('filer.urls')), |
|||
path('filer/', include('filer.urls')), |
|||
) |
|||
@ -0,0 +1,26 @@ |
|||
""" |
|||
URL configuration for Imam Javad domain |
|||
This configuration is loaded when accessing from imamjavad.* domains |
|||
""" |
|||
from django.urls import path, include |
|||
from django.conf.urls.i18n import i18n_patterns |
|||
from config.urls import urlpatterns as base_urlpatterns, swagger_urlpatterns |
|||
from utils.admin import project_admin_site |
|||
from apps.api.views import CustomAPIDocumentationView |
|||
|
|||
|
|||
# Combine base patterns with Imam Javad specific admin |
|||
urlpatterns = base_urlpatterns + i18n_patterns( |
|||
# Admin panel accessible at /admin/ (Django will redirect to /en/admin/ or /fa/admin/) |
|||
path("admin/", project_admin_site.urls), |
|||
|
|||
# API documentation |
|||
path('docs/', CustomAPIDocumentationView.as_view(), name='docs-index'), |
|||
|
|||
# Swagger and API documentation |
|||
*swagger_urlpatterns, |
|||
|
|||
# Filer (Django file manager) |
|||
path('admin/filer/', include('filer.urls')), |
|||
path('filer/', include('filer.urls')), |
|||
) |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue