import socket from pathlib import Path import environ import os import logging import sys env = environ.Env( DEBUG=(bool, False) ) # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent # Take environment variables from .env file environ.Env.read_env(os.path.join(BASE_DIR, '.env')) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/ # https://docs.djangoproject.com/en/dev/ref/settings/#secret-key # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = env('SECRET_KEY') # Resend API Key RESEND_API_KEY = env('RESEND_API_KEY') # https://docs.djangoproject.com/en/dev/ref/settings/#debug # SECURITY WARNING: don't run with debug turned on in production! DEBUG = env('DEBUG') LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s', }, }, 'handlers': { 'console': { 'level': 'WARN', 'class': 'logging.StreamHandler', 'stream': sys.stdout, 'formatter': 'verbose' }, }, 'loggers': { '': { 'handlers': ['console'], 'level': 'WARN', 'propagate': True, }, }, } # https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts ALLOWED_HOSTS = env('ALLOWED_HOSTS').split(',') CSRF_TRUSTED_ORIGINS = env('CSRF_TRUSTED_ORIGINS').split(',') # Application definition # https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps INSTALLED_APPS = [ "django_daisy", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "whitenoise.runserver_nostatic", "django.contrib.staticfiles", "django.contrib.sites", "allauth", "allauth.account", 'allauth.socialaccount.providers.google', "crispy_forms", "crispy_tailwind", "debug_toolbar", "el_pagination", "tailwind", "theme", "django_browser_reload", "common", "accounts", "cards", "home", "trades", "meta", ] TAILWIND_APP_NAME = 'theme' META_SITE_NAME = 'PKMN Trade Club' META_SITE_PROTOCOL = 'https' META_USE_SITES = True META_IMAGE_URL = 'https://pkmntrade.club/' # https://docs.djangoproject.com/en/dev/ref/settings/#middleware MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "whitenoise.middleware.WhiteNoiseMiddleware", # WhiteNoise "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "debug_toolbar.middleware.DebugToolbarMiddleware", # Django Debug Toolbar "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", "allauth.account.middleware.AccountMiddleware", # django-allauth "django_browser_reload.middleware.BrowserReloadMiddleware", ] DAISY_SETTINGS = { 'SITE_TITLE': 'PKMN Trade Club Admin', 'DONT_SUPPORT_ME': True, } # https://docs.djangoproject.com/en/dev/ref/settings/#root-urlconf ROOT_URLCONF = "django_project.urls" # https://docs.djangoproject.com/en/dev/ref/settings/#wsgi-application WSGI_APPLICATION = "django_project.wsgi.application" # https://docs.djangoproject.com/en/dev/ref/settings/#templates TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [BASE_DIR / "theme/templates", BASE_DIR / "theme"], "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", ], }, }, ] # https://docs.djangoproject.com/en/dev/ref/settings/#databases DATABASES = { 'default': env.db(), } # Password validation # https://docs.djangoproject.com/en/dev/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", }, ] # Internationalization # https://docs.djangoproject.com/en/dev/topics/i18n/ # https://docs.djangoproject.com/en/dev/ref/settings/#language-code LANGUAGE_CODE = "en-us" # https://docs.djangoproject.com/en/dev/ref/settings/#time-zone TIME_ZONE = "UTC" # https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-USE_I18N USE_I18N = True # https://docs.djangoproject.com/en/dev/ref/settings/#use-tz USE_TZ = True # https://docs.djangoproject.com/en/dev/ref/settings/#locale-paths LOCALE_PATHS = [BASE_DIR / 'locale'] # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/5.0/howto/static-files/ # https://docs.djangoproject.com/en/dev/ref/settings/#static-root STATIC_ROOT = BASE_DIR / "staticfiles" # https://docs.djangoproject.com/en/dev/ref/settings/#static-url STATIC_URL = "/static/" # https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS STATICFILES_DIRS = [] # https://docs.djangoproject.com/en/dev/ref/settings/#media-root MEDIA_ROOT = BASE_DIR / "media" # https://docs.djangoproject.com/en/dev/ref/settings/#media-url MEDIA_URL = "/media/" # https://whitenoise.readthedocs.io/en/latest/django.html STORAGES = { "default": { "BACKEND": "django.core.files.storage.FileSystemStorage", }, "staticfiles": { "BACKEND": "whitenoise.storage.CompressedStaticFilesStorage", }, } # Default primary key field type # https://docs.djangoproject.com/en/stable/ref/settings/#default-auto-field DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' # django-crispy-forms # https://django-crispy-forms.readthedocs.io/en/latest/install.html#template-packs CRISPY_ALLOWED_TEMPLATE_PACKS = 'tailwind' CRISPY_TEMPLATE_PACK = "tailwind" # https://docs.djangoproject.com/en/dev/ref/settings/#email-backend EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" EMAIL_HOST = "smtp.resend.com" EMAIL_PORT = 587 EMAIL_HOST_USER = "resend" EMAIL_HOST_PASSWORD = RESEND_API_KEY EMAIL_USE_TLS = True # https://docs.djangoproject.com/en/dev/ref/settings/#default-from-email DEFAULT_FROM_EMAIL = "noreply@pkmntrade.club" # django-debug-toolbar # https://django-debug-toolbar.readthedocs.io/en/latest/installation.html # https://docs.djangoproject.com/en/dev/ref/settings/#internal-ips INTERNAL_IPS = [ "127.0.0.1", ] # for docker development hostname, _, ips = socket.gethostbyname_ex(socket.gethostname()) INTERNAL_IPS.append([ip[:-1] + "1" for ip in ips]) # https://docs.djangoproject.com/en/dev/topics/auth/customizing/#substituting-a-custom-user-model AUTH_USER_MODEL = "accounts.CustomUser" # django-allauth config # https://docs.djangoproject.com/en/dev/ref/settings/#site-id SITE_ID = 1 # https://docs.djangoproject.com/en/dev/ref/settings/#login-redirect-url LOGIN_REDIRECT_URL = "home" # https://django-allauth.readthedocs.io/en/latest/views.html#logout-account-logout ACCOUNT_LOGOUT_REDIRECT_URL = "home" # https://django-allauth.readthedocs.io/en/latest/installation.html?highlight=backends AUTHENTICATION_BACKENDS = ( "django.contrib.auth.backends.ModelBackend", "allauth.account.auth_backends.AuthenticationBackend", ) # https://django-allauth.readthedocs.io/en/latest/configuration.html ACCOUNT_SESSION_REMEMBER = True ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE = True ACCOUNT_AUTHENTICATION_METHOD = "username_email" ACCOUNT_EMAIL_REQUIRED = True ACCOUNT_EMAIL_VERIFICATION = env('ACCOUNT_EMAIL_VERIFICATION') ACCOUNT_EMAIL_NOTIFICATIONS = True ACCOUNT_DEFAULT_HTTP_PROTOCOL = "https" ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION = True ACCOUNT_USERNAME_MIN_LENGTH = 3 ACCOUNT_CHANGE_EMAIL = True ACCOUNT_UNIQUE_EMAIL = True ACCOUNT_LOGIN_BY_CODE_ENABLED = True ACCOUNT_SIGNUP_FORM_HONEYPOT_FIELD = "website" ACCOUNT_USERNAME_REQUIRED = True ACCOUNT_FORMS = { "signup": "accounts.forms.CustomUserCreationForm", } SOCIALACCOUNT_EMAIL_AUTHENTICATION = False SOCIALACCOUNT_EMAIL_AUTHENTICATION_AUTO_CONNECT = False SOCIALACCOUNT_ONLY = False if DEBUG: CACHES = { "default": { "BACKEND": "django.core.cache.backends.dummy.DummyCache", } } else: CACHES = { "default": { "BACKEND": "django.core.cache.backends.db.DatabaseCache", "LOCATION": "django_cache", } }