La classe expando

Nota: gli sviluppatori che creano nuove applicazioni sono vivamente incoraggiati a utilizzare la libreria client NDB, che offre diversi vantaggi rispetto a questa libreria client, come la memorizzazione nella cache automatica delle entità tramite l'API Memcache. Se attualmente utilizzi la libreria client DB precedente, leggi la Guida alla migrazione dal database a NDB

La classe expando è una superclasse per le definizioni di modello dei dati le cui proprietà sono determinate in modo dinamico. Un modello espandibile può avere una combinazione di proprietà fisse, simili al modello Modello, e proprietà dinamiche assegnate a un'entità in fase di esecuzione.

Expando è fornito dal modulo google.appengine.ext.db.

Growo è una sottoclasse di Model e eredita i metodi della classe e dell'istanza da quella classe. La classe expando non definisce né sostituisce alcun metodo.

Introduzione

Un modello expando può avere proprietà fisse e dinamiche. Le proprietà fisse si comportano in modo simile a quelle di un modello e sono definite in modo simile nella classe del modello expando utilizzando gli attributi di classe. Le proprietà dinamiche vengono create quando vengono assegnati valori nell'istanza. Due istanze della stessa classe expando possono avere insiemi diversi di proprietà dinamiche e persino proprietà dinamiche con lo stesso nome ma tipi diversi. Le proprietà dinamiche sono sempre facoltative e non hanno un valore predefinito: non esistono finché non viene assegnato un valore.

Le proprietà dinamiche non possono utilizzare le istanze Proprietà per eseguire la convalida, impostare valori predefiniti o applicare logica automatica ai valori. Le proprietà dinamiche memorizzano semplicemente i valori dei tipi di datastore supportati. Consulta Tipi e classi di proprietà.

Inoltre, a differenza delle proprietà fisse, le proprietà dinamiche non possono utilizzare un nome diverso per l'attributo della classe e il nome della proprietà del datastore. Vedi Nomi di proprietà non consentiti.

Suggerimento:se vuoi convalidare un valore di proprietà dinamica utilizzando una classe Property, puoi creare un'istanza della classe Property e chiamare il relativo metodo validate() sul valore.

Una sottoclasse expando può definire proprietà fisse simili a una classe Model. Le proprietà fisse di un oggetto expando si comportano in modo simile alle proprietà di un modello. Un'istanza espandibile può avere proprietà fisse e dinamiche.

import datetime

from google.appengine.ext import db

class Song(db.Expando):
    title = db.StringProperty()

crazy = Song(title='Crazy like a diamond',
             author='Lucy Sky',
             publish_date='yesterday',
             rating=5.0)

hoboken = Song(title='The man from Hoboken',
               author=['Anthony', 'Lou'],
               publish_date=datetime.datetime(1977, 5, 3))

crazy.last_minute_note=db.Text('Get a train to the station.')

Le proprietà dinamiche (non fisse) di un'istanza espandibile possono essere eliminate. Per eliminare una proprietà dinamica, un'applicazione elimina l'attributo dell'istanza:

del crazy.last_minute_note

Costruttore

Il costruttore della classe expando viene definito come segue:

class Espandio(parent=Nessuno, parent=Nessuno, **parent)

Una classe di modello le cui proprietà non devono essere definite nella classe prima dell'uso. Come Modello, la classe expando deve essere sottoclasse per definire il tipo di entità dati.

Growo è una sottoclasse di Model e eredita o sostituisce i suoi metodi.

Argomenti

parent
L'istanza del modello o della chiave relativa all'entità padre della nuova entità.
key_name

Il nome della nuova entità. Il nome diventa parte della chiave primaria. Se None, viene utilizzato un ID generato dal sistema per la chiave.

Il valore di key_name non deve iniziare con un numero e non deve essere nel formato __*__. Se l'applicazione utilizza i dati inviati dagli utenti come nomi delle chiavi delle entità del datastore (ad esempio un indirizzo email), l'applicazione deve prima eliminare il valore, ad esempio anteponendo a tale valore una stringa nota come "key:", per soddisfare questi requisiti.

Un key_name viene memorizzato come stringa Unicode, con i valori str convertiti come testo ASCII.

**kwd
Valori iniziali per le proprietà dell'istanza, come argomenti parola chiave. Ciascun nome corrisponde a un attributo della nuova istanza e può corrispondere a proprietà fisse definite nella classe expando oppure essere proprietà dinamiche.