django-cached-field

Screenshot Software:
django-cached-field
Mga detalye ng Software:
Bersyon: 1.2.2
I-upload ang petsa: 14 Apr 15
Nag-develop: Martin Chase
Lisensya: Libre
Katanyagan: 2

Rating: 1.0/5 (Total Votes: 1)

Django-cached na patlang ay isang Django app na nagbibigay-apyo ipinagpaliban, naka-cache na mga patlang sa Django ORM para sa mahal-to-Kalkulahin ang data
Paggamit ng Django ORM at kintsay, panatilihin mahal-to-Kalkulahin ang mga katangian up-to-date.
Halimbawa
Sabihing mayroon kang isang mabagal na paraan sa isa sa iyong mga modelo:
class na poste ng ilaw (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (sa sarili):
& Nbsp; pagtulog (30)
& Nbsp; return 'Ang% s% s ng% s'% (self.weight, self.first_name, self.country)
He; masyadong mabagal. -Cache na natin iyon. Susubukan naming nais ng ilang mga tool. Kintsay may Django-kintsay ay kailangang ma-set up at humuhuni kahabaan ng maayos. Pagkatapos ay magdaragdag kami sa aming naka-cache na patlang, magmana mula sa modelo mixin at palitan ang pangalan ng aming mga paraan ng naaangkop:
mula sa pag-import django_cached_field CachedIntegerField, ModelWithCachedFields
class na poste ng ilaw (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (sa sarili):
& Nbsp; pagtulog (30)
& Nbsp; return 'Ang% s% s ng% s'% (self.weight, self.first_name, self.country)
(Oo, calculate_ ay isang convention lamang. Ko malinaw na hindi ibinigay up ang daang-bakal ghost ...)
Susunod, ilipat ang iyong db schema upang isama ang bagong naka-cache na field gamit timog, o roll ng iyong sarili. Tandaan na ang dalawang mga patlang na ay idadagdag sa talahanayan, cached_slow_full_name ng uri ng teksto at slow_full_name_recalculation_needed ng uri ng boolean, marahil defaulting sa true.
Mayroon na medyo mas mahusay na kung. lamppost.slow_full_name ay maaaring tumagal ng 30 segundo sa unang pagkakataon maipo-tinatawag na para sa isang naibigay record, ngunit pagkatapos ay mula sa, ito ay magiging malapit instant. Siyempre, sa puntong ito, ito ay hindi kailanman baguhin pagkatapos ang unang tawag.
Ang natitirang mga mahalagang piraso ng puzzle ang ay upang magpawalang-bisa ang aming cache. Thoses bumubuo ng mga patlang ay marahil ay nagbago sa ilang mga views.py (ito ay maaaring maging mas matalino tungkol sa pagpuna kung ang may-katuturang mga halaga ay naka-update):
render_to ("poste ng ilaw / edit.html")
def i-edit (kahilingan, lamppost_id):
& Nbsp; poste ng ilaw = Lamppost.objects.get (PK = lamppost_id)
& Nbsp; kung request.METHOD == 'POST':
& Nbsp; paraan = LamppostForm (request.POST)
& Nbsp; kung form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; iba pa:
& Nbsp; paraan = LamppostForm ()
& Nbsp; return {'anyo': form, 'poste ng ilaw': poste ng ilaw}
Ito ang hardest bahagi ng nag-develop! Nangangailangan Caching mo manghuli ang bawat lugar ay maaaring mabago ang halaga at pagtawag na flag_slow_full_name_as_stale paraan. Ay bansa bibigyan ng isang random na bagong halaga tuwing umaga sa cron'o'clock? -Flag na si pinakamahusay na maging lipas ng cron'o'one. Huwag mong kalkulahin ang timbang batay sa kabuuan ng lahat ng nauugnay pigeons? Hook sa landing pigeons. At pagtaas ng eruplano. At ang lahat na nagbabago ang timbang ng isang indibidwal na kalapati na. Tulad ng sinabi ni Abraham Lincoln, "May dalawang lamang na hard problema sa pagpo-program:. Pagpapangalan, cache pagpapawalang-bisa at mga error off-by-one"
Pag-install
Maaari kang gumawa ng mga bagay na madaling sa iyong sarili:
buto ng bungang-kahoy-install Django-cached na patlang
O kaya naman, para sa isang manu-manong pag-install, maaari mong mai-clone ang repo at i-install ito gamit ang python at setup.py:
Git clone ng Git: //github.com/aquameta/django-cached-field.git
cd Django-cached na patlang /
python setup.py-install
Nasubukan na may Django 1.3.1, kintsay 2.3.1, Django-kintsay 2.3.3.
Configuration
Dalawang mga pagbabago sa setting ay halos kinakailangan para sa mga bagay na gawa: tiyakin na ito ay isang rehistradong app, tiyaking kintsay nakikita nito ang mga gawain ng file:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Isang pagbabago ay opsyonal: kung recalculation dapat mangyari kapag na-flag bilang hindi na gumaganang (default) o iwanang sa susunod na oras na ang katangian ay na-access. Ito ay kapaki-pakinabang para sa mga kapaligiran sa pagsubok kung saan hindi mo na mahalaga na ang iyong mga halaga ng naka-cache ay hindi wasto. Tandaan na sa sitwasyong ito, hindi mo na kailangan ang kintsay.
CACHED_FIELD_EAGER_RECALCULATION = True # o Mali para sa mga kapaligiran ng pagsubok
Ito ay isang pandaigdigang pagpipiliang ito, kaya dapat sa halip pangasiwaan ang mga indibidwal na mga pagbubukod sa pamamagitan ng pagpasa sa and_recalculate argumento sa flag_FIELD_as_stale tawag.
Caveats
- Race kondisyon kung markahan mo bilang isang di-aktibong patlang sa isang db transaksyon na tumatagal ng mas matagal upang makumpleto kaysa sa trabaho kintsay tumatagal na tinatawag.
- Ang lahat ng mga pamamaraan ORM (hal order_by, filter) kailangang gamitin cached_FIELD.
- Recalculate_FIELD gumagamit ng .update (cached_FIELD = upang itakda ang halaga.
- Flag_FIELD_as_stale gumagamit ng .update, pati na rin

Mga Kinakailangan :

  • Python
  • .
  • Django

Mga komento sa django-cached-field

Mga Komento hindi natagpuan
Magdagdag ng komento
I-sa mga imahe!