Merge pull request #4 from Behruz-s-organization/dev

packagelarni ornatib sozlab chiqish kerak #2: issue bajarildi
This commit is contained in:
xolikberdiyev
2025-11-19 17:20:17 +05:00
committed by GitHub
9 changed files with 156 additions and 2 deletions

View File

@@ -25,4 +25,11 @@ PORT=
################## ##################
## RUNNING COMMAND ## RUNNING COMMAND
################## ##################
COMMAND=sh ./resources/scripts/entrypoint.sh COMMAND=sh ./resources/scripts/entrypoint.sh
##################
## CORS and CSRF
##################
CORS_ALLOWED_ORIGINS=
CSRF_TRUSTED_ORIGINS=

View File

@@ -0,0 +1,5 @@
from .djangorestframework import *
from .simple_jwt import *
from .jazzmin import *
from .cors_headers import *
from .redis import *

View File

@@ -0,0 +1,4 @@
from config.env import env
CORS_ALLOWED_ORIGINS = env.list('CORS_ALLOWED_ORIGINS')
CSRF_TRUSTED_ORIGINS = env.list('CSRF_TRUSTED_ORIGINS')

View File

@@ -0,0 +1,7 @@
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication'
'rest_framework_simplejwt.authentication.JWTAuthentication',
],
}

44
config/conf/jazzmin.py Normal file
View File

@@ -0,0 +1,44 @@
JAZZMIN_SETTINGS = {
"site_title": "Quruvchi Boshqaruv",
"site_header": "Quruvchi Boshqaruv",
"site_brand": "Quruvchi Boshqaruv",
"site_logo": None,
"login_logo": None,
"login_logo_dark": None,
"site_logo_classes": "img-circle",
"site_icon": None,
"welcome_sign": "Welcome to the Quruvchi Boshqaruv",
"copyright": "Quruvchi Boshqaruv",
"search_model": [],
"topmenu_links": [
{"name": "Home", "url": "admin:index", "permissions": ["auth.view_user"]},
{"name": "Support", "url": "https://github.com/farridav/django-jazzmin/issues", "new_window": True},
{"model": "auth.User"},
{"app": "books"},
],
"usermenu_links": [
{"name": "Support", "url": "https://github.com/farridav/django-jazzmin/issues", "new_window": True},
{"model": "auth.user"}
],
"show_sidebar": True,
"navigation_expanded": True,
"hide_apps": [],
"hide_models": ['auth.group'],
"order_with_respect_to": [],
"custom_links": {
},
"icons": {
"auth": "fas fa-users-cog",
"auth.user": "fas fa-user",
"auth.Group": "fas fa-users",
},
"default_icon_parents": "fas fa-chevron-circle-right",
"default_icon_children": "fas fa-circle",
"related_modal_active": False,
"custom_css": None,
"custom_js": None,
"use_google_fonts_cdn": True,
"show_ui_builder": False,
"changeform_format": "collapsible",
"language_chooser": True,
}

27
config/conf/simple_jwt.py Normal file
View File

@@ -0,0 +1,27 @@
from datetime import timedelta
from django.conf import settings
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(days=2),
"REFRESH_TOKEN_LIFETIME": timedelta(days=60),
"ROTATE_REFRESH_TOKENS": True,
"BLACKLIST_AFTER_ROTATION": True,
"UPDATE_LAST_LOGIN": True,
"ALGORITHM": "HS256",
"SIGNING_KEY": settings.SECRET_KEY,
"AUTH_HEADER_TYPES": ("Bearer",),
"AUTH_HEADER_NAME": "HTTP_AUTHORIZATION",
"USER_ID_FIELD": "id",
"USER_ID_CLAIM": "user_id",
"TOKEN_OBTAIN_SERIALIZER": "rest_framework_simplejwt.serializers.TokenObtainPairSerializer",
"TOKEN_REFRESH_SERIALIZER": "rest_framework_simplejwt.serializers.TokenRefreshSerializer",
"TOKEN_VERIFY_SERIALIZER": "rest_framework_simplejwt.serializers.TokenVerifySerializer",
"TOKEN_BLACKLIST_SERIALIZER": "rest_framework_simplejwt.serializers.TokenBlacklistSerializer",
"SLIDING_TOKEN_OBTAIN_SERIALIZER": "rest_framework_simplejwt.serializers.TokenObtainSlidingSerializer",
"SLIDING_TOKEN_REFRESH_SERIALIZER": "rest_framework_simplejwt.serializers.TokenRefreshSlidingSerializer",
}

View File

@@ -15,6 +15,7 @@ ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
# APPS # APPS
SHARED_APPS = [ SHARED_APPS = [
'django_tenants', 'django_tenants',
'jazzmin',
'core.apps.customers', 'core.apps.customers',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
] ]
@@ -31,7 +32,12 @@ TENANT_APPS = [
'core.apps.shared', 'core.apps.shared',
] ]
PACKAGES = [] PACKAGES = [
'corsheaders',
'rest_framework',
'rest_framework_simplejwt',
'drf_yasg',
]
INSTALLED_APPS = SHARED_APPS + DJANGO_APPS + PACKAGES + TENANT_APPS INSTALLED_APPS = SHARED_APPS + DJANGO_APPS + PACKAGES + TENANT_APPS
@@ -41,6 +47,7 @@ MIDDLEWARE = [
'django_tenants.middleware.main.TenantMainMiddleware', 'django_tenants.middleware.main.TenantMainMiddleware',
'django.middleware.security.SecurityMiddleware', 'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
@@ -117,3 +124,6 @@ DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
TENANT_MODEL = "customers.Client" TENANT_MODEL = "customers.Client"
TENANT_DOMAIN_MODEL = "customers.Domain" TENANT_DOMAIN_MODEL = "customers.Domain"
import config.conf

View File

@@ -1,13 +1,38 @@
# django
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
# rest framework
from rest_framework import permissions
# drf yasg
from drf_yasg.views import get_schema_view
from drf_yasg import openapi
schema_view = get_schema_view(
openapi.Info(
title="Qurilish Boshqaruv API",
default_version='v1',
description="Qurilish boshqaruv api",
terms_of_service="https://www.google.com/policies/terms/",
contact=openapi.Contact(email="xoliqberdiyevbehruz12@gmail.com"),
license=openapi.License(name="Behruz's-Organization License"),
),
public=False,
permission_classes=(permissions.IsAdminUser,),
)
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
] ]
urlpatterns += [
path('swagger<format>/', schema_view.without_ui(cache_timeout=0), name='schema-json'),
path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View File

@@ -1,11 +1,36 @@
amqp==5.3.1
asgiref==3.10.0 asgiref==3.10.0
billiard==4.2.3
celery==5.5.3
click==8.3.1 click==8.3.1
click-didyoumean==0.3.1
click-plugins==1.1.1.2
click-repl==0.3.0
Django==5.2 Django==5.2
django-cors-headers==4.9.0
django-environ==0.12.0 django-environ==0.12.0
django-filter==25.2
django-jazzmin==3.0.1
django-tenants==3.9.0 django-tenants==3.9.0
djangorestframework==3.16.1
djangorestframework_simplejwt==5.5.1
drf-yasg==1.21.11
gunicorn==23.0.0 gunicorn==23.0.0
h11==0.16.0 h11==0.16.0
inflection==0.5.1
kombu==5.5.4
packaging==25.0 packaging==25.0
prompt_toolkit==3.0.52
psycopg2-binary==2.9.11 psycopg2-binary==2.9.11
PyJWT==2.10.1
python-dateutil==2.9.0.post0
pytz==2025.2
PyYAML==6.0.3
redis==7.0.1
six==1.17.0
sqlparse==0.5.3 sqlparse==0.5.3
tzdata==2025.2
uritemplate==4.2.0
uvicorn==0.38.0 uvicorn==0.38.0
vine==5.1.0
wcwidth==0.2.14