django-cached-field

Software kuvakaappaus:
django-cached-field
Ohjelmiston tiedot:
Versio: 1.2.2
Lähetyksen päivämäärä: 14 Apr 15
Kehittäjä: Martin Chase
Lupa: Vapaa
Suosio: 2

Rating: 1.0/5 (Total Votes: 1)

Django-välimuistissa-kenttä on Django sovellus, joka tarjoaa Selleri-lykätään, välimuistissa kentät Django ORM kalliin laske tiedot
Käyttämällä Django ORM ja selleri, pitää kalliin laske attribuutteja ajan tasalla.
Esimerkki
Sano sinulla on hidas menetelmä yhdessä omia malleja:
luokan Lamppost (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (itse):
& Nbsp; uni (30)
& Nbsp; paluu '% s% s% s "% (self.weight, self.first_name, self.country)
Ugh; liian hidas. Katsotaanpa välimuisti. Me haluamme muutamia työkaluja. Selleri kanssa Django-selleri tulee perustaa ja porina pitkin sujuvasti. Sitten me lisäämme meidän välimuistissa alalla, perivät mallista Mixin ja nimetä meidän menetelmä asianmukaisesti:
alkaen django_cached_field tuonti CachedIntegerField, ModelWithCachedFields
luokan Lamppost (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (itse):
& Nbsp; uni (30)
& Nbsp; paluu '% s% s% s "% (self.weight, self.first_name, self.country)
(Joo, calculate_ on vain sopimusta. En selvästikään ole luopunut kiskot haamu ...)
Seuraavaksi siirrät db skeema sisällyttää uuteen välimuistissa kenttä käyttäen etelään, tai rullaa omia. Huomaa, että kaksi kenttää lisätään taulukkoon, cached_slow_full_name tyypin tekstin ja slow_full_name_recalculation_needed tyypin boolean luultavasti oletuksena totta.
Jo se jotenkin parempi. lamppost.slow_full_name saattaa kestää 30 sekuntia ensimmäistä kertaa se saa kutsutaan tietyn ennätys, mutta siitä lähtien, se tulee olemaan lähellä hetkessä. Tietenkin tässä vaiheessa, se ei koskaan muutu sen jälkeen ensimmäinen puhelu.
Jäljellä tärkeä osa palapeliä on mitätöi meidän välimuisti. Thoses osatekijän kentät ovat luultavasti muuttunut joissakin views.py (tämä voisi olla viisaampi huomaamatta, jos asiaa arvot päivitetään):
render_to ("lyhtypylväs / edit.html")
def muokkaa (pyynnöstä lamppost_id):
& Nbsp; lyhtypylväs = Lamppost.objects.get (PK = lamppost_id)
& Nbsp; jos request.METHOD == "POST":
& Nbsp; muoto = LamppostForm (request.POST)
& Nbsp; jos form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; muuta:
& Nbsp; muoto = LamppostForm ()
& Nbsp; paluu {"muodossa": muoto, "lyhtypylväs": lyhtypylväs}
Tämä on vaikein osa, koska kehittäjä! Välimuistitallennus vaatii sinua jahtaamaan joka paikassa arvo voitaisiin muuttaa ja soittaa että flag_slow_full_name_as_stale menetelmä. Onko maa osoitettu satunnainen uusi arvo joka aamu cron'o'clock? Tämä lippu oli paras olla tunkkainen mukaan cron'o'one. Oletteko laskea painon perusteella summa liittyy kyyhkysiä? Koukku kyyhkyset lasku. Ja imitointi. Ja kaikki, joka muuttaa yksilön kyyhkynen painon. Kuten Abraham Lincoln sanoi, "On vain kaksi kovaa ongelmia ohjelmointi: nimeäminen, välimuisti mitätöintiä ja off-by-one virheitä."
Asennus
Voit tehdä asioita helpoksi itsellesi:
Pip asentaa Django-välimuistissa-kenttä
Tai, manuaalinen asennus, voit kloonata repo ja asenna se käyttäen python ja setup.py:
git klooni git: //github.com/aquameta/django-cached-field.git
cd Django-välimuistissa-kenttä /
python setup.py asentaa
Testattu Django 1.3.1, selleri 2.3.1, Django-selleri 2.3.3.
Asetukset
Kaksi asetukset muutoksia melko paljon tarvitaan asioita työhön: varmista, että se on rekisteröity sovellus, varmista selleri näkee tehtävänsä tiedosto:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Yksi muutos on vapaaehtoista: onko uudelleenlaskentaa pitäisi tapahtua, kun merkitty tunkkainen (oletus) tai jättää seuraavan kerran määritettä näytetty. Tämä on hyötyä testauksessa ympäristöissä, joissa et välitä, että välimuistissa arvot ovat virheellisiä. Huomaa, että tässä tilanteessa, sinun ei tarvitse selleri.
CACHED_FIELD_EAGER_RECALCULATION = True # tai epätosi testausympäristöissä
Tämä on maailmanlaajuinen vaihtoehto, joten yksittäiset poikkeukset olisi sen sijaan käsiteltävä viemällä and_recalculate argumentti flag_FIELD_as_stale puhelun.
Varoitukset
- Kilpailu kunnossa jos lippu kentän tunkkainen vuonna db liiketoimi kestää kauemmin kuin selleri työ vie kutsua.
- Kaikki ORM menetelmät (esim order_by, suodatin) täytyy käyttää cached_FIELD.
- Recalculate_FIELD käyttää .update (cached_FIELD = asettaa arvoon.
- Flag_FIELD_as_stale käyttää .update, samoin.

Vaatimukset :

  • Python
  • Django

Kommentit django-cached-field

Kommentteja ei löytynyt
Lisää kommentti
Ota kuvia!