django-cached-field

Software captura de pantalla:
django-cached-field
Detalles de software:
Versión: 1.2.2
Fecha de carga: 14 Apr 15
Promotor: Martin Chase
Licencia: Libre
Popularidad: 2

Rating: 1.0/5 (Total Votes: 1)

diferidos Apio django-caché de campo es una aplicación Django que ofrece, campos en caché en ORM de Django para los datos de cara-a calcular
El uso de ORM de Django y apio, mantenga caro: para calcular los atributos hasta a la fecha.
Ejemplo
Digamos que usted tiene un método lento en uno de sus modelos:
clase Farola (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (self):
& Nbsp; el sueño (30)
& Nbsp; return 'El% s% s de% s'% (self.weight, self.first_name, self.country)
Ugh; demasiado lento. Vamos caché que. Nos queremos unas pocas herramientas. Apio con django-apio tendrá que ser establecido y tarareando sin problemas. A continuación vamos a añadir en nuestro campo en caché, heredamos del modelo mixin y renombrar nuestro método apropiado:
desde CachedIntegerField importación django_cached_field, ModelWithCachedFields
clase Farola (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (self):
& Nbsp; el sueño (30)
& Nbsp; return 'El% s% s de% s'% (self.weight, self.first_name, self.country)
(Sí, calculate_ es sólo una convención. Yo claramente no han entregado el alma carriles ...)
A continuación, migrar el esquema de db para incluir el nuevo campo en caché utilizando sur, o hágalo usted mismo. Tenga en cuenta que dos campos se añadirán a esta tabla, cached_slow_full_name de tipo texto y slow_full_name_recalculation_needed de tipo boolean, probablemente moroso en true.
Ya eso es un poco mejor. lamppost.slow_full_name puede tardar de 30 segundos la primera vez que se llama a un registro dado, pero a partir de entonces, será instantánea acerca. Por supuesto, en este punto, nunca cambiar después de la primera llamada.
La pieza importante restante del rompecabezas es invalidar nuestro caché. Ver estos campos constituyentes están probablemente cambiaron de alguna views.py (esto podría ser más inteligente acerca de notar si se actualizan los valores pertinentes):
render_to ("farola / edit.html")
editar def (solicitud, lamppost_id):
& Nbsp; farola = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; si request.method == 'post':
& Nbsp; form = LamppostForm (request.POST)
& Nbsp; si form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; otra cosa:
& Nbsp; form = LamppostForm ()
& Nbsp; de retorno {"forma": la forma, 'farol': farola}
Esta es la parte más difícil como el desarrollador! El almacenamiento en caché requiere que cazar a todos los lugares el valor podría ser cambiado y pidiendo que el método flag_slow_full_name_as_stale. Está país le asigna un valor nuevo al azar cada mañana a las cron'o'clock? Esa bandera había mejor rancio por cron'o'one. Cómo se calcula el peso basado en la suma de todas las palomas asociados? Enganche en el rellano palomas. Y el despegue. Y todo lo que cambia el peso de una paloma individual. Como dijo Abraham Lincoln, "Sólo hay dos problemas difíciles en la programación: nombres, invalidación de caché y errores off-by-one".
Instalación
Usted puede hacer las cosas fáciles en sí mismo:
PIP instalar django-cache-campo
O, para una instalación manual, puede clonar el repositorio e instalarlo usando python setup.py y:
git git clone: ​​//github.com/aquameta/django-cached-field.git
cd django-caché de campo /
python setup.py install
Probado con django 1.3.1, 2.3.1 apio, apio django-2.3.3.
Configuración
Dos cambios de configuración son bastante necesarios para que las cosas funcionen: asegúrese de que es una aplicación registrada, asegúrese de que el apio ve su archivo de tareas:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Uno de los cambios es opcional: si el nuevo cálculo debe suceder cuando marcado como obsoleto (por defecto) o dejarse a la próxima vez que acceda al atributo. Esto es útil para entornos de prueba en la que no le importa que sus valores en caché no son válidos. Tenga en cuenta que en esta situación, usted no necesitaría apio.
CACHED_FIELD_EAGER_RECALCULATION = True # o Falso para entornos de prueba
Esta es una opción global, por lo que las excepciones individuales en lugar debe ser manejado por pasar el argumento and_recalculate a la llamada flag_FIELD_as_stale.
Advertencias
- Condición de carrera si se marca un campo tan rancio en una transacción db que lleva más tiempo en completarse que el trabajo apio necesita para ser llamado.
- Todos los métodos ORM (por ejemplo order_by, filtro) necesitan utilizar cached_FIELD.
- Recalculate_FIELD utiliza .Update (cached_FIELD = para establecer el valor.
- Flag_FIELD_as_stale utiliza .Update, así

Requisitos :

  • Python
  • .
  • Django

Comentarios a la django-cached-field

Comentarios que no se encuentran
Añadir comentario
A su vez en las imágenes!