Evgenii Legotckoi
Evgenii LegotckoiҚаз. 16, 2022, 3:58 Т.Қ.

django_model_cached_property - Django ішіндегі жеке үлгі нысандары үшін кэштеу сипаты

Django ішіндегі жеке үлгі нысандары үшін кэштеу сипатына арналған тұрақты батареяның django_model_cached_property шығарылымын енгізу.

Мен evileg_core құрамында ұқсас функция бар екенін айттым, бірақ енді мен бұл кэштеуді бөлек пакетке енгізуді шештім. Бұл менің мұндай үлкен пакетті ұстауға уақытым жоқ екеніне байланысты және мен басқа жобаларымда бөлек шағын функционалдылықты қолданамын. Сондықтан, мен үшін үлкен жобаны тәуелсіз жобаларға бөлу қисынды болып көрінді, осылайша, ең болмағанда, ең болмағанда өз жобаларымның аясында ең көп сұралатын функционалдылықты қолдау оңайырақ болады. Сондай-ақ бұл пакет басқа әзірлеушілер үшін өте пайдалы болады деп үміттенемін.

Мақсат

Бума пайдаланушы сұрауы өңделіп жатқан кезде нысан данасы бар кезеңнен ұзағырақ мерзімге үлгі нысаны әдістерінің нәтижесін кэштеу үшін пайдаланылады. Бұл деректер базасының ауыр сұрауларын кэштеу үшін қажет, олардың нәтижелері теориялық тұрғыдан жиі өзгермеуі керек, бірақ сонымен бірге оларды пайдаланушы сұраулары сайын шақыру пайдаланушының Django қосымшасымен жұмыс жылдамдығын айтарлықтай төмендетуі мүмкін. Бұл, мысалы, дерекқордағы Жалпы қарым-қатынастар пайдаланылған жағдайда, пайдаланушыға нысанды ұнатқан-ұнамағаны, сондай-ақ ұнатулар саны туралы ақпарат алу үшін пайдалы болуы мүмкін. Өкінішке орай, мұндай байланыстар біз қалағандай жылдам жұмыс істемейді. Сондықтан дұрыс кэштеу сайтты айтарлықтай жылдамдатуы мүмкін.

Енді мен бұл функцияны қалай пайдалану керектігін айтамын.

Орнату

pip install -U django-model-cached-property

Талаптарды орнату және конфигурациялау

Кэштеу үшін redis орнатыңыз.

sudo apt install redis-server

Джанго жобасының setup.py параметрін конфигурациялаңыз.

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

Қолдану

Пакетте екі функция бар:
model_cached_property - бұл бөлек жазбалар үшін сипатқа шақыру нәтижелерін кэштейтін сынып әдістерінің декораторы.
invalidate_model_cached_property - бұл үлгі жазба сипатындағы әдісті жарамсыз деп тануға арналған функция.

үлгі_кэштелген_сипат

Бұл декораторды келесі жолмен пайдалануға болады.

from django_model_cached_property import model_cached_property

class Article(models.Model):

    @model_cached_property
    def comments_count(self):
        return self.comments.count()

Бұл сіздің Django жобаңыздағы мақаланың әрбір жазбасы үшін түсініктемелерді кэштеуді білдіреді.
Кэш күту уақытын 3000 секундқа келесі жолмен орнатуға болады.

class Article(models.Model):

    @model_cached_property(timeout=3000)
    def comments_count(self):
        return self.comments.count()

Әдепкі бойынша, кэштеу күту уақыты 60 секундты құрайды, оны settings.py арқылы ғаламдық деңгейде орнатуға болады.

MODEL_CACHED_PROPERTY_TIMEOUT = 300000

Бұған қоса, енгізу аргументтері бар үлгі сипатын кэштеуді пайдалануға болады.
Және бұл жағдайда кэштеу дәлелдердің барлық кіріс жиындары үшін бағаланады.
Мысалы, аутентификацияланған пайдаланушы кэштеу.

class Article(models.Model):

    @model_cached_property
    def __user_in_bookmarks(self, user):
        return self.bookmarks.filter(user=user).exists()

    def user_in_bookmarks(self, user):
        return self.__user_in_bookmarks(user) if user.is_authenticated else False

үлгінің_кэштелген_сипатын жарамсыз

Бұл функция дерекқордағы бір үлгі жазбасы үшін сипаттағы барлық кэш кілттерін жарамсыз етеді.
Мысалы

article = get_object_or_404(Article, pk=12)
invalidate_model_cached_property(article, article.comments_count)

Бұл жағдайда сіз 2 негізгі кілті бар мақаланың барлық кэштелген кілттерін жарамсыз етесіз.

ЕСКЕРТУ - Шектеу

Бұл кэштеу функциясының шектелуі оны тек бірегей енгізу аргументтерімен пайдалануға болатындығынан тұрады.
Бұл AnonymousUser нысанымен жұмыс істемейтінін білдіреді, өйткені әрбір сұрауда AnonymousUser нысаны туралы ақпарат әртүрлі болады, бірақ оны бір пайдаланушы шақырады.
Сондықтан оны тек бірегей ақпаратта пайдаланыңыз.

Қорытынды

Құрметті EVILEG веб-сайтының пайдаланушылары, егер бұл сізге қиын болмаса, жоба репозиторийін GitHub арқылы жұлдызшамен бағалаңыз.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

NSProject
  • Қаз. 17, 2022, 7:32 Т.Ж.

О хорошая статья. Для какой ветки Django будет работать эта батарейка?

Evgenii Legotckoi
  • Қаз. 17, 2022, 7:37 Т.Ж.
  • (өңделген)

Я тестировал только на Django 4, но сам код не менялся пожалуй с версии Django 2, так что предполагаю, что должно работать во всех версиях, но если протестируете на более ранних версиях, и будет нормально работать, то дайте фидбек. Спасибо.

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
OI
  • Ora Iro
  • Жел. 24, 2024, 6:38 Т.Ж.

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:40ұпай,
  • Бағалау ұпайлары-8
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
Соңғы пікірлер
ИМ
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Бізді әлеуметтік желілерде бақылаңыз