I get /home/taskitly/taskily/venv/lib/python3.11/site-packages/django/db/backends/utils.py:98: RuntimeWarning: Accessing the database during app initialization is discouraged. To fix this warning, avoid executing queries in AppConfig.ready() or when your app modules are imported. warnings.warn(self.APPS_NOT_READY_WARNING_MSG, category=RuntimeWarning)
whenever I run manage.py makemigrations, migrate and celery.
Here’s my settings.py file
"""
Django settings for taskitly project.
Generated by 'django-admin startproject' using Django 4.2.6.
For more information on this file, see
https://docs.djangoproject.com/en/4.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.2/ref/settings/
"""
import os
from pathlib import Path
import zoneinfo
from cryptography.fernet import Fernet
from dotenv import load_dotenv
load_dotenv()
key = Fernet.generate_key()
ENCRYPTION_KEY = key
DEBUG = False
ALLOWED_HOSTS = ["taskitly.com", "www.taskitly.com", "api.taskitly.com", "www.api.taskitly.com"]
WSGI_APPLICATION = f'{os.getenv("PROJECT_NAME")}.wsgi.application'
SECRET_KEY = f'{os.getenv("SECRET_KEY")}'
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
# SECURITY WARNING: don't run with debug turned on in production!
#App Definitions
INSTALLED_APPS = [
#'jazzmin',
'daphne',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework.authtoken',
'rest_framework',
'channels',
'storages',
'push_notifications',
'dry_rest_permissions',
'debug_toolbar',
'django_filters',
"corsheaders",
'django_celery_results',
'drf_yasg',
'account',
'service',
'chat',
'wallet',
'notification',
]
# settings.py
def show_toolbar(request):
return True # Set this to True to show the toolbar for all requests (in development).
INTERNAL_IPS = [
# ...
'127.0.0.1',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
]
CELERY_BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Africa/Lagos'
CELERY_RESULT_BACKEND = 'django-db'
CORS_ALLOW_ALL_ORIGINS = True
ROOT_URLCONF = 'taskitly.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media',
],
},
},
]
# Database
# https://docs.djangoproject.com/en/4.2/ref/settings/#databases
ASGI_APPLICATION = 'taskitly.asgi.application'
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [('127.0.0.1', 6379)],
},
},
}
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
],
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.MultiPartParser',
],
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
'account.backends.CaseInsensitiveModelBackend',
'django.contrib.auth.backends.AllowAllUsersModelBackend',
],
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
'EXCEPTION_HANDLER': 'taskitly.custom_exception_handler.custom_exception_handler',
'MAX_UPLOAD_SIZE': '5242880', # Maximum upload size globally (5 MB in bytes)
}
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.AllowAllUsersModelBackend',
#'allauth.account.auth_backends.AuthenticationBackend',
'account.backends.CaseInsensitiveModelBackend'
)
# Database
# https://docs.djangoproject.com/en/4.1/ref/settings/#databases
DB_NAME = "dbName"
DB_USER = "username"
DB_PASSWORD = "password"
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': DB_NAME,
'USER': DB_USER,
'PASSWORD': DB_PASSWORD,
'HOST': 'localhost',
'PORT': '5432',
}
}
# Password validation
# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
]
AUTH_USER_MODEL = 'account.Account'
# Internationalization
# https://docs.djangoproject.com/en/4.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Africa/Lagos'
USE_I18N = True
USE_TZ = True
#DATA_UPLOAD_MAX_MEMORY_SIZE = 10485760
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.2/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = 'var/www/taskitly/static'
#MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_ROOT = '/var/opt/taskitly/media'
MEDIA_URL = '/media/'
"""MEDIAFILES_DIRS = [
os.path.join(BASE_DIR, "media")
]"""
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER')
EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD')
EMAIL_PORT = 587
EMAIL_USE_TLS = True
BASE_URL = "https://domain.com"
# Default primary key field type
# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
FORMATTERS = (
{
"verbose": {
"format": "{levelname} {asctime:s} {threadName} {thread:d} {module} {filename} {lineno:d} {name} {funcName} {process:d} {message}",
"style": "{",
},
"simple": {
"format": "{levelname} {asctime:s} {module} {filename} {lineno:d} {funcName} {message}",
"style": "{",
},
},
)
HANDLERS = {
"console_handler": {
"class": "logging.StreamHandler",
"formatter": "simple",
},
"my_handler": {
"class": "logging.handlers.RotatingFileHandler",
"filename": f"{BASE_DIR}/logs/taskitly.log",
"mode": "a",
"encoding": "utf-8",
"formatter": "simple",
"backupCount": 5,
"maxBytes": 1024 * 1024 * 5, # 5 MB
},
"my_handler_detailed": {
"class": "logging.handlers.RotatingFileHandler",
"filename": f"{BASE_DIR}/logs/taskitlydetailed.log",
"mode": "a",
"formatter": "verbose",
"backupCount": 5,
"maxBytes": 1024 * 1024 * 5, # 5 MB
},
}
LOGGERS = (
{
"django": {
"handlers": ["console_handler", "my_handler_detailed"],
"level": "INFO",
"propagate": False,
},
"django.request": {
"handlers": ["my_handler"],
"level": "WARNING",
"propagate": False,
},
},
)
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": FORMATTERS[0],
"handlers": HANDLERS,
"loggers": LOGGERS[0],
}
SWAGGER_SETTINGS = {
'SECURITY_DEFINITIONS': {
'Token': {
'type': 'apiKey',
'name': 'Authorization',
'in': 'header'
},
},
'USE_SESSION_AUTH': False
}
PUSH_NOTIFICATIONS_SETTINGS = {
"FCM_API_KEY": "AAAAe8lY-7E:APAsdvsdhTLyiSTvUnbmat2O24uTQ_w4RLkZL1B1CwfWl26W95SOZLAmGcV20Vd3FXQ-OSJ5HhuJKmE-QAgvn23n_PmztfnJ4mKYFqyKiWA3dOA5RoL-jh9gFRm2K0VfDZXCE6weZIJSXm",
"GCM_API_KEY": "AAAAe8lY-7E:APAsdvsdHTLyiSTvUnbmat2O24uTQ_w4RLkZL1B1CwfWl26W95SOZLAmGcV20Vd3FXQ-OSJ5HhuJKmE-QAgvn23n_PmztfnJ4mKYFqyKiWA3dOA5RoL-jh9gFRm2K0VfDZXCE6weZIJSXm",
"APNS_CERTIFICATE": "/home/taskitly/taskily/Authkey_2N8QL4USUS.pem",
"APNS_TOPIC": "com.example.push_test",
"APNS_USE_SANDBOX": "api.development.push.apple.com",
}
"""JAZZMIN_SETTINGS = {
# title of the window (Will default to current_admin_site.site_title if absent or None)
"site_title": "Taskitly",
# Title on the login screen (19 chars max) (defaults to current_admin_site.site_header if absent or None)
"site_header": "Taskitly",
# Title on the brand (19 chars max) (defaults to current_admin_site.site_header if absent or None)
"site_brand": "Taskitly",
# Logo to use for your site, must be present in static files, used for brand on top left
"site_logo": None,
# Logo to use for your site, must be present in static files, used for login form logo (defaults to site_logo)
"login_logo": None,
# Logo to use for login form in dark themes (defaults to login_logo)
"login_logo_dark": None,
# CSS classes that are applied to the logo above
"site_logo_classes": "img-circle",
# Relative path to a favicon for your site, will default to site_logo if absent (ideally 32x32 px)
"site_icon": None,
# Welcome text on the login screen
"welcome_sign": "Welcome back to Taskitly admin",
# Copyright on the footer
"copyright": "Taskitly",
# List of model admins to search from the search bar, search bar omitted if excluded
# If you want to use a single search field you dont need to use a list, you can use a simple string
"search_model": ["auth.User", "auth.Group"],
# Field name on user model that contains avatar ImageField/URLField/Charfield or a callable that receives the user
"user_avatar": None,
############
# Top Menu #
############
# Links to put along the top menu
"topmenu_links": [
# Url that gets reversed (Permissions can be added)
{"name": "Home", "url": "admin:index", "permissions": ["auth.view_user"]},
# external url that opens in a new window (Permissions can be added)
# {"name": "Support", "url": "https://github.com/farridav/django-jazzmin/issues", "new_window": True},
# model admin to link to (Permissions checked against model)
# {"model": "auth.User"},
# App with dropdown menu to all its models pages (Permissions checked against models)
# {"app": "books"},
],
#############
# User Menu #
#############
# Additional links to include in the user menu on the top right ("app" url type is not allowed)
# "usermenu_links": [
# {"name": "Support", "url": "https://github.com/farridav/django-jazzmin/issues", "new_window": True},
# {"model": "auth.user"}
# ],
#############
# Side Menu #
#############
# Whether to display the side menu
"show_sidebar": True,
# Whether to aut expand the menu
"navigation_expanded": True,
# Hide these apps when generating side menu e.g (auth)
"hide_apps": [],
# Hide these models when generating side menu (e.g auth.user)
"hide_models": [],
# List of apps (and/or models) to base side menu ordering off of (does not need to contain all apps/models)
"order_with_respect_to": ["auth", "books", "books.author", "books.book"],
# Custom links to append to app groups, keyed on app name
# "custom_links": {
# "books": [{
# "name": "Make Messages",
# "url": "make_messages",
# "icon": "fas fa-comments",
# "permissions": ["books.view_book"]
# }]
# },
# Custom icons for side menu apps/models See https://fontawesome.com/icons?d=gallery&m=free&v=5.0.0,5.0.1,5.0.10,5.0.11,5.0.12,5.0.13,5.0.2,5.0.3,5.0.4,5.0.5,5.0.6,5.0.7,5.0.8,5.0.9,5.1.0,5.1.1,5.2.0,5.3.0,5.3.1,5.4.0,5.4.1,5.4.2,5.13.0,5.12.0,5.11.2,5.11.1,5.10.0,5.9.0,5.8.2,5.8.1,5.7.2,5.7.1,5.7.0,5.6.3,5.5.0,5.4.2
# for the full list of 5.13.0 free icon classes
"icons": {
"auth": "fas fa-users-cog",
"auth.user": "fas fa-user",
"auth.Group": "fas fa-users",
},
# Icons that are used when one is not manually specified
"default_icon_parents": "fas fa-chevron-circle-right",
"default_icon_children": "fas fa-circle",
#################
# Related Modal #
#################
# Use modals instead of popups
"related_modal_active": True,
#############
# UI Tweaks #
#############
# Relative paths to custom CSS/JS scripts (must be present in static files)
"custom_css": None,
"custom_js": None,
# Whether to link font from fonts.googleapis.com (use custom_css to supply font otherwise)
"use_google_fonts_cdn": True,
# Whether to show the UI customizer on the sidebar
"show_ui_builder": False,
###############
# Change view #
###############
# Render out the change view as a single form, or in tabs, current options are
# - single
# - horizontal_tabs (default)
# - vertical_tabs
# - collapsible
# - carousel
"changeform_format": "horizontal_tabs",
# override change forms on a per modeladmin basis
"changeform_format_overrides": {"auth.user": "collapsible", "auth.group": "vertical_tabs"},
# Add a language dropdown into the admin
"language_chooser": False,
}
JAZZMIN_UI_TWEAKS = {
"navbar_small_text": False,
"footer_small_text": False,
"body_small_text": False,
"brand_small_text": False,
"brand_colour": False,
"accent": "accent-success",
"navbar": "navbar-success navbar-dark",
"no_navbar_border": False,
"navbar_fixed": False,
"layout_boxed": False,
"footer_fixed": False,
"sidebar_fixed": False,
"sidebar": "sidebar-light-success",
"sidebar_nav_small_text": False,
"sidebar_disable_expand": False,
"sidebar_nav_child_indent": False,
"sidebar_nav_compact_style": False,
"sidebar_nav_legacy_style": False,
"sidebar_nav_flat_style": False,
"theme": "default",
"dark_mode_theme": None,
"button_classes": {
"primary": "btn-success",
"secondary": "btn-secondary",
"info": "btn-info",
"warning": "btn-warning",
"danger": "btn-danger",
"success": "btn-success"
}
}
"""