django-cached-field

Sagteware kiekie:
django-cached-field
Sagteware besonderhede:
Weergawe: 1.2.2
Upload datum: 14 Apr 15
Ontwikkelaar: Martin Chase
Lisensie: Gratis
Populariteit: 2

Rating: 1.0/5 (Total Votes: 1)

Django-kas-veld is 'n Django app wat bied Seldery-uitgestel, kas velde op Django ORM vir duur om te bereken data
Met behulp van Django ORM en seldery, hou duur om te bereken eienskappe up-to-date.
Voorbeeld
Sê jy 'n stadige metode op een van jou modelle:
klas Lantaarnpaal (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (self):
& Nbsp; slaap (30)
& Nbsp; terugkeer "Die% s% s van% s '% (self.weight, self.first_name, self.country)
Ugh; te stadig. Kom ons kas nie. Ons wil 'n paar tools. Seldery met Django-seldery sal opgestel word en neurie saam glad nodig. Dan sal ons voeg in ons kas veld erf van die model mixin en hernoem ons metode gepas:
van django_cached_field invoer CachedIntegerField, ModelWithCachedFields
klas Lantaarnpaal (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (nul = True)
& Nbsp; def calculate_slow_full_name (self):
& Nbsp; slaap (30)
& Nbsp; terugkeer "Die% s% s van% s '% (self.weight, self.first_name, self.country)
(Ja, calculate_ is net 'n konvensie. Ek het duidelik nog nie opgegee die relings spook ...)
Volgende, migreer jou db skema van die nuwe cached veld te sluit, deur suide of rol jou eie. Let daarop dat twee velde sal bygevoeg word om hierdie tabel, cached_slow_full_name van die tipe teks en slow_full_name_recalculation_needed tipe boolean, waarskynlik in gebreke om waar.
Reeds dit is kinda beter. lamppost.slow_full_name kan neem 30 sekondes om die eerste keer kry dit genoem vir 'n gegewe rekord nie, maar van toe af, sal dit naby oomblik wees. Natuurlik, op hierdie punt, dit sal nooit verander nadat daardie eerste oproep.
Die oorblywende belangrike stuk van die legkaart is om ons kas ongeldig. Thoses samestellende velde waarskynlik verander in sommige views.py (dit kan meer slim merk indien die betrokke waardes word opgedateer):
render_to ("lamppaal / edit.html")
def wysig (versoek lamppost_id):
& Nbsp; lamppaal = Lamppost.objects.get (PK = lamppost_id)
& Nbsp; as request.METHOD == 'post':
& Nbsp; vorm = LamppostForm (request.POST)
& Nbsp; as form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; anders:
& Nbsp; vorm = LamppostForm ()
& Nbsp; terugkeer {'vorm': vorm, 'n lamppaal ': lamppaal}
Dit is die moeilikste deel as die ontwikkelaar! Caching vereis dat jy jag af elke plek van die waarde kan verander word en roeping wat flag_slow_full_name_as_stale metode. Word land opgedra 'n ewekansige nuwe waarde elke oggend by cron'o'clock? Dit vlag beste verjaar deur cron'o'one wees. Om gewig te bereken nie gebaseer op die som van alle verwante duiwe? Haak in die duiwe landing. En opstyg. En alles wat 'n individu duif se gewig verander. As Abraham Lincoln het gesê: "Daar is net twee harde probleme in programmering. Benaming, kas ongeldigmaking en off-vir-een foute"
Installasie
Jy kan maak dinge maklik op jouself:
PIP Django-kas-veld installeer
Of, vir 'n handleiding installasie, kan jy die repokoers kloon en installeer dit met Python en setup.py:
git kloon git: //github.com/aquameta/django-cached-field.git
cd Django-kas-veld /
python setup.py installeer
Getoets met Django 1.3.1, seldery 2.3.1, Django-seldery 2.3.3.
Konfigurasie
Twee-instellings veranderinge pretty much nodig is vir dinge om te werk: maak seker dit is 'n geregistreerde app, maak seker seldery sien sy take lêer:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Een verandering is opsioneel: of herberekening moet gebeur wanneer gemerk as verjaar (verstek) of links na die volgende keer die kenmerk is toeganklik. Dit is nuttig vir die toets omgewings waar jy nie omgee dat jou cached waardes, is ongeldig. Let daarop dat in hierdie situasie, sou jy nie seldery nodig.
CACHED_FIELD_EAGER_RECALCULATION = True # of Vals is vir die toets omgewings
Dit is 'n globale opsie, so individuele uitsonderings moet eerder deur die verbygaan van die and_recalculate argument aan die flag_FIELD_as_stale oproep hanteer word.
Valkuilen
- Race toestand as jy vlag 'n veld as verouderd in 'n db transaksie wat langer neem om te voltooi as die seldery werk neem genoem te word.
- Alle ORM metodes (bv order_by, filter) moet cached_FIELD te gebruik.
- Recalculate_FIELD gebruik .update (cached_FIELD = die waarde te stel.
- Flag_FIELD_as_stale gebruik .update, sowel

Vereistes :

  • Python
  • .
  • Django

Kommentaar te django-cached-field

Kommentaar nie gevind
Kommentaar te lewer
Draai op die foto!