django-liveconfigs

Simple powerful and convenient configs for Django


Keywords
django, config, easy, simple, liveconfigs
License
Other
Install
pip install django-liveconfigs==1.0.5

Documentation

LiveConfigs

LiveConfigs ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ "Π½Π° Π»Π΅Ρ‚Ρƒ" Ρ‡Π΅Ρ€Π΅Π· django-Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠΈ ΠΈ пСрСзапуска. Π‘Π°ΠΌΠ° конфигурация хранится Π² Π‘Π”, Π½ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° скрыта Π·Π° ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ интСрфСйсом.

Быстрый ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ настройки

class MyConfig(liveconfigs.BaseConfig):
   IS_FEATURE_ENABLED: bool = False
   NEW_FEATURE_VALUE: float = 20.4

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΡ…

if MyConfig.IS_FEATURE_ENABLED:
   print('feature is enabled and feature value is', MyConfig.NEW_FEATURE_VALUE)

МСняСм Ρ‡Π΅Ρ€Π΅Π· Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ!

Π­ΠΊΡ€Π°Π½ рСдактирования ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°

Π’Π΅Ρ€ΠΌΠΈΠ½Ρ‹

  • настройка, ΠΊΠΎΠ½Ρ„ΠΈΠ³ - ΠΎΠ΄Π½ΠΎ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
  • класс ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°, Π³Ρ€ΡƒΠΏΠΏΠ° настроСк - настройки, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄ΠΈΠ½ класс python
  • Ρ‚ΠΎΠΏΠΈΠΊ - общая "Ρ‚Π΅ΠΌΠ°" для Π³Ρ€ΡƒΠΏΠΏΡ‹ настроСк, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ поиск настроСк Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅. Π£ Ρ€Π°Π·Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ настроСк Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΎΠΏΠΈΠΊ
  • Ρ‚Π΅Π³ΠΈ - ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова для быстрого поиска настроСк. Одна настройка ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Ρ‚Π΅Π³ΠΎΠ²

Π‘ΠΎ стороны Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° настройки выглядят ΠΊΠ°ΠΊ статичСскиС Ρ‡Π»Π΅Π½Ρ‹-константы классов python. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ быстро Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, ΡƒΠ±Ρ€Π°Ρ‚ΡŒ, ΠΈΡ… просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (ΠΏΠ°Ρ€Π° строк ΠΊΠΎΠ΄Π°). Π˜Ρ… ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚ mytype ΠΈ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π—Π° созданиС Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ² ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ. ЗначСния ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ хранятся Π² ΠΊΠΎΠ΄Π΅. Π’ Π‘Π” Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹ΠΊΠ°Ρ‚ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ использовании.

Π‘ΠΎ стороны администратора

ЗначСния Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ django. Для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ администрирования ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚

  • Ρ‚Π΅Π³ΠΈ ΠΈ Ρ‚ΠΎΠΏΠΈΠΊΠΈ для Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ поиска
  • Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ
  • Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ² Π² Π±Π΄
  • Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ (Ρ‚ΠΈΠΏΡ‹ ΠΈ значСния)
  • сохранСниС Π΄Π°Ρ‚Ρ‹ послСдних ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ²
  • ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΈ экспорт (ΡƒΠ΄ΠΎΠ±Π½ΠΎ для тСстирования систСмы)

Π­ΠΊΡ€Π°Π½ поиска ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ²

Как Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ

  1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ "liveconfigs" Π² INSTALLED_APPS Π² settings:
    INSTALLED_APPS = [
        ...,
        "liveconfigs",
    ]
  1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π² settings Π΅Ρ‰Π΅ нСсколько строк.
    # liveconfigs settings
    # Максимальная Π΄Π»ΠΈΠ½Π° тСкста Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ рСдактирования ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° ΠΊΠ°ΠΊ textinput
    # ΠŸΡ€ΠΈ Π΄Π»ΠΈΠ½Π΅ тСкста Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° большСй этого значСния - ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ рСдактирования ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° ΠΊΠ°ΠΊ textarea
    LC_MAX_STR_LENGTH_DISPLAYED_AS_TEXTINPUT = 50
    LC_ENABLE_PRETTY_INPUT = True
    LIVECONFIGS_SYNCWRITE = True    # sync write mode
    LC_CACHE_TTL = 1    # cache TTL in seconds (default = 1)
    # Максимальная Π΄Π»ΠΈΠ½Π° значСния ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° (Π² тСкстовом прСдставлСнии) ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² спискС выводится Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ
    # ΠŸΡ€ΠΈ бОльшСй Π΄Π»ΠΈΠ½Π΅ Π²ΠΈΠ·ΡƒΠ°Π» значСния Π±ΡƒΠ΄Π΅Ρ‚ усСчСн ("Длинная строка" -> "Π”Π»ΠΈΠ½ ... Ρ€ΠΎΠΊΠ°")
    LC_MAX_VISUAL_VALUE_LENGTH = 50
  1. Π—Π°Π²Π΅Π΄ΠΈΡ‚Π΅ сСбС Ρ„Π°ΠΉΠ» собствСнно с ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ config/config.py
from liveconfigs import models
from liveconfigs.validators import greater_than
from enum import Enum

# isort: off

# config_row_update_signal_handler begin
from django.conf import settings
from django.dispatch import receiver
from liveconfigs.signals import config_row_update_signal
from liveconfigs.tasks import config_row_update_or_create

# FIXME: Π˜ΠΌΠΏΠΎΡ€Ρ‚ прилоТСния Celery ΠΈΠ· вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Celery)
# FIXME: Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½Π΅ Celery
from celery_app import app

# isort: on

# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Celery
# РСальноС сохранСниС Π΄Π°Π½Π½Ρ‹Ρ… выполняСт функция config_row_update_or_create
# Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉΡ‚Π΅ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ сохранСниС ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ для вас ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ
# Для Celery зарСгистрируйтС эту Π·Π°Π΄Π°Ρ‡Ρƒ Π² CELERY_TASK_ROUTES
# FIXME: Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½Π΅ Celery
@app.task(max_retries=1, soft_time_limit=1200, time_limit=1500)
def config_row_update_or_create_proxy(config_name: str, update_fields: dict):
    config_row_update_or_create(config_name, update_fields)


@receiver(config_row_update_signal, dispatch_uid="config_row_update_signal")
def config_row_update_signal_handler(sender, config_name, update_fields, **kwargs):
    # ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для Celery
    # ΠŸΡ€ΠΈ настройках для синхронного сохранСния функция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ
    if settings.LIVECONFIGS_SYNCWRITE:
        config_row_update_or_create_proxy_func = config_row_update_or_create_proxy
    # ΠŸΡ€ΠΈ настройках для асинхронного сохранСния функция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° Ρ‡Π΅Ρ€Π΅Π· delay
    # FIXME: Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½Π΅ Celery
    else:
        config_row_update_or_create_proxy_func = config_row_update_or_create_proxy.delay

    config_row_update_or_create_proxy_func(config_name, update_fields)


# config_row_update_signal_handler end


# Ρ‚ΡƒΡ‚ пСрСчислСны Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ‚Π΅Π³ΠΈ для настроСк ΠΈΠ· вашСй ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области
class ConfigTags(str, Enum):
    front = "Настройки для Ρ„Ρ€ΠΎΠ½Ρ‚Π°"
    features = "Π€ΠΈΡ‡ΠΈ"
    basic = "ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅"
    other = "ΠŸΡ€ΠΎΡ‡Π΅Π΅"

# Ρ‚ΡƒΡ‚ описана сама настройка ΠΈ Π΅Π΅ ΠΌΠ΅Ρ‚Π°-Π΄Π°Π½Π½Ρ‹Π΅
class FirstExample(models.BaseConfig):
    __topic__ = 'ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ настройки'  # ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠ΅ описаниС Π³Ρ€ΡƒΠΏΠΏΡ‹ настроСк
    MY_FIRST_CONFIG: int = 40
    # ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строчки Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹
    MY_FIRST_CONFIG_DESCRIPTION = "Какая-Ρ‚ΠΎ моя настройка"
    MY_FIRST_CONFIG_TAGS = [ConfigTags.basic, ConfigTags.other]
    MY_FIRST_CONFIG_VALIDATORS = [greater_than(5)]
    
    # вторая настройка, Π±Π΅Π· ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…
    SECOND_ONE: bool = False  
  1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ FirstExample.MY_FIRST_CONFIG ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ int:
from config.config import FirstExample
...
if FirstExample.MY_FIRST_CONFIG > 20:
    print("Hello there!")

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ² Π² Π°Π΄ΠΌΠΈΠ½ΠΊΠ΅ django

Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ адрСсу http://YOUR_HOST/admin/liveconfigs/configrow/

ΠŸΡ€ΠΈ установкС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ провСряСтся Ρ‚ΠΈΠΏ Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€Ρ‹

АвтоматичСская Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ² Π² Π‘Π”

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ настройкС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ провСряСт, Π΅ΡΡ‚ΡŒ Π»ΠΈ запись ΠΎ Π½ΠΈΡ… Π² Π‘Π”. Если Π΅Π΅ Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ записываСтся Π² Π‘Π” со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Если ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π·Π°Π»ΠΈΡ‚ΡŒ всС Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ Π² Π‘Π” ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π½Π° стартС сСрвиса, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² ваш скрипт запуска Π²Ρ‹Π·ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ load_config:

    # ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ старыС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
    python /app/manage.py migrate --noinput
    python /app/manage.py collectstatic --noinput

    #  ΠΠžΠ’ΠΠ― БВРОЧКА - Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ² Π² Π±Π΄
    python /app/manage.py load_config

    #  сам запуск сСрвиса - ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ‚Π°ΠΊ
    python /app/manage.py runserver_plus 0.0.0.0:8080 --insecure

Π”Π°Ρ‚Ρ‹ послСднСго измСнСния ΠΈ чтСния

Π’ Π‘Π” Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ настройки Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… поля - Π΄Π°Ρ‚Ρ‹ послСднСго чтСния ΠΈ записи. Они ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΆΠΈΠ²ΠΎΠΉ систСмС, Π½ΡƒΠΆΠ½Ρ‹ Π»ΠΈ всС Π΅Ρ‰Π΅ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ настройки ΠΈΠ»ΠΈ ΠΏΠΎΡ€Π° ΡƒΠΆΠ΅ ΠΎΡ‚ Π½ΠΈΡ… ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ.

Асинхронная запись

Π§Ρ‚ΠΎΠ±Ρ‹ запись послСднСй Π΄Π°Ρ‚Ρ‹ чтСния Π½Π΅ Ρ‚ΠΎΡ€ΠΌΠΎΠ·ΠΈΠ»Π° Π²Π°ΠΌ всю систСму (Ссли,Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ часто Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ частями ΠΊΠΎΠ΄Π°), ΠΌΠΎΠΆΠ½ΠΎ вынСсти Π΅Π΅ Π² Π·Π°Π΄Π°Ρ‡Ρƒ celery. Для этого:

  1. УстановитС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ LIVECONFIGS_SYNCWRITE Π² settings.py Π² False:
    LIVECONFIGS_SYNCWRITE = False   # async write mode
  1. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Celery, Ρ‚ΠΎ настройтС запуск Π·Π°Π΄Π°Ρ‡ΠΈ config.config.config_row_update_or_create_proxy:
    CELERY_TASK_ROUTES = {
        'config.config.config_row_update_or_create_proxy': {
            'queue': 'quick', 'routing_key': 'quick'
        },
    }
  1. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π½Π΅ Celery, Ρ‚ΠΎ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ этот ΠΊΠΎΠ΄ ΠΏΠΎΠ΄ ваш случай

ΠžΡΡ‚Π°Π»ΠΈΡΡŒ вопросы?