La classe Espandio

Nota: Gli sviluppatori che creano nuove applicazioni sono vivamente incoraggiati a utilizzare il Libreria client NDB, che offre numerosi vantaggi rispetto a questa libreria client, come la memorizzazione automatica nella cache delle entità tramite tramite Google Cloud CLI o tramite l'API Compute Engine. Se al momento utilizzi la libreria client DB precedente, leggi il Guida alla migrazione da DB a NDB

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

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

Espandio è una sottoclasse di Model da cui eredita i metodi di classe e istanza. La classe Espandio non definisce né sostituisce alcun metodo.

Introduzione

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

Le proprietà dinamiche non possono utilizzare istanze Proprietà per eseguire la convalida, configurare valori predefiniti o applicare logica automatica ai valori. Le proprietà dinamiche archiviano 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 classe e il nome della proprietà datastore. Consulta la sezione Nomi delle proprietà non consentiti.

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

Una sottoclasse Espandio può definire proprietà fisse simili a una classe Model. Le proprietà fisse di un Espandio si comportano in modo simile alle proprietà di un modello. Un'istanza Espandio può avere proprietà sia fisse sia 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 Espandio 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 Espandio è definito come segue:

class Expando(parent=None, key_name=None, **kwds)

Una classe di modello le cui proprietà non devono essere definite nella classe prima dell'uso. Come nel caso del modello, la classe Espandio deve essere creata con sottoclassi per definire il tipo di entità di dati.

Espandio è una sottoclasse di Model ed eredita o esegue l'override dei propri metodi.

Argomenti

padre
L'istanza del modello o della chiave dell'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 nel formato __*__. Se la tua applicazione utilizza dati inviati dagli utenti come nomi di chiavi di entità del datastore (ad esempio un indirizzo email), per soddisfare questi requisiti l'applicazione deve prima sanificare il valore, ad esempio anteponendovi una stringa nota come "key:".

Un key_name viene memorizzato come stringa Unicode, con i valori str convertiti come 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 Espandio o essere proprietà dinamiche.