<?xml version="1.0" encoding="UTF-8"?> | |||||
<project version="4"> | |||||
<component name="ProjectModuleManager"> | |||||
<modules> | |||||
<module fileurl="file://$PROJECT_DIR$/.idea/news.iml" filepath="$PROJECT_DIR$/.idea/news.iml" /> | |||||
</modules> | |||||
</component> | |||||
</project> |
from django.test import TestCase | |||||
# Create your tests here. |
from django.shortcuts import render | |||||
# Create your views here. |
#!/Users/khaloufam70043/Documents/news/venv/bin/python | |||||
# -*- coding: utf-8 -*- | |||||
import re | |||||
import sys | |||||
from django.core.management import execute_from_command_line | |||||
if __name__ == '__main__': | |||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |||||
sys.exit(execute_from_command_line()) |
#!/Users/khaloufam70043/Documents/news/venv/bin/python | |||||
from django.core import management | |||||
if __name__ == "__main__": | |||||
management.execute_from_command_line() |
#!/Users/khaloufam70043/Documents/news/venv/bin/python | |||||
# EASY-INSTALL-ENTRY-SCRIPT: 'setuptools==39.1.0','console_scripts','easy_install' | |||||
__requires__ = 'setuptools==39.1.0' | |||||
import re | |||||
import sys | |||||
from pkg_resources import load_entry_point | |||||
if __name__ == '__main__': | |||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |||||
sys.exit( | |||||
load_entry_point('setuptools==39.1.0', 'console_scripts', 'easy_install')() | |||||
) |
#!/Users/khaloufam70043/Documents/news/venv/bin/python | |||||
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==10.0.1','console_scripts','pip3' | |||||
__requires__ = 'pip==10.0.1' | |||||
import re | |||||
import sys | |||||
from pkg_resources import load_entry_point | |||||
if __name__ == '__main__': | |||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |||||
sys.exit( | |||||
load_entry_point('pip==10.0.1', 'console_scripts', 'pip3')() | |||||
) |
#!/Users/khaloufam70043/Documents/news/venv/bin/python | |||||
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==10.0.1','console_scripts','pip3.7' | |||||
__requires__ = 'pip==10.0.1' | |||||
import re | |||||
import sys | |||||
from pkg_resources import load_entry_point | |||||
if __name__ == '__main__': | |||||
sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0]) | |||||
sys.exit( | |||||
load_entry_point('pip==10.0.1', 'console_scripts', 'pip3.7')() | |||||
) |
django |
from django.utils.version import get_version | |||||
VERSION = (2, 2, 6, 'final', 0) | |||||
__version__ = get_version(VERSION) | |||||
def setup(set_prefix=True): | |||||
""" | |||||
Configure the settings (this happens as a side effect of accessing the | |||||
first setting), configure logging and populate the app registry. | |||||
Set the thread-local urlresolvers script prefix if `set_prefix` is True. | |||||
""" | |||||
from django.apps import apps | |||||
from django.conf import settings | |||||
from django.urls import set_script_prefix | |||||
from django.utils.log import configure_logging | |||||
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) | |||||
if set_prefix: | |||||
set_script_prefix( | |||||
'/' if settings.FORCE_SCRIPT_NAME is None else settings.FORCE_SCRIPT_NAME | |||||
) | |||||
apps.populate(settings.INSTALLED_APPS) |
import os | |||||
from importlib import import_module | |||||
from django.core.exceptions import ImproperlyConfigured | |||||
from django.utils.module_loading import module_has_submodule | |||||
MODELS_MODULE_NAME = 'models' | |||||
class AppConfig: | |||||
"""Class representing a Django application and its configuration.""" | |||||
def __init__(self, app_name, app_module): | |||||
# Full Python path to the application e.g. 'django.contrib.admin'. | |||||
self.name = app_name | |||||
# Root module for the application e.g. <module 'django.contrib.admin' | |||||
# from 'django/contrib/admin/__init__.py'>. | |||||
self.module = app_module | |||||
# Reference to the Apps registry that holds this AppConfig. Set by the | |||||
# registry when it registers the AppConfig instance. | |||||
self.apps = None | |||||
# The following attributes could be defined at the class level in a | |||||
# subclass, hence the test-and-set pattern. | |||||
# Last component of the Python path to the application e.g. 'admin'. | |||||
# This value must be unique across a Django project. | |||||
if not hasattr(self, 'label'): | |||||
self.label = app_name.rpartition(".")[2] | |||||
# Human-readable name for the application e.g. "Admin". | |||||
if not hasattr(self, 'verbose_name'): | |||||
self.verbose_name = self.label.title() | |||||
# Filesystem path to the application directory e.g. | |||||
# '/path/to/django/contrib/admin'. | |||||
if not hasattr(self, 'path'): | |||||
self.path = self._path_from_module(app_module) | |||||
# Module containing models e.g. <module 'django.contrib.admin.models' | |||||
# from 'django/contrib/admin/models.py'>. Set by import_models(). | |||||
# None if the application doesn't have a models module. | |||||
self.models_module = None | |||||
# Mapping of lowercase model names to model classes. Initially set to | |||||
# None to prevent accidental access before import_models() runs. | |||||
self.models = None | |||||
def __repr__(self): | |||||
return '<%s: %s>' % (self.__class__.__name__, self.label) | |||||
def _path_from_module(self, module): | |||||
"""Attempt to determine app's filesystem path from its module.""" | |||||
# See #21874 for extended discussion of the behavior of this method in | |||||
# various cases. | |||||
# Convert paths to list because Python's _NamespacePath doesn't support | |||||
# indexing. | |||||
paths = list(getattr(module, '__path__', [])) | |||||
if len(paths) != 1: | |||||
filename = getattr(module, '__file__', None) | |||||
if filename is not None: | |||||
paths = [os.path.dirname(filename)] | |||||
else: | |||||
# For unknown reasons, sometimes the list returned by __path__ | |||||
# contains duplicates that must be removed (#25246). | |||||
paths = list(set(paths)) | |||||
if len(paths) > 1: | |||||
raise ImproperlyConfigured( | |||||
"The app module %r has multiple filesystem locations (%r); " | |||||
"you must configure this app with an AppConfig subclass " | |||||
"with a 'path' class attribute." % (module, paths)) | |||||
elif not paths: | |||||
raise ImproperlyConfigured( | |||||
"The app module %r has no filesystem location, " | |||||
"you must configure this app with an AppConfig subclass " | |||||
"with a 'path' class attribute." % (module,)) | |||||
return paths[0] | |||||
@classmethod | |||||
def create(cls, entry): | |||||
""" | |||||
Factory that creates an app config from an entry in INSTALLED_APPS. | |||||
""" | |||||
try: | |||||
# If import_module succeeds, entry is a path to an app module, | |||||
# which may specify an app config class with default_app_config. | |||||
# Otherwise, entry is a path to an app config class or an error. | |||||
module = import_module(entry) | |||||
except ImportError: | |||||
# Track that importing as an app module failed. If importing as an | |||||
# app config class fails too, we'll trigger the ImportError again. | |||||
module = None | |||||
mod_path, _, cls_name = entry.rpartition('.') | |||||
# Raise the original exception when entry cannot be a path to an | |||||
# app config class. | |||||
if not mod_path: | |||||
raise | |||||
else: | |||||
try: | |||||
# If this works, the app module specifies an app config class. | |||||
entry = module.default_app_config | |||||
except AttributeError: | |||||
# Otherwise, it simply uses the default app config class. | |||||
return cls(entry, module) | |||||
else: | |||||
mod_path, _, cls_name = entry.rpartition('.') | |||||
# If we're reaching this point, we must attempt to load the app config | |||||
# class located at <mod_path>.<cls_name> | |||||
mod = import_module(mod_path) | |||||
try: | |||||
cls = getattr(mod, cls_name) | |||||
except AttributeError: | |||||
if module is None: | |||||
# If importing as an app module failed, check if the module | |||||
# contains any valid AppConfigs and show them as choices. | |||||
# Otherwise, that error probably contains the most informative | |||||
# traceback, so trigger it again. | |||||
candidates = sorted( | |||||
repr(name) for name, candidate in mod.__dict__.items() | |||||
if isinstance(candidate, type) and | |||||
issubclass(candidate, AppConfig) and | |||||
candidate is not AppConfig | |||||
) | |||||
if candidates: | |||||
raise ImproperlyConfigured( | |||||
"'%s' does not contain a class '%s'. Choices are: %s." | |||||
% (mod_path, cls_name, ', '.join(candidates)) | |||||
) | |||||
import_module(entry) | |||||
else: | |||||
raise | |||||
# Check for obvious errors. (This check prevents duck typing, but | |||||
# it could be removed if it became a problem in practice.) | |||||
if not issubclass(cls, AppConfig): | |||||
raise ImproperlyConfigured( | |||||
"'%s' isn't a subclass of AppConfig." % entry) | |||||
# Obtain app name here rather than in AppClass.__init__ to keep | |||||
# all error checking for entries in INSTALLED_APPS in one place. | |||||
try: | |||||
app_name = cls.name | |||||
except AttributeError: | |||||
raise ImproperlyConfigured( | |||||
"'%s' must supply a name attribute." % entry) | |||||
# Ensure app_name points to a valid module. | |||||
try: | |||||
app_module = import_module(app_name) | |||||
except ImportError: | |||||
raise ImproperlyConfigured( | |||||
"Cannot import '%s'. Check that '%s.%s.name' is correct." % ( | |||||
app_name, mod_path, cls_name, | |||||
) | |||||
) | |||||
# Entry is a path to an app config class. | |||||
return cls(app_name, app_module) | |||||
def get_model(self, model_name, require_ready=True): | |||||
""" | |||||
Return the model with the given case-insensitive model_name. | |||||
Raise LookupError if no model exists with this name. | |||||
""" | |||||
if require_ready: | |||||
self.apps.check_models_ready() | |||||
else: | |||||
self.apps.check_apps_ready() | |||||
try: | |||||
return self.models[model_name.lower()] | |||||
except KeyError: | |||||
raise LookupError( | |||||
"App '%s' doesn't have a '%s' model." % (self.label, model_name)) | |||||
def get_models(self, include_auto_created=False, include_swapped=False): | |||||
""" | |||||
Return an iterable of models. | |||||
By default, the following models aren't included: | |||||
- auto-created models for many-to-many relations without | |||||
an explicit intermediate table, | |||||
- models that have been swapped out. | |||||
Set the corresponding keyword argument to True to include such models. | |||||
Keyword arguments aren't documented; they're a private API. | |||||
""" | |||||
self.apps.check_models_ready() | |||||
for model in self.models.values(): | |||||
if model._meta.auto_created and not include_auto_created: | |||||
continue | |||||
if model._meta.swapped and not include_swapped: | |||||
continue | |||||
yield model | |||||
def import_models(self): | |||||
# Dictionary of models for this app, primarily maintained in the | |||||
# 'all_models' attribute of the Apps this AppConfig is attached to. | |||||
self.models = self.apps.all_models[self.label] | |||||
if module_has_submodule(self.module, MODELS_MODULE_NAME): | |||||
models_module_name = '%s.%s' % (self.name, MODELS_MODULE_NAME) | |||||
self.models_module = import_module(models_module_name) | |||||
def ready(self): | |||||
""" | |||||
Override this method in subclasses to run code when Django starts. | |||||
""" |
import functools | |||||
import sys | |||||
import threading | |||||
import warnings | |||||
from collections import Counter, OrderedDict, defaultdict | |||||
from functools import partial | |||||
from django.core.exceptions import AppRegistryNotReady, ImproperlyConfigured | |||||
from .config import AppConfig | |||||
class Apps: | |||||
""" | |||||
A registry that stores the configuration of installed applications. | |||||
It also keeps track of models, e.g. to provide reverse relations. | |||||
""" | |||||
def __init__(self, installed_apps=()): | |||||
# installed_apps is set to None when creating the master registry | |||||
# because it cannot be populated at that point. Other registries must | |||||
# provide a list of installed apps and are populated immediately. | |||||
if installed_apps is None and hasattr(sys.modules[__name__], 'apps'): | |||||
raise RuntimeError("You must supply an installed_apps argument.") | |||||
# Mapping of app labels => model names => model classes. Every time a | |||||
# model is imported, ModelBase.__new__ calls apps.register_model which | |||||
# creates an entry in all_models. All imported models are registered, | |||||
# regardless of whether they're defined in an installed application | |||||
# and whether the registry has been populated. Since it isn't possible | |||||
# to reimport a module safely (it could reexecute initialization code) | |||||
# all_models is never overridden or reset. | |||||
self.all_models = defaultdict(OrderedDict) | |||||
# Mapping of labels to AppConfig instances for installed apps. | |||||
self.app_configs = OrderedDict() | |||||
# Stack of app_configs. Used to store the current state in | |||||
# set_available_apps and set_installed_apps. | |||||
self.stored_app_configs = [] | |||||
# Whether the registry is populated. | |||||
self.apps_ready = self.models_ready = self.ready = False | |||||
# For the autoreloader. | |||||
self.ready_event = threading.Event() | |||||
# Lock for thread-safe population. | |||||
self._lock = threading.RLock() | |||||
self.loading = False | |||||
# Maps ("app_label", "modelname") tuples to lists of functions to be | |||||
# called when the corresponding model is ready. Used by this class's | |||||
# `lazy_model_operation()` and `do_pending_operations()` methods. | |||||
self._pending_operations = defaultdict(list) | |||||
# Populate apps and models, unless it's the master registry. | |||||
if installed_apps is not None: | |||||
self.populate(installed_apps) | |||||
def populate(self, installed_apps=None): | |||||
""" | |||||
Load application configurations and models. | |||||
Import each application module and then each model module. | |||||
It is thread-safe and idempotent, but not reentrant. | |||||
""" | |||||
if self.ready: | |||||
return | |||||
# populate() might be called by two threads in parallel on servers | |||||
# that create threads before initializing the WSGI callable. | |||||
with self._lock: | |||||
if self.ready: | |||||
return | |||||
# An RLock prevents other threads from entering this section. The | |||||
# compare and set operation below is atomic. | |||||
if self.loading: | |||||
# Prevent reentrant calls to avoid running AppConfig.ready() | |||||
# methods twice. | |||||
raise RuntimeError("populate() isn't reentrant") | |||||
self.loading = True | |||||
# Phase 1: initialize app configs and import app modules. | |||||
for entry in installed_apps: | |||||
if isinstance(entry, AppConfig): | |||||
app_config = entry | |||||
else: | |||||
app_config = AppConfig.create(entry) | |||||
if app_config.label in self.app_configs: | |||||
raise ImproperlyConfigured( | |||||
"Application labels aren't unique, " | |||||
"duplicates: %s" % app_config.label) | |||||
self.app_configs[app_config.label] = app_config | |||||
app_config.apps = self | |||||
# Check for duplicate app names. | |||||
counts = Counter( | |||||
app_config.name for app_config in self.app_configs.values()) | |||||
duplicates = [ | |||||
name for name, count in counts.most_common() if count > 1] | |||||
if duplicates: | |||||
raise ImproperlyConfigured( | |||||
"Application names aren't unique, " | |||||
"duplicates: %s" % ", ".join(duplicates)) | |||||
self.apps_ready = True | |||||
# Phase 2: import models modules. | |||||
for app_config in self.app_configs.values(): | |||||
app_config.import_models() | |||||
self.clear_cache() | |||||
self.models_ready = True | |||||
# Phase 3: run ready() methods of app configs. | |||||
for app_config in self.get_app_configs(): | |||||
app_config.ready() | |||||
self.ready = True | |||||
self.ready_event.set() | |||||
def check_apps_ready(self): | |||||
"""Raise an exception if all apps haven't been imported yet.""" | |||||
if not self.apps_ready: | |||||
from django.conf import settings | |||||
# If "not ready" is due to unconfigured settings, accessing | |||||
# INSTALLED_APPS raises a more helpful ImproperlyConfigured | |||||
# exception. | |||||
settings.INSTALLED_APPS | |||||
raise AppRegistryNotReady("Apps aren't loaded yet.") | |||||
def check_models_ready(self): | |||||
"""Raise an exception if all models haven't been imported yet.""" | |||||
if not self.models_ready: | |||||
raise AppRegistryNotReady("Models aren't loaded yet.") | |||||
def get_app_configs(self): | |||||
"""Import applications and return an iterable of app configs.""" | |||||
self.check_apps_ready() | |||||
return self.app_configs.values() | |||||
def get_app_config(self, app_label): | |||||
""" | |||||
Import applications and returns an app config for the given label. | |||||
Raise LookupError if no application exists with this label. | |||||
""" | |||||
self.check_apps_ready() | |||||
try: | |||||
return self.app_configs[app_label] | |||||
except KeyError: | |||||
message = "No installed app with label '%s'." % app_label | |||||
for app_config in self.get_app_configs(): | |||||
if app_config.name == app_label: | |||||
message += " Did you mean '%s'?" % app_config.label | |||||
break | |||||
raise LookupError(message) | |||||
# This method is performance-critical at least for Django's test suite. | |||||
@functools.lru_cache(maxsize=None) | |||||
def get_models(self, include_auto_created=False, include_swapped=False): | |||||
""" | |||||
Return a list of all installed models. | |||||
By default, the following models aren't included: | |||||
- auto-created models for many-to-many relations without | |||||
an explicit intermediate table, | |||||
- models that have been swapped out. | |||||
Set the corresponding keyword argument to True to include such models. | |||||
""" | |||||
self.check_models_ready() | |||||
result = [] | |||||
for app_config in self.app_configs.values(): | |||||
result.extend(app_config.get_models(include_auto_created, include_swapped)) | |||||
return result | |||||
def get_model(self, app_label, model_name=None, require_ready=True): | |||||
""" | |||||
Return the model matching the given app_label and model_name. | |||||
As a shortcut, app_label may be in the form <app_label>.<model_name>. | |||||
model_name is case-insensitive. | |||||
Raise LookupError if no application exists with this label, or no | |||||
model exists with this name in the application. Raise ValueError if | |||||
called with a single argument that doesn't contain exactly one dot. | |||||
""" | |||||
if require_ready: | |||||
self.check_models_ready() | |||||
else: | |||||
self.check_apps_ready() | |||||
if model_name is None: | |||||
app_label, model_name = app_label.split('.') | |||||
app_config = self.get_app_config(app_label) | |||||
if not require_ready and app_config.models is None: | |||||
app_config.import_models() | |||||
return app_config.get_model(model_name, require_ready=require_ready) | |||||
def register_model(self, app_label, model): | |||||
# Since this method is called when models are imported, it cannot | |||||
# perform imports because of the risk of import loops. It mustn't | |||||
# call get_app_config(). | |||||
model_name = model._meta.model_name | |||||
app_models = self.all_models[app_label] | |||||
if model_name in app_models: | |||||
if (model.__name__ == app_models[model_name].__name__ and | |||||
model.__module__ == app_models[model_name].__module__): | |||||
warnings.warn( | |||||
"Model '%s.%s' was already registered. " | |||||
"Reloading models is not advised as it can lead to inconsistencies, " | |||||
"most notably with related models." % (app_label, model_name), | |||||
RuntimeWarning, stacklevel=2) | |||||
else: | |||||
raise RuntimeError( | |||||
"Conflicting '%s' models in application '%s': %s and %s." % | |||||
(model_name, app_label, app_models[model_name], model)) | |||||
app_models[model_name] = model | |||||
self.do_pending_operations(model) | |||||
self.clear_cache() | |||||
def is_installed(self, app_name): | |||||
""" | |||||
Check whether an application with this name exists in the registry. | |||||
app_name is the full name of the app e.g. 'django.contrib.admin'. | |||||
""" | |||||
self.check_apps_ready() | |||||
return any(ac.name == app_name for ac in self.app_configs.values()) | |||||
def get_containing_app_config(self, object_name): | |||||
""" | |||||
Look for an app config containing a given object. | |||||
object_name is the dotted Python path to the object. | |||||
Return the app config for the inner application in case of nesting. | |||||
Return None if the object isn't in any registered app config. | |||||
""" | |||||
self.check_apps_ready() | |||||
candidates = [] | |||||
for app_config in self.app_configs.values(): | |||||
if object_name.startswith(app_config.name): | |||||
subpath = object_name[len(app_config.name):] | |||||
if subpath == '' or subpath[0] == '.': | |||||
candidates.append(app_config) | |||||
if candidates: | |||||
return sorted(candidates, key=lambda ac: -len(ac.name))[0] | |||||
def get_registered_model(self, app_label, model_name): | |||||
""" | |||||
Similar to get_model(), but doesn't require that an app exists with | |||||
the given app_label. | |||||
It's safe to call this method at import time, even while the registry | |||||
is being populated. | |||||
""" | |||||
model = self.all_models[app_label].get(model_name.lower()) | |||||
if model is None: | |||||
raise LookupError( | |||||
"Model '%s.%s' not registered." % (app_label, model_name)) | |||||
return model | |||||
@functools.lru_cache(maxsize=None) | |||||
def get_swappable_settings_name(self, to_string): | |||||
""" | |||||
For a given model string (e.g. "auth.User"), return the name of the | |||||
corresponding settings name if it refers to a swappable model. If the | |||||
referred model is not swappable, return None. | |||||
This method is decorated with lru_cache because it's performance | |||||
critical when it comes to migrations. Since the swappable settings don't | |||||
change after Django has loaded the settings, there is no reason to get | |||||
the respective settings attribute over and over again. | |||||
""" | |||||
for model in self.get_models(include_swapped=True): | |||||
swapped = model._meta.swapped | |||||
# Is this model swapped out for the model given by to_string? | |||||
if swapped and swapped == to_string: | |||||
return model._meta.swappable | |||||
# Is this model swappable and the one given by to_string? | |||||
if model._meta.swappable and model._meta.label == to_string: | |||||
return model._meta.swappable | |||||
return None | |||||
def set_available_apps(self, available): | |||||
""" | |||||
Restrict the set of installed apps used by get_app_config[s]. | |||||
available must be an iterable of application names. | |||||
set_available_apps() must be balanced with unset_available_apps(). | |||||
Primarily used for performance optimization in TransactionTestCase. | |||||
This method is safe in the sense that it doesn't trigger any imports. | |||||
""" | |||||
available = set(available) | |||||
installed = {app_config.name for app_config in self.get_app_configs()} | |||||
if not available.issubset(installed): | |||||
raise ValueError( | |||||
"Available apps isn't a subset of installed apps, extra apps: %s" | |||||
% ", ".join(available - installed) | |||||
) | |||||
self.stored_app_configs.append(self.app_configs) | |||||
self.app_configs = OrderedDict( | |||||
(label, app_config) | |||||
for label, app_config in self.app_configs.items() | |||||
if app_config.name in available) | |||||
self.clear_cache() | |||||
def unset_available_apps(self): | |||||
"""Cancel a previous call to set_available_apps().""" | |||||
self.app_configs = self.stored_app_configs.pop() | |||||
self.clear_cache() | |||||
def set_installed_apps(self, installed): | |||||
""" | |||||
Enable a different set of installed apps for get_app_config[s]. | |||||
installed must be an iterable in the same format as INSTALLED_APPS. | |||||
set_installed_apps() must be balanced with unset_installed_apps(), | |||||
even if it exits with an exception. | |||||
Primarily used as a receiver of the setting_changed signal in tests. | |||||
This method may trigger new imports, which may add new models to the | |||||
registry of all imported models. They will stay in the registry even | |||||
after unset_installed_apps(). Since it isn't possible to replay | |||||
imports safely (e.g. that could lead to registering listeners twice), | |||||
models are registered when they're imported and never removed. | |||||
""" | |||||
if not self.ready: | |||||
raise AppRegistryNotReady("App registry isn't ready yet.") | |||||
self.stored_app_configs.append(self.app_configs) | |||||
self.app_configs = OrderedDict() | |||||
self.apps_ready = self.models_ready = self.loading = self.ready = False | |||||
self.clear_cache() | |||||
self.populate(installed) | |||||
def unset_installed_apps(self): | |||||
"""Cancel a previous call to set_installed_apps().""" | |||||
self.app_configs = self.stored_app_configs.pop() | |||||
self.apps_ready = self.models_ready = self.ready = True | |||||
self.clear_cache() | |||||
def clear_cache(self): | |||||
""" | |||||
Clear all internal caches, for methods that alter the app registry. | |||||
This is mostly used in tests. | |||||
""" | |||||
# Call expire cache on each model. This will purge | |||||
# the relation tree and the fields cache. | |||||
self.get_models.cache_clear() | |||||
if self.ready: | |||||
# Circumvent self.get_models() to prevent that the cache is refilled. | |||||
# This particularly prevents that an empty value is cached while cloning. | |||||
for app_config in self.app_configs.values(): | |||||
for model in app_config.get_models(include_auto_created=True): | |||||
model._meta._expire_cache() | |||||
def lazy_model_operation(self, function, *model_keys): | |||||
""" | |||||
Take a function and a number of ("app_label", "modelname") tuples, and | |||||
when all the corresponding models have been imported and registered, | |||||
call the function with the model classes as its arguments. | |||||
The function passed to this method must accept exactly n models as | |||||
arguments, where n=len(model_keys). | |||||
""" | |||||
# Base case: no arguments, just execute the function. | |||||
if not model_keys: | |||||
function() | |||||
# Recursive case: take the head of model_keys, wait for the | |||||
# corresponding model class to be imported and registered, then apply | |||||
# that argument to the supplied function. Pass the resulting partial | |||||
# to lazy_model_operation() along with the remaining model args and | |||||
# repeat until all models are loaded and all arguments are applied. | |||||
else: | |||||
next_model, *more_models = model_keys | |||||
# This will be executed after the class corresponding to next_model | |||||
# has been imported and registered. The `func` attribute provides | |||||
# duck-type compatibility with partials. | |||||
def apply_next_model(model): | |||||
next_function = partial(apply_next_model.func, model) | |||||
self.lazy_model_operation(next_function, *more_models) | |||||
apply_next_model.func = function | |||||
# If the model has already been imported and registered, partially | |||||
# apply it to the function now. If not, add it to the list of | |||||
# pending operations for the model, where it will be executed with | |||||
# the model class as its sole argument once the model is ready. | |||||
try: | |||||
model_class = self.get_registered_model(*next_model) | |||||
except LookupError: | |||||
self._pending_operations[next_model].append(apply_next_model) | |||||
else: | |||||
apply_next_model(model_class) | |||||
def do_pending_operations(self, model): | |||||
""" | |||||
Take a newly-prepared model and pass it to each function waiting for | |||||
it. This is called at the very end of Apps.register_model(). | |||||
""" | |||||
key = model._meta.app_label, model._meta.model_name | |||||
for function in self._pending_operations.pop(key, []): | |||||
function(model) | |||||
apps = Apps(installed_apps=None) |
from django.contrib import admin | |||||
# Register your models here. |
from django.apps import AppConfig | |||||
class {{ camel_case_app_name }}Config(AppConfig): | |||||
name = '{{ app_name }}' |
from django.test import TestCase | |||||
# Create your tests here. |
from django.shortcuts import render | |||||
# Create your views here. |
""" | |||||
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')), | |||||
('hy', gettext_noop('Armenian')), | |||||
('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 HttpOnly flag. | |||||
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 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'j E Y' | |||||
TIME_FORMAT = 'G:i' | |||||
DATETIME_FORMAT = 'j E Y, G:i' | |||||
YEAR_MONTH_FORMAT = 'F Y' | |||||
MONTH_DAY_FORMAT = 'j F' | |||||
SHORT_DATE_FORMAT = 'd.m.Y' | |||||
SHORT_DATETIME_FORMAT = 'd.m.Y H:i' | |||||
FIRST_DAY_OF_WEEK = 1 # Monday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d.%m.%Y', # '25.10.2006' | |||||
'%d.%m.%y', # '25.10.06' | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59' | |||||
'%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200' | |||||
'%d.%m.%Y %H:%M', # '25.10.2006 14:30' | |||||
'%d.%m.%Y', # '25.10.2006' | |||||
'%d.%m.%y %H:%M:%S', # '25.10.06 14:30:59' | |||||
'%d.%m.%y %H:%M:%S.%f', # '25.10.06 14:30:59.000200' | |||||
'%d.%m.%y %H:%M', # '25.10.06 14:30' | |||||
'%d.%m.%y', # '25.10.06' | |||||
] | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'd F Y' | |||||
TIME_FORMAT = 'H:i' | |||||
# DATETIME_FORMAT = | |||||
# YEAR_MONTH_FORMAT = | |||||
MONTH_DAY_FORMAT = 'j F' | |||||
SHORT_DATE_FORMAT = 'd.m.Y' | |||||
# SHORT_DATETIME_FORMAT = | |||||
# FIRST_DAY_OF_WEEK = | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
# DATE_INPUT_FORMATS = | |||||
# TIME_INPUT_FORMATS = | |||||
# DATETIME_INPUT_FORMATS = | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = ' ' # Non-breaking space | |||||
# NUMBER_GROUPING = |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'j F, Y' | |||||
TIME_FORMAT = 'g:i A' | |||||
# DATETIME_FORMAT = | |||||
YEAR_MONTH_FORMAT = 'F Y' | |||||
MONTH_DAY_FORMAT = 'j F' | |||||
SHORT_DATE_FORMAT = 'j M, Y' | |||||
# SHORT_DATETIME_FORMAT = | |||||
FIRST_DAY_OF_WEEK = 6 # Saturday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d/%m/%Y', # 25/10/2016 | |||||
'%d/%m/%y', # 25/10/16 | |||||
'%d-%m-%Y', # 25-10-2016 | |||||
'%d-%m-%y', # 25-10-16 | |||||
] | |||||
TIME_INPUT_FORMATS = [ | |||||
'%H:%M:%S', # 14:30:59 | |||||
'%H:%M', # 14:30 | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d/%m/%Y %H:%M:%S', # 25/10/2006 14:30:59 | |||||
'%d/%m/%Y %H:%M', # 25/10/2006 14:30 | |||||
] | |||||
DECIMAL_SEPARATOR = '.' | |||||
THOUSAND_SEPARATOR = ',' | |||||
# NUMBER_GROUPING = |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'j. E Y' | |||||
TIME_FORMAT = 'G:i' | |||||
DATETIME_FORMAT = 'j. E Y G:i' | |||||
YEAR_MONTH_FORMAT = 'F Y' | |||||
MONTH_DAY_FORMAT = 'j. F' | |||||
SHORT_DATE_FORMAT = 'd.m.Y' | |||||
SHORT_DATETIME_FORMAT = 'd.m.Y G:i' | |||||
FIRST_DAY_OF_WEEK = 1 # Monday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d.%m.%Y', '%d.%m.%y', # '05.01.2006', '05.01.06' | |||||
'%d. %m. %Y', '%d. %m. %y', # '5. 1. 2006', '5. 1. 06' | |||||
# '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006' | |||||
] | |||||
# Kept ISO formats as one is in first position | |||||
TIME_INPUT_FORMATS = [ | |||||
'%H:%M:%S', # '04:30:59' | |||||
'%H.%M', # '04.30' | |||||
'%H:%M', # '04:30' | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d.%m.%Y %H:%M:%S', # '05.01.2006 04:30:59' | |||||
'%d.%m.%Y %H:%M:%S.%f', # '05.01.2006 04:30:59.000200' | |||||
'%d.%m.%Y %H.%M', # '05.01.2006 04.30' | |||||
'%d.%m.%Y %H:%M', # '05.01.2006 04:30' | |||||
'%d.%m.%Y', # '05.01.2006' | |||||
'%d. %m. %Y %H:%M:%S', # '05. 01. 2006 04:30:59' | |||||
'%d. %m. %Y %H:%M:%S.%f', # '05. 01. 2006 04:30:59.000200' | |||||
'%d. %m. %Y %H.%M', # '05. 01. 2006 04.30' | |||||
'%d. %m. %Y %H:%M', # '05. 01. 2006 04:30' | |||||
'%d. %m. %Y', # '05. 01. 2006' | |||||
'%Y-%m-%d %H.%M', # '2006-01-05 04.30' | |||||
] | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'j. F Y' | |||||
TIME_FORMAT = 'H:i' | |||||
DATETIME_FORMAT = 'j. F Y H:i' | |||||
YEAR_MONTH_FORMAT = 'F Y' | |||||
MONTH_DAY_FORMAT = 'j. F' | |||||
SHORT_DATE_FORMAT = 'd.m.Y' | |||||
SHORT_DATETIME_FORMAT = 'd.m.Y H:i' | |||||
FIRST_DAY_OF_WEEK = 1 # Monday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06' | |||||
# '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006' | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59' | |||||
'%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200' | |||||
'%d.%m.%Y %H:%M', # '25.10.2006 14:30' | |||||
'%d.%m.%Y', # '25.10.2006' | |||||
] | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '.' | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'j. F Y' | |||||
TIME_FORMAT = 'H:i' | |||||
DATETIME_FORMAT = 'j. F Y H:i' | |||||
YEAR_MONTH_FORMAT = 'F Y' | |||||
MONTH_DAY_FORMAT = 'j. F' | |||||
SHORT_DATE_FORMAT = 'd.m.Y' | |||||
SHORT_DATETIME_FORMAT = 'd.m.Y H:i' | |||||
FIRST_DAY_OF_WEEK = 1 # Monday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d.%m.%Y', '%d.%m.%y', # '25.10.2006', '25.10.06' | |||||
# '%d. %B %Y', '%d. %b. %Y', # '25. October 2006', '25. Oct. 2006' | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d.%m.%Y %H:%M:%S', # '25.10.2006 14:30:59' | |||||
'%d.%m.%Y %H:%M:%S.%f', # '25.10.2006 14:30:59.000200' | |||||
'%d.%m.%Y %H:%M', # '25.10.2006 14:30' | |||||
'%d.%m.%Y', # '25.10.2006' | |||||
] | |||||
# these are the separators for non-monetary numbers. For monetary numbers, | |||||
# the DECIMAL_SEPARATOR is a . (decimal point) and the THOUSAND_SEPARATOR is a | |||||
# ' (single quote). | |||||
# For details, please refer to http://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de | |||||
# (in German) and the documentation | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'd/m/Y' | |||||
TIME_FORMAT = 'P' | |||||
DATETIME_FORMAT = 'd/m/Y P' | |||||
YEAR_MONTH_FORMAT = 'F Y' | |||||
MONTH_DAY_FORMAT = 'j F' | |||||
SHORT_DATE_FORMAT = 'd/m/Y' | |||||
SHORT_DATETIME_FORMAT = 'd/m/Y P' | |||||
FIRST_DAY_OF_WEEK = 0 # Sunday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d/%m/%Y', '%d/%m/%y', '%Y-%m-%d', # '25/10/2006', '25/10/06', '2006-10-25', | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' | |||||
'%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200' | |||||
'%d/%m/%Y %H:%M', # '25/10/2006 14:30' | |||||
'%d/%m/%Y', # '25/10/2006' | |||||
'%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59' | |||||
'%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200' | |||||
'%d/%m/%y %H:%M', # '25/10/06 14:30' | |||||
'%d/%m/%y', # '25/10/06' | |||||
'%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' | |||||
] | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '.' | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'j M Y' # '25 Oct 2006' | |||||
TIME_FORMAT = 'P' # '2:30 p.m.' | |||||
DATETIME_FORMAT = 'j M Y, P' # '25 Oct 2006, 2:30 p.m.' | |||||
YEAR_MONTH_FORMAT = 'F Y' # 'October 2006' | |||||
MONTH_DAY_FORMAT = 'j F' # '25 October' | |||||
SHORT_DATE_FORMAT = 'd/m/Y' # '25/10/2006' | |||||
SHORT_DATETIME_FORMAT = 'd/m/Y P' # '25/10/2006 2:30 p.m.' | |||||
FIRST_DAY_OF_WEEK = 0 # Sunday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/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' | |||||
] | |||||
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' | |||||
'%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' | |||||
'%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200' | |||||
'%d/%m/%Y %H:%M', # '25/10/2006 14:30' | |||||
'%d/%m/%Y', # '25/10/2006' | |||||
'%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59' | |||||
'%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200' | |||||
'%d/%m/%y %H:%M', # '25/10/06 14:30' | |||||
'%d/%m/%y', # '25/10/06' | |||||
] | |||||
DECIMAL_SEPARATOR = '.' | |||||
THOUSAND_SEPARATOR = ',' | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'j M Y' # '25 Oct 2006' | |||||
TIME_FORMAT = 'P' # '2:30 p.m.' | |||||
DATETIME_FORMAT = 'j M Y, P' # '25 Oct 2006, 2:30 p.m.' | |||||
YEAR_MONTH_FORMAT = 'F Y' # 'October 2006' | |||||
MONTH_DAY_FORMAT = 'j F' # '25 October' | |||||
SHORT_DATE_FORMAT = 'd/m/Y' # '25/10/2006' | |||||
SHORT_DATETIME_FORMAT = 'd/m/Y P' # '25/10/2006 2:30 p.m.' | |||||
FIRST_DAY_OF_WEEK = 1 # Monday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/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' | |||||
] | |||||
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' | |||||
'%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' | |||||
'%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200' | |||||
'%d/%m/%Y %H:%M', # '25/10/2006 14:30' | |||||
'%d/%m/%Y', # '25/10/2006' | |||||
'%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59' | |||||
'%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200' | |||||
'%d/%m/%y %H:%M', # '25/10/06 14:30' | |||||
'%d/%m/%y', # '25/10/06' | |||||
] | |||||
DECIMAL_SEPARATOR = '.' | |||||
THOUSAND_SEPARATOR = ',' | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = r'j N Y' | |||||
TIME_FORMAT = r'H:i' | |||||
DATETIME_FORMAT = r'j N Y H:i' | |||||
YEAR_MONTH_FORMAT = r'F Y' | |||||
MONTH_DAY_FORMAT = r'j \d\e F' | |||||
SHORT_DATE_FORMAT = r'd/m/Y' | |||||
SHORT_DATETIME_FORMAT = r'd/m/Y H:i' | |||||
FIRST_DAY_OF_WEEK = 0 # 0: Sunday, 1: Monday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d/%m/%Y', # '31/12/2009' | |||||
'%d/%m/%y', # '31/12/09' | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d/%m/%Y %H:%M:%S', | |||||
'%d/%m/%Y %H:%M:%S.%f', | |||||
'%d/%m/%Y %H:%M', | |||||
'%d/%m/%y %H:%M:%S', | |||||
'%d/%m/%y %H:%M:%S.%f', | |||||
'%d/%m/%y %H:%M', | |||||
] | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '.' | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
DATE_FORMAT = r'j \d\e F \d\e Y' | |||||
TIME_FORMAT = 'H:i' | |||||
DATETIME_FORMAT = r'j \d\e F \d\e Y \a \l\a\s H:i' | |||||
YEAR_MONTH_FORMAT = r'F \d\e Y' | |||||
MONTH_DAY_FORMAT = r'j \d\e F' | |||||
SHORT_DATE_FORMAT = 'd/m/Y' | |||||
SHORT_DATETIME_FORMAT = 'd/m/Y H:i' | |||||
FIRST_DAY_OF_WEEK = 1 | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06' | |||||
'%Y%m%d', # '20061025' | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d/%m/%Y %H:%M:%S', | |||||
'%d/%m/%Y %H:%M:%S.%f', | |||||
'%d/%m/%Y %H:%M', | |||||
'%d/%m/%y %H:%M:%S', | |||||
'%d/%m/%y %H:%M:%S.%f', | |||||
'%d/%m/%y %H:%M', | |||||
] | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '.' | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = r'Y\k\o N j\a' | |||||
TIME_FORMAT = 'H:i' | |||||
DATETIME_FORMAT = r'Y\k\o N j\a, H:i' | |||||
YEAR_MONTH_FORMAT = r'Y\k\o F' | |||||
MONTH_DAY_FORMAT = r'F\r\e\n j\a' | |||||
SHORT_DATE_FORMAT = 'Y-m-d' | |||||
SHORT_DATETIME_FORMAT = 'Y-m-d H:i' | |||||
FIRST_DAY_OF_WEEK = 1 # Astelehena | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
# DATE_INPUT_FORMATS = | |||||
# TIME_INPUT_FORMATS = | |||||
# DATETIME_INPUT_FORMATS = | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '.' | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'j F Y' | |||||
TIME_FORMAT = 'H:i' | |||||
DATETIME_FORMAT = 'j F Y H:i' | |||||
YEAR_MONTH_FORMAT = 'F Y' | |||||
MONTH_DAY_FORMAT = 'j F' | |||||
SHORT_DATE_FORMAT = 'j N Y' | |||||
SHORT_DATETIME_FORMAT = 'j N Y H:i' | |||||
FIRST_DAY_OF_WEEK = 1 # Monday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d/%m/%Y', '%d/%m/%y', # '25/10/2006', '25/10/06' | |||||
'%d.%m.%Y', '%d.%m.%y', # Swiss [fr_CH), '25.10.2006', '25.10.06' | |||||
# '%d %B %Y', '%d %b %Y', # '25 octobre 2006', '25 oct. 2006' | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' | |||||
'%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200' | |||||
'%d/%m/%Y %H:%M', # '25/10/2006 14:30' | |||||
'%d/%m/%Y', # '25/10/2006' | |||||
'%d.%m.%Y %H:%M:%S', # Swiss [fr_CH), '25.10.2006 14:30:59' | |||||
'%d.%m.%Y %H:%M:%S.%f', # Swiss (fr_CH), '25.10.2006 14:30:59.000200' | |||||
'%d.%m.%Y %H:%M', # Swiss (fr_CH), '25.10.2006 14:30' | |||||
'%d.%m.%Y', # Swiss (fr_CH), '25.10.2006' | |||||
] | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '\xa0' # non-breaking space | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
# DATE_FORMAT = | |||||
# TIME_FORMAT = | |||||
# DATETIME_FORMAT = | |||||
# YEAR_MONTH_FORMAT = | |||||
# MONTH_DAY_FORMAT = | |||||
# SHORT_DATE_FORMAT = | |||||
# SHORT_DATETIME_FORMAT = | |||||
# FIRST_DAY_OF_WEEK = | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
# DATE_INPUT_FORMATS = | |||||
# TIME_INPUT_FORMATS = | |||||
# DATETIME_INPUT_FORMATS = | |||||
# DECIMAL_SEPARATOR = | |||||
# THOUSAND_SEPARATOR = | |||||
# NUMBER_GROUPING = |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = r'j \d\e F \d\e Y' | |||||
TIME_FORMAT = 'H:i' | |||||
DATETIME_FORMAT = r'j \d\e F \d\e Y \á\s H:i' | |||||
YEAR_MONTH_FORMAT = r'F \d\e Y' | |||||
MONTH_DAY_FORMAT = r'j \d\e F' | |||||
SHORT_DATE_FORMAT = 'd-m-Y' | |||||
SHORT_DATETIME_FORMAT = 'd-m-Y, H:i' | |||||
FIRST_DAY_OF_WEEK = 1 # Monday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
# DATE_INPUT_FORMATS = | |||||
# TIME_INPUT_FORMATS = | |||||
# DATETIME_INPUT_FORMATS = | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '.' | |||||
# NUMBER_GROUPING = |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'Y. F j.' | |||||
TIME_FORMAT = 'H:i' | |||||
DATETIME_FORMAT = 'Y. F j. H:i' | |||||
YEAR_MONTH_FORMAT = 'Y. F' | |||||
MONTH_DAY_FORMAT = 'F j.' | |||||
SHORT_DATE_FORMAT = 'Y.m.d.' | |||||
SHORT_DATETIME_FORMAT = 'Y.m.d. H:i' | |||||
FIRST_DAY_OF_WEEK = 1 # Monday | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%Y.%m.%d.', # '2006.10.25.' | |||||
] | |||||
TIME_INPUT_FORMATS = [ | |||||
'%H:%M:%S', # '14:30:59' | |||||
'%H:%M', # '14:30' | |||||
] | |||||
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.' | |||||
] | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = ' ' # Non-breaking space | |||||
NUMBER_GROUPING = 3 |
# This file is distributed under the same license as the Django package. | |||||
# | |||||
# The *_FORMAT strings use the Django date format syntax, | |||||
# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date | |||||
DATE_FORMAT = 'd F Y' # 25 Ottobre 2006 | |||||
TIME_FORMAT = 'H:i' # 14:30 | |||||
DATETIME_FORMAT = 'l d F Y H:i' # Mercoledì 25 Ottobre 2006 14:30 | |||||
YEAR_MONTH_FORMAT = 'F Y' # Ottobre 2006 | |||||
MONTH_DAY_FORMAT = 'j F' # 25 Ottobre | |||||
SHORT_DATE_FORMAT = 'd/m/Y' # 25/12/2009 | |||||
SHORT_DATETIME_FORMAT = 'd/m/Y H:i' # 25/10/2009 14:30 | |||||
FIRST_DAY_OF_WEEK = 1 # Lunedì | |||||
# The *_INPUT_FORMATS strings use the Python strftime format syntax, | |||||
# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior | |||||
DATE_INPUT_FORMATS = [ | |||||
'%d/%m/%Y', '%Y/%m/%d', # '25/10/2006', '2008/10/25' | |||||
'%d-%m-%Y', '%Y-%m-%d', # '25-10-2006', '2008-10-25' | |||||
'%d-%m-%y', '%d/%m/%y', # '25-10-06', '25/10/06' | |||||
] | |||||
DATETIME_INPUT_FORMATS = [ | |||||
'%d/%m/%Y %H:%M:%S', # '25/10/2006 14:30:59' | |||||
'%d/%m/%Y %H:%M:%S.%f', # '25/10/2006 14:30:59.000200' | |||||
'%d/%m/%Y %H:%M', # '25/10/2006 14:30' | |||||
'%d/%m/%Y', # '25/10/2006' | |||||
'%d/%m/%y %H:%M:%S', # '25/10/06 14:30:59' | |||||
'%d/%m/%y %H:%M:%S.%f', # '25/10/06 14:30:59.000200' | |||||
'%d/%m/%y %H:%M', # '25/10/06 14:30' | |||||
'%d/%m/%y', # '25/10/06' | |||||
'%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' | |||||
'%d-%m-%Y %H:%M:%S', # '25-10-2006 14:30:59' | |||||
'%d-%m-%Y %H:%M:%S.%f', # '25-10-2006 14:30:59.000200' | |||||
'%d-%m-%Y %H:%M', # '25-10-2006 14:30' | |||||
'%d-%m-%Y', # '25-10-2006' | |||||
'%d-%m-%y %H:%M:%S', # '25-10-06 14:30:59' | |||||
'%d-%m-%y %H:%M:%S.%f', # '25-10-06 14:30:59.000200' | |||||
'%d-%m-%y %H:%M', # '25-10-06 14:30' | |||||
'%d-%m-%y', # '25-10-06' | |||||
] | |||||
DECIMAL_SEPARATOR = ',' | |||||
THOUSAND_SEPARATOR = '.' | |||||
NUMBER_GROUPING = 3 |