上传文件至 'test/Django-2.1.15/django/conf'
This commit is contained in:
parent
4359bd43f3
commit
c72b2519b2
|
@ -0,0 +1,201 @@
|
||||||
|
"""
|
||||||
|
Settings and configuration for Django.
|
||||||
|
|
||||||
|
Read values from the module specified by the DJANGO_SETTINGS_MODULE environment
|
||||||
|
variable, and then from django.conf.global_settings; see the global_settings.py
|
||||||
|
for a list of all possible variables.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import importlib
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
import warnings
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from django.conf import global_settings
|
||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
from django.utils.deprecation import RemovedInDjango30Warning
|
||||||
|
from django.utils.functional import LazyObject, empty
|
||||||
|
|
||||||
|
ENVIRONMENT_VARIABLE = "DJANGO_SETTINGS_MODULE"
|
||||||
|
|
||||||
|
|
||||||
|
class LazySettings(LazyObject):
|
||||||
|
"""
|
||||||
|
A lazy proxy for either global Django settings or a custom settings object.
|
||||||
|
The user can manually configure settings prior to using them. Otherwise,
|
||||||
|
Django uses the settings module pointed to by DJANGO_SETTINGS_MODULE.
|
||||||
|
"""
|
||||||
|
def _setup(self, name=None):
|
||||||
|
"""
|
||||||
|
Load the settings module pointed to by the environment variable. This
|
||||||
|
is used the first time settings are needed, if the user hasn't
|
||||||
|
configured settings manually.
|
||||||
|
"""
|
||||||
|
settings_module = os.environ.get(ENVIRONMENT_VARIABLE)
|
||||||
|
if not settings_module:
|
||||||
|
desc = ("setting %s" % name) if name else "settings"
|
||||||
|
raise ImproperlyConfigured(
|
||||||
|
"Requested %s, but settings are not configured. "
|
||||||
|
"You must either define the environment variable %s "
|
||||||
|
"or call settings.configure() before accessing settings."
|
||||||
|
% (desc, ENVIRONMENT_VARIABLE))
|
||||||
|
|
||||||
|
self._wrapped = Settings(settings_module)
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
# Hardcode the class name as otherwise it yields 'Settings'.
|
||||||
|
if self._wrapped is empty:
|
||||||
|
return '<LazySettings [Unevaluated]>'
|
||||||
|
return '<LazySettings "%(settings_module)s">' % {
|
||||||
|
'settings_module': self._wrapped.SETTINGS_MODULE,
|
||||||
|
}
|
||||||
|
|
||||||
|
def __getattr__(self, name):
|
||||||
|
"""Return the value of a setting and cache it in self.__dict__."""
|
||||||
|
if self._wrapped is empty:
|
||||||
|
self._setup(name)
|
||||||
|
val = getattr(self._wrapped, name)
|
||||||
|
self.__dict__[name] = val
|
||||||
|
return val
|
||||||
|
|
||||||
|
def __setattr__(self, name, value):
|
||||||
|
"""
|
||||||
|
Set the value of setting. Clear all cached values if _wrapped changes
|
||||||
|
(@override_settings does this) or clear single values when set.
|
||||||
|
"""
|
||||||
|
if name == '_wrapped':
|
||||||
|
self.__dict__.clear()
|
||||||
|
else:
|
||||||
|
self.__dict__.pop(name, None)
|
||||||
|
super().__setattr__(name, value)
|
||||||
|
|
||||||
|
def __delattr__(self, name):
|
||||||
|
"""Delete a setting and clear it from cache if needed."""
|
||||||
|
super().__delattr__(name)
|
||||||
|
self.__dict__.pop(name, None)
|
||||||
|
|
||||||
|
def configure(self, default_settings=global_settings, **options):
|
||||||
|
"""
|
||||||
|
Called to manually configure the settings. The 'default_settings'
|
||||||
|
parameter sets where to retrieve any unspecified values from (its
|
||||||
|
argument must support attribute access (__getattr__)).
|
||||||
|
"""
|
||||||
|
if self._wrapped is not empty:
|
||||||
|
raise RuntimeError('Settings already configured.')
|
||||||
|
holder = UserSettingsHolder(default_settings)
|
||||||
|
for name, value in options.items():
|
||||||
|
setattr(holder, name, value)
|
||||||
|
self._wrapped = holder
|
||||||
|
|
||||||
|
@property
|
||||||
|
def configured(self):
|
||||||
|
"""Return True if the settings have already been configured."""
|
||||||
|
return self._wrapped is not empty
|
||||||
|
|
||||||
|
|
||||||
|
class Settings:
|
||||||
|
def __init__(self, settings_module):
|
||||||
|
# update this dict from global settings (but only for ALL_CAPS settings)
|
||||||
|
for setting in dir(global_settings):
|
||||||
|
if setting.isupper():
|
||||||
|
setattr(self, setting, getattr(global_settings, setting))
|
||||||
|
|
||||||
|
# store the settings module in case someone later cares
|
||||||
|
self.SETTINGS_MODULE = settings_module
|
||||||
|
|
||||||
|
mod = importlib.import_module(self.SETTINGS_MODULE)
|
||||||
|
|
||||||
|
tuple_settings = (
|
||||||
|
"INSTALLED_APPS",
|
||||||
|
"TEMPLATE_DIRS",
|
||||||
|
"LOCALE_PATHS",
|
||||||
|
)
|
||||||
|
self._explicit_settings = set()
|
||||||
|
for setting in dir(mod):
|
||||||
|
if setting.isupper():
|
||||||
|
setting_value = getattr(mod, setting)
|
||||||
|
|
||||||
|
if (setting in tuple_settings and
|
||||||
|
not isinstance(setting_value, (list, tuple))):
|
||||||
|
raise ImproperlyConfigured("The %s setting must be a list or a tuple. " % setting)
|
||||||
|
setattr(self, setting, setting_value)
|
||||||
|
self._explicit_settings.add(setting)
|
||||||
|
|
||||||
|
if not self.SECRET_KEY:
|
||||||
|
raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
|
||||||
|
|
||||||
|
if self.is_overridden('DEFAULT_CONTENT_TYPE'):
|
||||||
|
warnings.warn('The DEFAULT_CONTENT_TYPE setting is deprecated.', RemovedInDjango30Warning)
|
||||||
|
|
||||||
|
if hasattr(time, 'tzset') and self.TIME_ZONE:
|
||||||
|
# When we can, attempt to validate the timezone. If we can't find
|
||||||
|
# this file, no check happens and it's harmless.
|
||||||
|
zoneinfo_root = Path('/usr/share/zoneinfo')
|
||||||
|
zone_info_file = zoneinfo_root.joinpath(*self.TIME_ZONE.split('/'))
|
||||||
|
if zoneinfo_root.exists() and not zone_info_file.exists():
|
||||||
|
raise ValueError("Incorrect timezone setting: %s" % self.TIME_ZONE)
|
||||||
|
# Move the time zone info into os.environ. See ticket #2315 for why
|
||||||
|
# we don't do this unconditionally (breaks Windows).
|
||||||
|
os.environ['TZ'] = self.TIME_ZONE
|
||||||
|
time.tzset()
|
||||||
|
|
||||||
|
def is_overridden(self, setting):
|
||||||
|
return setting in self._explicit_settings
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<%(cls)s "%(settings_module)s">' % {
|
||||||
|
'cls': self.__class__.__name__,
|
||||||
|
'settings_module': self.SETTINGS_MODULE,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class UserSettingsHolder:
|
||||||
|
"""Holder for user configured settings."""
|
||||||
|
# SETTINGS_MODULE doesn't make much sense in the manually configured
|
||||||
|
# (standalone) case.
|
||||||
|
SETTINGS_MODULE = None
|
||||||
|
|
||||||
|
def __init__(self, default_settings):
|
||||||
|
"""
|
||||||
|
Requests for configuration variables not in this class are satisfied
|
||||||
|
from the module specified in default_settings (if possible).
|
||||||
|
"""
|
||||||
|
self.__dict__['_deleted'] = set()
|
||||||
|
self.default_settings = default_settings
|
||||||
|
|
||||||
|
def __getattr__(self, name):
|
||||||
|
if name in self._deleted:
|
||||||
|
raise AttributeError
|
||||||
|
return getattr(self.default_settings, name)
|
||||||
|
|
||||||
|
def __setattr__(self, name, value):
|
||||||
|
self._deleted.discard(name)
|
||||||
|
if name == 'DEFAULT_CONTENT_TYPE':
|
||||||
|
warnings.warn('The DEFAULT_CONTENT_TYPE setting is deprecated.', RemovedInDjango30Warning)
|
||||||
|
super().__setattr__(name, value)
|
||||||
|
|
||||||
|
def __delattr__(self, name):
|
||||||
|
self._deleted.add(name)
|
||||||
|
if hasattr(self, name):
|
||||||
|
super().__delattr__(name)
|
||||||
|
|
||||||
|
def __dir__(self):
|
||||||
|
return sorted(
|
||||||
|
s for s in list(self.__dict__) + dir(self.default_settings)
|
||||||
|
if s not in self._deleted
|
||||||
|
)
|
||||||
|
|
||||||
|
def is_overridden(self, setting):
|
||||||
|
deleted = (setting in self._deleted)
|
||||||
|
set_locally = (setting in self.__dict__)
|
||||||
|
set_on_default = getattr(self.default_settings, 'is_overridden', lambda s: False)(setting)
|
||||||
|
return deleted or set_locally or set_on_default
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return '<%(cls)s>' % {
|
||||||
|
'cls': self.__class__.__name__,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
settings = LazySettings()
|
|
@ -0,0 +1,635 @@
|
||||||
|
"""
|
||||||
|
Default Django settings. Override these with settings in the module pointed to
|
||||||
|
by the DJANGO_SETTINGS_MODULE environment variable.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
# This is defined here as a do-nothing function because we can't import
|
||||||
|
# django.utils.translation -- that module depends on the settings.
|
||||||
|
def gettext_noop(s):
|
||||||
|
return s
|
||||||
|
|
||||||
|
|
||||||
|
####################
|
||||||
|
# CORE #
|
||||||
|
####################
|
||||||
|
|
||||||
|
DEBUG = False
|
||||||
|
|
||||||
|
# Whether the framework should propagate raw exceptions rather than catching
|
||||||
|
# them. This is useful under some testing situations and should never be used
|
||||||
|
# on a live site.
|
||||||
|
DEBUG_PROPAGATE_EXCEPTIONS = False
|
||||||
|
|
||||||
|
# People who get code error notifications.
|
||||||
|
# In the format [('Full Name', 'email@example.com'), ('Full Name', 'anotheremail@example.com')]
|
||||||
|
ADMINS = []
|
||||||
|
|
||||||
|
# List of IP addresses, as strings, that:
|
||||||
|
# * See debug comments, when DEBUG is true
|
||||||
|
# * Receive x-headers
|
||||||
|
INTERNAL_IPS = []
|
||||||
|
|
||||||
|
# Hosts/domain names that are valid for this site.
|
||||||
|
# "*" matches anything, ".example.com" matches example.com and all subdomains
|
||||||
|
ALLOWED_HOSTS = []
|
||||||
|
|
||||||
|
# Local time zone for this installation. All choices can be found here:
|
||||||
|
# https://en.wikipedia.org/wiki/List_of_tz_zones_by_name (although not all
|
||||||
|
# systems may support all possibilities). When USE_TZ is True, this is
|
||||||
|
# interpreted as the default user time zone.
|
||||||
|
TIME_ZONE = 'America/Chicago'
|
||||||
|
|
||||||
|
# If you set this to True, Django will use timezone-aware datetimes.
|
||||||
|
USE_TZ = False
|
||||||
|
|
||||||
|
# Language code for this installation. All choices can be found here:
|
||||||
|
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||||
|
LANGUAGE_CODE = 'en-us'
|
||||||
|
|
||||||
|
# Languages we provide translations for, out of the box.
|
||||||
|
LANGUAGES = [
|
||||||
|
('af', gettext_noop('Afrikaans')),
|
||||||
|
('ar', gettext_noop('Arabic')),
|
||||||
|
('ast', gettext_noop('Asturian')),
|
||||||
|
('az', gettext_noop('Azerbaijani')),
|
||||||
|
('bg', gettext_noop('Bulgarian')),
|
||||||
|
('be', gettext_noop('Belarusian')),
|
||||||
|
('bn', gettext_noop('Bengali')),
|
||||||
|
('br', gettext_noop('Breton')),
|
||||||
|
('bs', gettext_noop('Bosnian')),
|
||||||
|
('ca', gettext_noop('Catalan')),
|
||||||
|
('cs', gettext_noop('Czech')),
|
||||||
|
('cy', gettext_noop('Welsh')),
|
||||||
|
('da', gettext_noop('Danish')),
|
||||||
|
('de', gettext_noop('German')),
|
||||||
|
('dsb', gettext_noop('Lower Sorbian')),
|
||||||
|
('el', gettext_noop('Greek')),
|
||||||
|
('en', gettext_noop('English')),
|
||||||
|
('en-au', gettext_noop('Australian English')),
|
||||||
|
('en-gb', gettext_noop('British English')),
|
||||||
|
('eo', gettext_noop('Esperanto')),
|
||||||
|
('es', gettext_noop('Spanish')),
|
||||||
|
('es-ar', gettext_noop('Argentinian Spanish')),
|
||||||
|
('es-co', gettext_noop('Colombian Spanish')),
|
||||||
|
('es-mx', gettext_noop('Mexican Spanish')),
|
||||||
|
('es-ni', gettext_noop('Nicaraguan Spanish')),
|
||||||
|
('es-ve', gettext_noop('Venezuelan Spanish')),
|
||||||
|
('et', gettext_noop('Estonian')),
|
||||||
|
('eu', gettext_noop('Basque')),
|
||||||
|
('fa', gettext_noop('Persian')),
|
||||||
|
('fi', gettext_noop('Finnish')),
|
||||||
|
('fr', gettext_noop('French')),
|
||||||
|
('fy', gettext_noop('Frisian')),
|
||||||
|
('ga', gettext_noop('Irish')),
|
||||||
|
('gd', gettext_noop('Scottish Gaelic')),
|
||||||
|
('gl', gettext_noop('Galician')),
|
||||||
|
('he', gettext_noop('Hebrew')),
|
||||||
|
('hi', gettext_noop('Hindi')),
|
||||||
|
('hr', gettext_noop('Croatian')),
|
||||||
|
('hsb', gettext_noop('Upper Sorbian')),
|
||||||
|
('hu', gettext_noop('Hungarian')),
|
||||||
|
('ia', gettext_noop('Interlingua')),
|
||||||
|
('id', gettext_noop('Indonesian')),
|
||||||
|
('io', gettext_noop('Ido')),
|
||||||
|
('is', gettext_noop('Icelandic')),
|
||||||
|
('it', gettext_noop('Italian')),
|
||||||
|
('ja', gettext_noop('Japanese')),
|
||||||
|
('ka', gettext_noop('Georgian')),
|
||||||
|
('kab', gettext_noop('Kabyle')),
|
||||||
|
('kk', gettext_noop('Kazakh')),
|
||||||
|
('km', gettext_noop('Khmer')),
|
||||||
|
('kn', gettext_noop('Kannada')),
|
||||||
|
('ko', gettext_noop('Korean')),
|
||||||
|
('lb', gettext_noop('Luxembourgish')),
|
||||||
|
('lt', gettext_noop('Lithuanian')),
|
||||||
|
('lv', gettext_noop('Latvian')),
|
||||||
|
('mk', gettext_noop('Macedonian')),
|
||||||
|
('ml', gettext_noop('Malayalam')),
|
||||||
|
('mn', gettext_noop('Mongolian')),
|
||||||
|
('mr', gettext_noop('Marathi')),
|
||||||
|
('my', gettext_noop('Burmese')),
|
||||||
|
('nb', gettext_noop('Norwegian Bokmål')),
|
||||||
|
('ne', gettext_noop('Nepali')),
|
||||||
|
('nl', gettext_noop('Dutch')),
|
||||||
|
('nn', gettext_noop('Norwegian Nynorsk')),
|
||||||
|
('os', gettext_noop('Ossetic')),
|
||||||
|
('pa', gettext_noop('Punjabi')),
|
||||||
|
('pl', gettext_noop('Polish')),
|
||||||
|
('pt', gettext_noop('Portuguese')),
|
||||||
|
('pt-br', gettext_noop('Brazilian Portuguese')),
|
||||||
|
('ro', gettext_noop('Romanian')),
|
||||||
|
('ru', gettext_noop('Russian')),
|
||||||
|
('sk', gettext_noop('Slovak')),
|
||||||
|
('sl', gettext_noop('Slovenian')),
|
||||||
|
('sq', gettext_noop('Albanian')),
|
||||||
|
('sr', gettext_noop('Serbian')),
|
||||||
|
('sr-latn', gettext_noop('Serbian Latin')),
|
||||||
|
('sv', gettext_noop('Swedish')),
|
||||||
|
('sw', gettext_noop('Swahili')),
|
||||||
|
('ta', gettext_noop('Tamil')),
|
||||||
|
('te', gettext_noop('Telugu')),
|
||||||
|
('th', gettext_noop('Thai')),
|
||||||
|
('tr', gettext_noop('Turkish')),
|
||||||
|
('tt', gettext_noop('Tatar')),
|
||||||
|
('udm', gettext_noop('Udmurt')),
|
||||||
|
('uk', gettext_noop('Ukrainian')),
|
||||||
|
('ur', gettext_noop('Urdu')),
|
||||||
|
('vi', gettext_noop('Vietnamese')),
|
||||||
|
('zh-hans', gettext_noop('Simplified Chinese')),
|
||||||
|
('zh-hant', gettext_noop('Traditional Chinese')),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Languages using BiDi (right-to-left) layout
|
||||||
|
LANGUAGES_BIDI = ["he", "ar", "fa", "ur"]
|
||||||
|
|
||||||
|
# If you set this to False, Django will make some optimizations so as not
|
||||||
|
# to load the internationalization machinery.
|
||||||
|
USE_I18N = True
|
||||||
|
LOCALE_PATHS = []
|
||||||
|
|
||||||
|
# Settings for language cookie
|
||||||
|
LANGUAGE_COOKIE_NAME = 'django_language'
|
||||||
|
LANGUAGE_COOKIE_AGE = None
|
||||||
|
LANGUAGE_COOKIE_DOMAIN = None
|
||||||
|
LANGUAGE_COOKIE_PATH = '/'
|
||||||
|
|
||||||
|
|
||||||
|
# If you set this to True, Django will format dates, numbers and calendars
|
||||||
|
# according to user current locale.
|
||||||
|
USE_L10N = False
|
||||||
|
|
||||||
|
# Not-necessarily-technical managers of the site. They get broken link
|
||||||
|
# notifications and other various emails.
|
||||||
|
MANAGERS = ADMINS
|
||||||
|
|
||||||
|
# Default content type and charset to use for all HttpResponse objects, if a
|
||||||
|
# MIME type isn't manually specified. These are used to construct the
|
||||||
|
# Content-Type header.
|
||||||
|
DEFAULT_CONTENT_TYPE = 'text/html'
|
||||||
|
DEFAULT_CHARSET = 'utf-8'
|
||||||
|
|
||||||
|
# Encoding of files read from disk (template and initial SQL files).
|
||||||
|
FILE_CHARSET = 'utf-8'
|
||||||
|
|
||||||
|
# Email address that error messages come from.
|
||||||
|
SERVER_EMAIL = 'root@localhost'
|
||||||
|
|
||||||
|
# Database connection info. If left empty, will default to the dummy backend.
|
||||||
|
DATABASES = {}
|
||||||
|
|
||||||
|
# Classes used to implement DB routing behavior.
|
||||||
|
DATABASE_ROUTERS = []
|
||||||
|
|
||||||
|
# The email backend to use. For possible shortcuts see django.core.mail.
|
||||||
|
# The default is to use the SMTP backend.
|
||||||
|
# Third-party backends can be specified by providing a Python path
|
||||||
|
# to a module that defines an EmailBackend class.
|
||||||
|
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||||
|
|
||||||
|
# Host for sending email.
|
||||||
|
EMAIL_HOST = 'localhost'
|
||||||
|
|
||||||
|
# Port for sending email.
|
||||||
|
EMAIL_PORT = 25
|
||||||
|
|
||||||
|
# Whether to send SMTP 'Date' header in the local time zone or in UTC.
|
||||||
|
EMAIL_USE_LOCALTIME = False
|
||||||
|
|
||||||
|
# Optional SMTP authentication information for EMAIL_HOST.
|
||||||
|
EMAIL_HOST_USER = ''
|
||||||
|
EMAIL_HOST_PASSWORD = ''
|
||||||
|
EMAIL_USE_TLS = False
|
||||||
|
EMAIL_USE_SSL = False
|
||||||
|
EMAIL_SSL_CERTFILE = None
|
||||||
|
EMAIL_SSL_KEYFILE = None
|
||||||
|
EMAIL_TIMEOUT = None
|
||||||
|
|
||||||
|
# List of strings representing installed apps.
|
||||||
|
INSTALLED_APPS = []
|
||||||
|
|
||||||
|
TEMPLATES = []
|
||||||
|
|
||||||
|
# Default form rendering class.
|
||||||
|
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
|
||||||
|
|
||||||
|
# Default email address to use for various automated correspondence from
|
||||||
|
# the site managers.
|
||||||
|
DEFAULT_FROM_EMAIL = 'webmaster@localhost'
|
||||||
|
|
||||||
|
# Subject-line prefix for email messages send with django.core.mail.mail_admins
|
||||||
|
# or ...mail_managers. Make sure to include the trailing space.
|
||||||
|
EMAIL_SUBJECT_PREFIX = '[Django] '
|
||||||
|
|
||||||
|
# Whether to append trailing slashes to URLs.
|
||||||
|
APPEND_SLASH = True
|
||||||
|
|
||||||
|
# Whether to prepend the "www." subdomain to URLs that don't have it.
|
||||||
|
PREPEND_WWW = False
|
||||||
|
|
||||||
|
# Override the server-derived value of SCRIPT_NAME
|
||||||
|
FORCE_SCRIPT_NAME = None
|
||||||
|
|
||||||
|
# List of compiled regular expression objects representing User-Agent strings
|
||||||
|
# that are not allowed to visit any page, systemwide. Use this for bad
|
||||||
|
# robots/crawlers. Here are a few examples:
|
||||||
|
# import re
|
||||||
|
# DISALLOWED_USER_AGENTS = [
|
||||||
|
# re.compile(r'^NaverBot.*'),
|
||||||
|
# re.compile(r'^EmailSiphon.*'),
|
||||||
|
# re.compile(r'^SiteSucker.*'),
|
||||||
|
# re.compile(r'^sohu-search'),
|
||||||
|
# ]
|
||||||
|
DISALLOWED_USER_AGENTS = []
|
||||||
|
|
||||||
|
ABSOLUTE_URL_OVERRIDES = {}
|
||||||
|
|
||||||
|
# List of compiled regular expression objects representing URLs that need not
|
||||||
|
# be reported by BrokenLinkEmailsMiddleware. Here are a few examples:
|
||||||
|
# import re
|
||||||
|
# IGNORABLE_404_URLS = [
|
||||||
|
# re.compile(r'^/apple-touch-icon.*\.png$'),
|
||||||
|
# re.compile(r'^/favicon.ico$'),
|
||||||
|
# re.compile(r'^/robots.txt$'),
|
||||||
|
# re.compile(r'^/phpmyadmin/'),
|
||||||
|
# re.compile(r'\.(cgi|php|pl)$'),
|
||||||
|
# ]
|
||||||
|
IGNORABLE_404_URLS = []
|
||||||
|
|
||||||
|
# A secret key for this particular Django installation. Used in secret-key
|
||||||
|
# hashing algorithms. Set this in your settings, or Django will complain
|
||||||
|
# loudly.
|
||||||
|
SECRET_KEY = ''
|
||||||
|
|
||||||
|
# Default file storage mechanism that holds media.
|
||||||
|
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
|
||||||
|
|
||||||
|
# Absolute filesystem path to the directory that will hold user-uploaded files.
|
||||||
|
# Example: "/var/www/example.com/media/"
|
||||||
|
MEDIA_ROOT = ''
|
||||||
|
|
||||||
|
# URL that handles the media served from MEDIA_ROOT.
|
||||||
|
# Examples: "http://example.com/media/", "http://media.example.com/"
|
||||||
|
MEDIA_URL = ''
|
||||||
|
|
||||||
|
# Absolute path to the directory static files should be collected to.
|
||||||
|
# Example: "/var/www/example.com/static/"
|
||||||
|
STATIC_ROOT = None
|
||||||
|
|
||||||
|
# URL that handles the static files served from STATIC_ROOT.
|
||||||
|
# Example: "http://example.com/static/", "http://static.example.com/"
|
||||||
|
STATIC_URL = None
|
||||||
|
|
||||||
|
# List of upload handler classes to be applied in order.
|
||||||
|
FILE_UPLOAD_HANDLERS = [
|
||||||
|
'django.core.files.uploadhandler.MemoryFileUploadHandler',
|
||||||
|
'django.core.files.uploadhandler.TemporaryFileUploadHandler',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Maximum size, in bytes, of a request before it will be streamed to the
|
||||||
|
# file system instead of into memory.
|
||||||
|
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB
|
||||||
|
|
||||||
|
# Maximum size in bytes of request data (excluding file uploads) that will be
|
||||||
|
# read before a SuspiciousOperation (RequestDataTooBig) is raised.
|
||||||
|
DATA_UPLOAD_MAX_MEMORY_SIZE = 2621440 # i.e. 2.5 MB
|
||||||
|
|
||||||
|
# Maximum number of GET/POST parameters that will be read before a
|
||||||
|
# SuspiciousOperation (TooManyFieldsSent) is raised.
|
||||||
|
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
|
||||||
|
|
||||||
|
# Directory in which upload streamed files will be temporarily saved. A value of
|
||||||
|
# `None` will make Django use the operating system's default temporary directory
|
||||||
|
# (i.e. "/tmp" on *nix systems).
|
||||||
|
FILE_UPLOAD_TEMP_DIR = None
|
||||||
|
|
||||||
|
# The numeric mode to set newly-uploaded files to. The value should be a mode
|
||||||
|
# you'd pass directly to os.chmod; see https://docs.python.org/library/os.html#files-and-directories.
|
||||||
|
FILE_UPLOAD_PERMISSIONS = None
|
||||||
|
|
||||||
|
# The numeric mode to assign to newly-created directories, when uploading files.
|
||||||
|
# The value should be a mode as you'd pass to os.chmod;
|
||||||
|
# see https://docs.python.org/library/os.html#files-and-directories.
|
||||||
|
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
|
||||||
|
|
||||||
|
# Python module path where user will place custom format definition.
|
||||||
|
# The directory where this setting is pointing should contain subdirectories
|
||||||
|
# named as the locales, containing a formats.py file
|
||||||
|
# (i.e. "myproject.locale" for myproject/locale/en/formats.py etc. use)
|
||||||
|
FORMAT_MODULE_PATH = None
|
||||||
|
|
||||||
|
# Default formatting for date objects. See all available format strings here:
|
||||||
|
# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||||
|
DATE_FORMAT = 'N j, Y'
|
||||||
|
|
||||||
|
# Default formatting for datetime objects. See all available format strings here:
|
||||||
|
# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||||
|
DATETIME_FORMAT = 'N j, Y, P'
|
||||||
|
|
||||||
|
# Default formatting for time objects. See all available format strings here:
|
||||||
|
# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||||
|
TIME_FORMAT = 'P'
|
||||||
|
|
||||||
|
# Default formatting for date objects when only the year and month are relevant.
|
||||||
|
# See all available format strings here:
|
||||||
|
# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||||
|
YEAR_MONTH_FORMAT = 'F Y'
|
||||||
|
|
||||||
|
# Default formatting for date objects when only the month and day are relevant.
|
||||||
|
# See all available format strings here:
|
||||||
|
# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||||
|
MONTH_DAY_FORMAT = 'F j'
|
||||||
|
|
||||||
|
# Default short formatting for date objects. See all available format strings here:
|
||||||
|
# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||||
|
SHORT_DATE_FORMAT = 'm/d/Y'
|
||||||
|
|
||||||
|
# Default short formatting for datetime objects.
|
||||||
|
# See all available format strings here:
|
||||||
|
# https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date
|
||||||
|
SHORT_DATETIME_FORMAT = 'm/d/Y P'
|
||||||
|
|
||||||
|
# Default formats to be used when parsing dates from input boxes, in order
|
||||||
|
# See all available format string here:
|
||||||
|
# https://docs.python.org/library/datetime.html#strftime-behavior
|
||||||
|
# * Note that these format strings are different from the ones to display dates
|
||||||
|
DATE_INPUT_FORMATS = [
|
||||||
|
'%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', # '2006-10-25', '10/25/2006', '10/25/06'
|
||||||
|
'%b %d %Y', '%b %d, %Y', # 'Oct 25 2006', 'Oct 25, 2006'
|
||||||
|
'%d %b %Y', '%d %b, %Y', # '25 Oct 2006', '25 Oct, 2006'
|
||||||
|
'%B %d %Y', '%B %d, %Y', # 'October 25 2006', 'October 25, 2006'
|
||||||
|
'%d %B %Y', '%d %B, %Y', # '25 October 2006', '25 October, 2006'
|
||||||
|
]
|
||||||
|
|
||||||
|
# Default formats to be used when parsing times from input boxes, in order
|
||||||
|
# See all available format string here:
|
||||||
|
# https://docs.python.org/library/datetime.html#strftime-behavior
|
||||||
|
# * Note that these format strings are different from the ones to display dates
|
||||||
|
TIME_INPUT_FORMATS = [
|
||||||
|
'%H:%M:%S', # '14:30:59'
|
||||||
|
'%H:%M:%S.%f', # '14:30:59.000200'
|
||||||
|
'%H:%M', # '14:30'
|
||||||
|
]
|
||||||
|
|
||||||
|
# Default formats to be used when parsing dates and times from input boxes,
|
||||||
|
# in order
|
||||||
|
# See all available format string here:
|
||||||
|
# https://docs.python.org/library/datetime.html#strftime-behavior
|
||||||
|
# * Note that these format strings are different from the ones to display dates
|
||||||
|
DATETIME_INPUT_FORMATS = [
|
||||||
|
'%Y-%m-%d %H:%M:%S', # '2006-10-25 14:30:59'
|
||||||
|
'%Y-%m-%d %H:%M:%S.%f', # '2006-10-25 14:30:59.000200'
|
||||||
|
'%Y-%m-%d %H:%M', # '2006-10-25 14:30'
|
||||||
|
'%Y-%m-%d', # '2006-10-25'
|
||||||
|
'%m/%d/%Y %H:%M:%S', # '10/25/2006 14:30:59'
|
||||||
|
'%m/%d/%Y %H:%M:%S.%f', # '10/25/2006 14:30:59.000200'
|
||||||
|
'%m/%d/%Y %H:%M', # '10/25/2006 14:30'
|
||||||
|
'%m/%d/%Y', # '10/25/2006'
|
||||||
|
'%m/%d/%y %H:%M:%S', # '10/25/06 14:30:59'
|
||||||
|
'%m/%d/%y %H:%M:%S.%f', # '10/25/06 14:30:59.000200'
|
||||||
|
'%m/%d/%y %H:%M', # '10/25/06 14:30'
|
||||||
|
'%m/%d/%y', # '10/25/06'
|
||||||
|
]
|
||||||
|
|
||||||
|
# First day of week, to be used on calendars
|
||||||
|
# 0 means Sunday, 1 means Monday...
|
||||||
|
FIRST_DAY_OF_WEEK = 0
|
||||||
|
|
||||||
|
# Decimal separator symbol
|
||||||
|
DECIMAL_SEPARATOR = '.'
|
||||||
|
|
||||||
|
# Boolean that sets whether to add thousand separator when formatting numbers
|
||||||
|
USE_THOUSAND_SEPARATOR = False
|
||||||
|
|
||||||
|
# Number of digits that will be together, when splitting them by
|
||||||
|
# THOUSAND_SEPARATOR. 0 means no grouping, 3 means splitting by thousands...
|
||||||
|
NUMBER_GROUPING = 0
|
||||||
|
|
||||||
|
# Thousand separator symbol
|
||||||
|
THOUSAND_SEPARATOR = ','
|
||||||
|
|
||||||
|
# The tablespaces to use for each model when not specified otherwise.
|
||||||
|
DEFAULT_TABLESPACE = ''
|
||||||
|
DEFAULT_INDEX_TABLESPACE = ''
|
||||||
|
|
||||||
|
# Default X-Frame-Options header value
|
||||||
|
X_FRAME_OPTIONS = 'SAMEORIGIN'
|
||||||
|
|
||||||
|
USE_X_FORWARDED_HOST = False
|
||||||
|
USE_X_FORWARDED_PORT = False
|
||||||
|
|
||||||
|
# The Python dotted path to the WSGI application that Django's internal server
|
||||||
|
# (runserver) will use. If `None`, the return value of
|
||||||
|
# 'django.core.wsgi.get_wsgi_application' is used, thus preserving the same
|
||||||
|
# behavior as previous versions of Django. Otherwise this should point to an
|
||||||
|
# actual WSGI application object.
|
||||||
|
WSGI_APPLICATION = None
|
||||||
|
|
||||||
|
# If your Django app is behind a proxy that sets a header to specify secure
|
||||||
|
# connections, AND that proxy ensures that user-submitted headers with the
|
||||||
|
# same name are ignored (so that people can't spoof it), set this value to
|
||||||
|
# a tuple of (header_name, header_value). For any requests that come in with
|
||||||
|
# that header/value, request.is_secure() will return True.
|
||||||
|
# WARNING! Only set this if you fully understand what you're doing. Otherwise,
|
||||||
|
# you may be opening yourself up to a security risk.
|
||||||
|
SECURE_PROXY_SSL_HEADER = None
|
||||||
|
|
||||||
|
##############
|
||||||
|
# MIDDLEWARE #
|
||||||
|
##############
|
||||||
|
|
||||||
|
# List of middleware to use. Order is important; in the request phase, these
|
||||||
|
# middleware will be applied in the order given, and in the response
|
||||||
|
# phase the middleware will be applied in reverse order.
|
||||||
|
MIDDLEWARE = []
|
||||||
|
|
||||||
|
############
|
||||||
|
# SESSIONS #
|
||||||
|
############
|
||||||
|
|
||||||
|
# Cache to store session data if using the cache session backend.
|
||||||
|
SESSION_CACHE_ALIAS = 'default'
|
||||||
|
# Cookie name. This can be whatever you want.
|
||||||
|
SESSION_COOKIE_NAME = 'sessionid'
|
||||||
|
# Age of cookie, in seconds (default: 2 weeks).
|
||||||
|
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
|
||||||
|
# A string like "example.com", or None for standard domain cookie.
|
||||||
|
SESSION_COOKIE_DOMAIN = None
|
||||||
|
# Whether the session cookie should be secure (https:// only).
|
||||||
|
SESSION_COOKIE_SECURE = False
|
||||||
|
# The path of the session cookie.
|
||||||
|
SESSION_COOKIE_PATH = '/'
|
||||||
|
# Whether to use the non-RFC standard httpOnly flag (IE, FF3+, others)
|
||||||
|
SESSION_COOKIE_HTTPONLY = True
|
||||||
|
# Whether to set the flag restricting cookie leaks on cross-site requests.
|
||||||
|
# This can be 'Lax', 'Strict', or None to disable the flag.
|
||||||
|
SESSION_COOKIE_SAMESITE = 'Lax'
|
||||||
|
# Whether to save the session data on every request.
|
||||||
|
SESSION_SAVE_EVERY_REQUEST = False
|
||||||
|
# Whether a user's session cookie expires when the Web browser is closed.
|
||||||
|
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
|
||||||
|
# The module to store session data
|
||||||
|
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
|
||||||
|
# Directory to store session files if using the file session module. If None,
|
||||||
|
# the backend will use a sensible default.
|
||||||
|
SESSION_FILE_PATH = None
|
||||||
|
# class to serialize session data
|
||||||
|
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
|
||||||
|
|
||||||
|
#########
|
||||||
|
# CACHE #
|
||||||
|
#########
|
||||||
|
|
||||||
|
# The cache backends to use.
|
||||||
|
CACHES = {
|
||||||
|
'default': {
|
||||||
|
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CACHE_MIDDLEWARE_KEY_PREFIX = ''
|
||||||
|
CACHE_MIDDLEWARE_SECONDS = 600
|
||||||
|
CACHE_MIDDLEWARE_ALIAS = 'default'
|
||||||
|
|
||||||
|
##################
|
||||||
|
# AUTHENTICATION #
|
||||||
|
##################
|
||||||
|
|
||||||
|
AUTH_USER_MODEL = 'auth.User'
|
||||||
|
|
||||||
|
AUTHENTICATION_BACKENDS = ['django.contrib.auth.backends.ModelBackend']
|
||||||
|
|
||||||
|
LOGIN_URL = '/accounts/login/'
|
||||||
|
|
||||||
|
LOGIN_REDIRECT_URL = '/accounts/profile/'
|
||||||
|
|
||||||
|
LOGOUT_REDIRECT_URL = None
|
||||||
|
|
||||||
|
# The number of days a password reset link is valid for
|
||||||
|
PASSWORD_RESET_TIMEOUT_DAYS = 3
|
||||||
|
|
||||||
|
# the first hasher in this list is the preferred algorithm. any
|
||||||
|
# password using different algorithms will be converted automatically
|
||||||
|
# upon login
|
||||||
|
PASSWORD_HASHERS = [
|
||||||
|
'django.contrib.auth.hashers.PBKDF2PasswordHasher',
|
||||||
|
'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
|
||||||
|
'django.contrib.auth.hashers.Argon2PasswordHasher',
|
||||||
|
'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
|
||||||
|
]
|
||||||
|
|
||||||
|
AUTH_PASSWORD_VALIDATORS = []
|
||||||
|
|
||||||
|
###########
|
||||||
|
# SIGNING #
|
||||||
|
###########
|
||||||
|
|
||||||
|
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
|
||||||
|
|
||||||
|
########
|
||||||
|
# CSRF #
|
||||||
|
########
|
||||||
|
|
||||||
|
# Dotted path to callable to be used as view when a request is
|
||||||
|
# rejected by the CSRF middleware.
|
||||||
|
CSRF_FAILURE_VIEW = 'django.views.csrf.csrf_failure'
|
||||||
|
|
||||||
|
# Settings for CSRF cookie.
|
||||||
|
CSRF_COOKIE_NAME = 'csrftoken'
|
||||||
|
CSRF_COOKIE_AGE = 60 * 60 * 24 * 7 * 52
|
||||||
|
CSRF_COOKIE_DOMAIN = None
|
||||||
|
CSRF_COOKIE_PATH = '/'
|
||||||
|
CSRF_COOKIE_SECURE = False
|
||||||
|
CSRF_COOKIE_HTTPONLY = False
|
||||||
|
CSRF_COOKIE_SAMESITE = 'Lax'
|
||||||
|
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
|
||||||
|
CSRF_TRUSTED_ORIGINS = []
|
||||||
|
CSRF_USE_SESSIONS = False
|
||||||
|
|
||||||
|
############
|
||||||
|
# MESSAGES #
|
||||||
|
############
|
||||||
|
|
||||||
|
# Class to use as messages backend
|
||||||
|
MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'
|
||||||
|
|
||||||
|
# Default values of MESSAGE_LEVEL and MESSAGE_TAGS are defined within
|
||||||
|
# django.contrib.messages to avoid imports in this settings file.
|
||||||
|
|
||||||
|
###########
|
||||||
|
# LOGGING #
|
||||||
|
###########
|
||||||
|
|
||||||
|
# The callable to use to configure logging
|
||||||
|
LOGGING_CONFIG = 'logging.config.dictConfig'
|
||||||
|
|
||||||
|
# Custom logging configuration.
|
||||||
|
LOGGING = {}
|
||||||
|
|
||||||
|
# Default exception reporter filter class used in case none has been
|
||||||
|
# specifically assigned to the HttpRequest instance.
|
||||||
|
DEFAULT_EXCEPTION_REPORTER_FILTER = 'django.views.debug.SafeExceptionReporterFilter'
|
||||||
|
|
||||||
|
###########
|
||||||
|
# TESTING #
|
||||||
|
###########
|
||||||
|
|
||||||
|
# The name of the class to use to run the test suite
|
||||||
|
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
|
||||||
|
|
||||||
|
# Apps that don't need to be serialized at test database creation time
|
||||||
|
# (only apps with migrations are to start with)
|
||||||
|
TEST_NON_SERIALIZED_APPS = []
|
||||||
|
|
||||||
|
############
|
||||||
|
# FIXTURES #
|
||||||
|
############
|
||||||
|
|
||||||
|
# The list of directories to search for fixtures
|
||||||
|
FIXTURE_DIRS = []
|
||||||
|
|
||||||
|
###############
|
||||||
|
# STATICFILES #
|
||||||
|
###############
|
||||||
|
|
||||||
|
# A list of locations of additional static files
|
||||||
|
STATICFILES_DIRS = []
|
||||||
|
|
||||||
|
# The default file storage backend used during the build process
|
||||||
|
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
|
||||||
|
|
||||||
|
# List of finder classes that know how to find static files in
|
||||||
|
# various locations.
|
||||||
|
STATICFILES_FINDERS = [
|
||||||
|
'django.contrib.staticfiles.finders.FileSystemFinder',
|
||||||
|
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||||
|
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
|
||||||
|
]
|
||||||
|
|
||||||
|
##############
|
||||||
|
# MIGRATIONS #
|
||||||
|
##############
|
||||||
|
|
||||||
|
# Migration module overrides for apps, by app label.
|
||||||
|
MIGRATION_MODULES = {}
|
||||||
|
|
||||||
|
#################
|
||||||
|
# SYSTEM CHECKS #
|
||||||
|
#################
|
||||||
|
|
||||||
|
# List of all issues generated by system checks that should be silenced. Light
|
||||||
|
# issues like warnings, infos or debugs will not generate a message. Silencing
|
||||||
|
# serious issues like errors and criticals does not result in hiding the
|
||||||
|
# message, but Django will not stop you from e.g. running server.
|
||||||
|
SILENCED_SYSTEM_CHECKS = []
|
||||||
|
|
||||||
|
#######################
|
||||||
|
# SECURITY MIDDLEWARE #
|
||||||
|
#######################
|
||||||
|
SECURE_BROWSER_XSS_FILTER = False
|
||||||
|
SECURE_CONTENT_TYPE_NOSNIFF = False
|
||||||
|
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
|
||||||
|
SECURE_HSTS_PRELOAD = False
|
||||||
|
SECURE_HSTS_SECONDS = 0
|
||||||
|
SECURE_REDIRECT_EXEMPT = []
|
||||||
|
SECURE_SSL_HOST = None
|
||||||
|
SECURE_SSL_REDIRECT = False
|
Loading…
Reference in New Issue