Rename settings.py -> settings.example.py

When a new deployment is created, or when new settings are added, we
want to avoid overwriting settings that may already be present. So we
use the settings.example.py file for default settings and settings.py
for deployment settings instead.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2022-07-17 19:55:43 -07:00
parent 08acfa327c
commit 258b8b955b
2 changed files with 1 additions and 0 deletions

View File

@@ -0,0 +1,189 @@
"""
Django settings for threadchat project.
Generated by 'django-admin startproject' using Django 4.0.4.
For more information on this file, see
https://docs.djangoproject.com/en/4.0/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/4.0/ref/settings/
"""
from pathlib import Path
from typing import Sequence
import environ
env = environ.Env()
environ.Env.read_env()
# 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.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env("SECRET_KEY")
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
with open("ALLOWED_HOSTS") as fp:
ALLOWED_HOSTS: Sequence[str] = list(filter(len, map(str.strip, fp)))
# Application definition
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"django_minify_html",
"guardian",
"colorfield",
"board",
]
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"django_minify_html.middleware.MinifyHtmlMiddleware",
]
ROOT_URLCONF = "threadchat.urls"
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [],
"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",
"board.context_processors.settings",
"board.context_processors.boards",
],
},
},
]
WSGI_APPLICATION = "threadchat.wsgi.application"
AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend",
"guardian.backends.ObjectPermissionBackend",
)
# Database
# https://docs.djangoproject.com/en/4.0/ref/settings/#databases
DATABASES = {
"default": {
"ENGINE": "django.db.backends.sqlite3",
"NAME": BASE_DIR / "db.sqlite3",
}
}
# Password validation
# https://docs.djangoproject.com/en/4.0/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/4.0/topics/i18n/
LANGUAGE_CODE = "en-us"
TIME_ZONE = "US/Pacific"
USE_I18N = True
USE_TZ = True
GUARDIAN_RENDER_403 = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.0/howto/static-files/
STATIC_URL = "static/"
# Default primary key field type
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-field
# X-Frame-Options header from XFrameOptionsMiddleware
X_FRAME_OPTIONS = "SAMEORIGIN"
DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField"
# Site name
SITE_NAME = "interchan"
# Media root - where media files are stored on the disk
MEDIA_ROOT = "media/"
# Media URL - the URL where media is served from
MEDIA_URL = "media/"
# Thumbnail size in pixels.
THUMB_SIZE = (200, 200)
# Max upload size in bytes.
MAX_UPLOAD_SIZE = 25 * 1024**2
# Whether to use HCAPTCHA or not.
USE_HCAPTCHA = False
if USE_HCAPTCHA:
INSTALLED_APPS += ["hcaptcha"]
HCAPTCHA_SITEKEY = env("HCAPTCHA_SITEKEY")
HCAPTCHA_SECRET = env("HCAPTCHA_SECRET")
# How many seconds to wait before closing the report window after a report is
# created.
# By default, wait 3 seconds. This should give users plenty of time to read it.
REPORT_WINDOW_CLOSE_TIMEOUT = 3
# How many seconds to wait before closing the ban window after a ban is created.
# By default, wait 0 seconds and close immediately. It is assumed that the ban
# is created successfully, and if an error occurs, the window won't close anyway.
ACTION_SUCCESS_CLOSE_TIMEOUT = 0
# How many seconds to wait before closing the new post window after a post is
# created.
# By default, wait 0 seconds. If there is an error, the window won't close
# because it will be redirected elsewhere.
POST_WINDOW_CLOSE_TIMEOUT = 0
# This is the length of a user's token, which is held in a server-side session.
# This token is used to identify a user's individual web client, outside of IP
# address. You probably don't need to change this.
# It should be at most 30, and probably at least 10.
USER_TOKEN_LENGTH = 30