Mixins¶
The mixins are defined in kaio/mixins and inherit from Object. They are defined from a function that takes the name from the .ini (onwards app.ini) file section.
The params into the app.ini file are set without quotation marks, either are numbers, texts, strings, etc.
CachesMixin¶
This mixin allows us to configure the cache of our application. It is intended for use with Redis
in
production. If a cache type is not defined, it means that we have dummy
cache.
from kaio.mixins import CachesMixin
Section: Cache
Parameters
- CACHE_TYPE
- cache type, by default
locmem
, options:locmem
,redis
,dummy
- CACHE_REDIS_DB
- redis database number that we’ll use as cache into redis. By default,
2
. - CACHE_REDIS_PASSWORD
- Password for redis. By default without password.
- REDIS_HOST
- redis host name. By default
localhost
- REDIS_PORT
- port of the redis server. By default
6379
- CACHE_PREFIX
- prefix to use in the cache keys for the projecte. By default is the project
SLUG
. - CACHE_TIMEOUT
- Cache expiration time. By default
3600
seconds, 1 hour. - CACHE_MAX_ENTRIES
- Maximum number of cached entries. By default
10000
.
CachesMixin also allows to configure the cache for sessions. You must set
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
or '.cached_db'
.
By default use almost same settings as default cache.
- SESSION_CACHE_TYPE
- cache type, by default
CACHE_TYPE
, options:redis
- SESSION_CACHE_REDIS_DB
- redis database number that we’ll use as cache into redis. By default,
3
. - SESSION_CACHE_REDIS_PASSWORD
- Password for redis. By default without password.
- SESSION_REDIS_HOST
- redis host name. By default
REDIS_HOST
- SESSION_REDIS_PORT
- port of the redis server. By default
REDIS_PORT
- SESSION_CACHE_PREFIX
- prefix to use in the cache keys for the projecte. By default
CACHE_PREFIX_session
. - SESSION_CACHE_TIMEOUT
- Cache expiration time. By default
None
(no timeout). - SESSION_CACHE_MAX_ENTRIES
- Maximum number of cached entries. By default
1000000
. - SESSION_CACHE_ALIAS
- Selects the cache to use for sessions. By default
sessions
.
CeleryMixin¶
This mixin allows us to configure Celery in case we use it in our application.
from kaio.mixins import CeleryMixin
Section: Celery
Parameters
- CELERY_DISABLE_RATE_LIMITS
True
- CELERYBEAT_SCHEDULER
django_celery_beat.schedulers:DatabaseScheduler
- CELERY_DEFAULT_QUEUE
- Default:
celery
. - CELERY_RESULT_BACKEND
- Default
redis://{REDIS_HOST}:{REDIS_PORT}/{CELERY_REDIS_RESULT_DB}
if Redis is available, elseNone
. - CELERY_IGNORE_RESULT
- Default
False
. - CELERY_RESULT_EXPIRES
- Default:
86400
(1 day in seconds). - CELERY_MAX_CACHED_RESULTS
- Default
5000
. - CELERY_CACHE_BACKEND
- Default:
default
- CELERY_ALWAYS_EAGER
- Default
False
. - CELERY_EAGER_PROPAGATES_EXCEPTIONS
- Default
True
. - CELERY_REDIS_RESULT_DB
- Default
0
. - CELERY_REDIS_BROKER_DB
- Default
0
. - RABBITMQ_HOST
- Default
localhost
. - RABBITMQ_PORT
- Default
5672
. - RABBITMQ_USER
- Default
guest
. - RABBITMQ_PASSWD
- Default
guest
. - RABBITMQ_VHOST
- Default
/
. - BROKER_TYPE
- Default
redis
. - BROKER_URL
- Default for Redis:
redis://{REDIS_HOST}:{REDIS_PORT}/{CELERY_REDIS_RESULT_DB}
. - Default for RabbitMQ:
amqp://{RABBITMQ_USER}:{RABBITMQ_PASSWD}@{RABBITMQ_HOST}:{RABBITMQ_PORT}/{RABBITMQ_VHOST}
- Default for others:
django://
.
- Default for Redis:
CmsMixin¶
Warning
Deprecated mixin
Mixin that helps us to get the languages configured on the project.
from kaio.mixins import CMSMixin
Section: Compress
Parameters
CompressMixin¶
django-compressor configuration.
from kaio.mixins import CompressMixin
Section: Compress
Parameters
- COMPRESS_DEBUG_TOGGLE
- by default
nocompress
in DEBUG mode. - COMPRESS_ENABLED
- by default
False
. - COMPRESS_CSS_HASHING_METHOD
- by default
content
. - COMPRESS_LESSC_ENABLED
- by default
True
. - COMPRESS_SASS_ENABLED
- by default
True
. - COMPRESS_BABEL_ENABLED
- by default
False
. - COMPRESS_LESSC_PATH
- by default
lessc
. - COMPRESS_SASS_PATH
- by default
node-sass
. - COMPRESS_BABEL_PATH
- by default
babel
. - COMPRESS_PRECOMPILERS
- by default includes automatically less, babel and coffeescript if they are active.
- COMPRESS_OUTPUT_DIR
- by default
CACHE/
. - COMPRESS_OFFLINE
- by default
False
. - COMPRESS_OFFLINE_TIMEOUT
- by default
31536000
(1 year in seconds). - COMPRESS_OFFLINE_MANIFEST
- by default
manifest.json
.
Static offline compression
In order to be able to use it you have to follow two steps:
- add COMPRESS_OFFLINE = True to app.ini file
- the
{% compress js/css %}
can not have any django logic, no vars, no templatetags, no subblocks…
This last step is advisable to follow it as a good practice just in case in any future moment we want the COMPRESS_OFFLINE feature.
Example of the [Compress] section with compress activated and compress offline activated. LESS, SASS and BABEL suport are active by default:
...
[Compress]
COMPRESS_ENABLED = True
COMPRESS_OFFLINE = True
...
The idea is to have COMPRESS_OFFLINE = False in development environment and to have COMPRESS_OFFLINE = True once we deploy the project to production environment.
In order to test it in development environment you have to execute
python manage.py collectstatic
and then
python manage.py compress
DatabaseMixin¶
Database access configuration.
from kaio.mixins import DatabasesMixin
Section: Database
Parameters
- DATABASE_ENGINE
- by default
sqlite3
, allowsqlite3
,postgresql_psycopg2
,mysql
,oracle
- DATABASE_NAME
- default name, if we use
sqlite3
it will bedb.sqlite
- DATABASE_USER
- user to use
- DATABASE_PASSWORD
- password
- DATABASE_HOST
- host name
- DATABASE_PORT
- port number
- DATABASE_CONN_MAX_AGE
- by default
0
. - DATABASE_OPTIONS_OPTIONS
- string to add to database options setting. Empty by default. Example to change the postgresql schema:
DATABASE_OPTIONS_OPTIONS = -c search_path=some_schema
DebugMixin¶
This mixin allows us to define and work with the debug parameters and configure django-debug-toolbar
to be used in our application. Therefore its use depends on whether this module is configured
in the requirements.txt
of the project, otherwise we will not have activated the option of the debug toolbar
.
from kaio.mixins import DebugMixin
Section: Debug
Parameters
- DEBUG
- by default
False
. - TEMPLATE_DEBUG
- by default same as DEBUG.
- ENABLE_DEBUG_TOOLBAR
- by default same as DEBUG.
False
if the module is not installed. - INTERNAL_IPS
- Debug Toolbar is shown only if your IP is listed in the INTERNAL_IPS setting.
CSV of IPs , by default 127.0.0.1.
If
ENABLE_DEBUG_TOOLBAR
isTrue
it automatically appends IPs for showing the toolbar inside contaniers. https://django-debug-toolbar.readthedocs.io/en/stable/installation.html#configure-internal-ips
EmailMixin¶
Set the basic parameters by default to configure the mail. In its configuration by default allows us to
operate with django-yubin
, leaving its final configuration for the production environment.
from kaio.mixins import EmailMixin
Section: Email
Parameters
- DEFAULT_FROM_EMAIL
- by default
Example <info@example.com>
. - EMAIL_BACKEND
- by default
django.core.mail.backends.smtp.EmailBackend
,django_yubin.smtp_queue.EmailBackend
ordjango_yubin.backends.QueuedEmailBackend
if django_yubin is installed and its version. - EMAIL_FILE_PATH
- by default
None
. - EMAIL_HOST
- by default
localhost
. - EMAIL_HOST_PASSWORD
- by default
''
. - EMAIL_HOST_USER
- by default
''
. - EMAIL_PORT
- by default
25
. - EMAIL_SUBJECT_PREFIX
- Prefix to add to Django’s subject. By default [Django]
- EMAIL_USE_TLS
- by default
False
. - MAILER_PAUSE_SEND
- by default
False
. - MAILER_USE_BACKEND
- by default
django.core.mail.backends.smtp.EmailBackend
. - MAILER_HC_QUEUED_LIMIT_OLD
- If there are emails created, enqueued or in progress for more than x minutes, Yubin HealthCheck
view will show an error. By default
30
. - MAILER_STORAGE_BACKEND
- by default
django_yubin.storage_backends.DatabaseStorageBackend
. - MAILER_STORAGE_DELETE
- by default
True
. - MAILER_FILE_STORAGE_DIR
- by default
yubin
.
Following settings are deprecated, they exist for backwards compatibility.
- MAILER_MAIL_ADMINS_PRIORITY
- by default
None
. - MAILER_MAIL_MANAGERS_PRIORITY
- by default
None
. - MAILER_EMPTY_QUEUE_SLEEP
- by default
30
. - MAILER_LOCK_WAIT_TIMEOUT
- by default
0
. - MAILER_LOCK_PATH
- by default
os.path.join(self.APP_ROOT, "send_mail")
.
Recall that in order to use django_yubin we must configure the cron.
FilerMixin¶
Todo
FilerMixin - Complete description
from kaio.mixins import FilerMixin
Section: Filer
Parameters
- FILER_IS_PUBLIC_DEFAULT
- Default
True
. - FILER_ENABLE_PERMISSIONS
- Default
False
. - FILER_DEBUG
- Default
False
. - FILER_ENABLE_LOGGING
- Default
False
. - FILER_0_8_COMPATIBILITY_MODE
- Default
False
. - THUBMNAIL_DEBUG
- Default
False
. - THUMBNAIL_QUALITY
- Default
85
. - FILER_CUSTOM_NGINX_SERVER
- Default
False
. - DEFAULT_FILE_STORAGE
- Default
django.core.files.storage.FileSystemStorage
. - FILER_CUSTOM_SECURE_MEDIA_ROOT
- Default
filer_private
.
LogsMixin¶
Mixin that handles the configuration the Django logs. Established some default configurations that we use in our development and production environments for the project configuration.
from kaio.mixins import LogsMixin
Section: Logs
Parameters
- LOG_LEVEL
- sets the project logging level. By default:
DEBUG
- DJANGO_LOG_LEVEL
- sets the django logging level. By default:
ERROR
- LOG_FILE
- name of the log file. No established by default, usually specified in production.
- EXTRA_LOGGING
- parameter that sets the log level at module level in a easy way. It does not have a default value.
As a parameter we have to set a module list with the differents levels to log each separated by comma
in the followinf format:
<module>:log_value
E.g.:
[Logs]
EXTRA_LOGGING = oscar.paypal:DEBUG, django.db:INFO
- LOG_FORMATTER_FORMAT
- by default [%(asctime)s] %(levelname)s %(name)s-%(lineno)s %(message)s. This option is not interpolated, see https://docs.python.org/3/library/configparser.html#interpolation-of-values
- LOG_FORMATTER_CLASS
- custom formatter class. By default no formatter class is used.
- LOG_FORMATTER_EXTRA_FIELDS
- optional extra fields passed to the logger formatter class.
SentryMixin¶
Only adds the Django integration. You can change this overwriting the integrations()
method. In case
you need more low-level control, you can overwrite the sentry_init()
method.
from kaio.mixins import SentryMixin
- SENTRY_DSN
- The DSN to configure Sentry. If blank, Sentry integration is not initialized. By default
''
. - SENTRY_IGNORE_LOGGERS
- CSV of loggers to don’t send to Sentry. By default
'django.security.DisallowedHost'
.
PathsMixin¶
Paths base settings.
from kaio.mixins import PathsMixin
Section: Paths
Parameters
- APP_ROOT
- By default the current directory,
abspath('.')
. - MEDIA_ROOT
- By default the current
APP_ROOT
+/media
. - STATIC_URL
- By default
/static/
. - MEDIA_URL
- By default
/media/
. - STATIC_ROOT
- By default
abspath(join("/tmp", "{}-static".format(self.APP_SLUG))
.
SecurityMixin¶
Security base settings.
from kaio.mixins import SecurityMixin
Section: Security
Parameters
- SECRET_KEY
- A secret key for a particular Django installation.
This is used to provide cryptographic signing, and should be set to a unique, unpredictable value.
By default
''
. - ALLOWED_HOSTS
- A list of strings representing the host/domain names that this Django site can serve.
By default
[]
. - SECURE_PROXY_SSL_HEADER_NAME
- user to use
The name of the header to configure the proxy ssl. By default
HTTP_X_FORWARDED_PROTO
- SECURE_PROXY_SSL_HEADER_VALUE
- The value of the header to configure the proxy ssl. By default
https
- SECURE_PROXY_SSL_HEADER
- A tuple representing a HTTP header/value combination that signifies a request is secure.
This controls the behavior of the request object’s is_secure() method.
By default returns the tuple of the combination of the
SECURE_PROXY_SSL_HEADER_NAME
andSECURE_PROXY_SSL_HEADER_VALUE
. https://docs.djangoproject.com/en/1.10/ref/settings/#secure-proxy-ssl-header
StorageMixin¶
Mixin that provides settings for django-storages. Currently only supports AWS S3. Look at http://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html for details.
from kaio.mixins import StorageMixin
Section: Storage
Parameters
- DEFAULT_FILE_STORAGE
- By default:
storages.backends.s3boto3.S3Boto3Storage
. For tests it might be convenient to change it todjango.core.files.storage.FileSystemStorage
. Only in Django versions < 4.2. - DEFAULT_BACKEND_STORAGE
- By default:
storages.backends.s3boto3.S3Boto3Storage
. For tests it might be convenient to change it todjango.core.files.storage.FileSystemStorage
. Only in Django versions >= 4.2. - STATICFILES_BACKEND_STORAGE
- By default: ``django.contrib.staticfiles.storage.StaticFilesStorage``Only in Django versions >= 4.2.
- AWS_S3_SIGNATURE_VERSION
- By default
s3v4
. - AWS_S3_REGION_NAME
- By default
None
. Example:eu-west-1
. - AWS_S3_ENDPOINT_URL
- By default
None
. - AWS_S3_CUSTOM_DOMAIN
- By default
None
. - AWS_STORAGE_BUCKET_NAME
- By default
''
. - AWS_LOCATION
- By default
''
. - AWS_ACCESS_KEY_ID
- By default
''
. - AWS_SECRET_ACCESS_KEY
- By default
''
. - AWS_QUERYSTRING_AUTH
- By default
True
. - AWS_DEFAULT_ACL
- By default
private
.
WhiteNoiseMixin¶
Automatic configuration for static serving using whitenoise. You must have version 3 installed.
from kaio.mixins import WhiteNoiseMixin
Parameters
- ENABLE_WHITENOISE
- by default
False
.False
if the module is not installed. - WHITENOISE_AUTOREFRESH
- by default
True
. - WHITENOISE_USE_FINDERS
- by default
True
.