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, ad esempio la memorizzazione nella cache automatica delle entità tramite l'API Memcache. Se al momento utilizzi la libreria client DB precedente, leggi la guida alla migrazione da DB a NDB
La classe Expando è una superclasse per le definizioni modello dei dati le cui proprietà vengono determinate dinamicamente. Un modello Expando può avere una combinazione di proprietà fisse simili a Modello e proprietà dinamiche assegnate a un'entità in fase di esecuzione.
Expando
è fornito dal modulo google.appengine.ext.db
.
Expando è una sottoclasse di Model e ne eredita i metodi di classe e istanza. 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 alle proprietà 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 all'istanza. Due istanze della stessa classe Expando possono avere insiemi diversi di proprietà dinamiche e possono persino avere proprietà dinamiche con lo stesso nome, ma di 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 istanze di Property per eseguire la convalida, impostare i valori predefiniti o applicare la 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 data store. Consulta Nomi proprietà non consentiti.
Suggerimento:se vuoi convalidare un valore di proprietà dinamico utilizzando una classe Property, puoi creare un'istanza della classe Property e chiamare il relativo metodo validate() sul valore.
Una sottoclasse di Expando può definire proprietà fisse simili a una classe Model. Le proprietà fisse di un Expando si comportano in modo simile alle proprietà di un modello. Un'istanza di Expando può avere proprietà sia fisse che 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 Expando 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 è definito come segue:
- class Expando(parent=None, key_name=None, **kwds)
-
Una classe di modelli le cui proprietà non devono essere definite nella classe prima dell'uso. Come Model, la classe Expando deve essere sottoclassificata per definire il tipo di entità di dati.
Expando è una sottoclasse di Model e ne eredita o sostituisce i metodi.
Argomenti
- parent
- L'istanza Model o Key per l'entità principale della nuova entità.
- key_name
-
Il nome della nuova entità. Il nome diventa parte della chiave primaria. Se
None
, per la chiave viene utilizzato un ID generato dal sistema.Il valore di key_name non deve iniziare con un numero e non deve essere del tipo
__*__
. Se l'applicazione utilizza i dati inviati dagli utenti come nomi delle chiavi delle entità del datastore (ad esempio un indirizzo email), deve prima eseguire la sanitizzazione del valore, ad esempio anteponendo una stringa nota come "key:", per soddisfare questi requisiti.Un
key_name
viene archiviato come stringa Unicode, con i valoristr
convertiti in testo ASCII. - **kwds
- Valori iniziali per le proprietà dell'istanza, come argomenti delle parole chiave. Ogni nome corrisponde a un attributo della nuova istanza e può corrispondere a proprietà fisse definite nella classe Expando o essere proprietà dinamiche.