API de Python¶
Cualquier función Python de Rapido recibe el context
como parámetro.
El context
proporciona las siguientes propiedades:
context.app
¶
Esta propiedad da acceso al objeto de aplicación Rapido.
Propiedades
acl
- Devuelve el objeto de la lista de control de acceso de la aplicación Rapido (ver abajo).
blocks
- Devuelve los identificadores de bloque existentes.
indexes
- Devuelve los identificadores de índice existentes.
url
- Devuelve la URL de la aplicación.
Métodos
create_record(self, id=None)
- Crea y devuelve un nuevo registro. Si no se proporciona
id
, se genera una predeterminada. Siid
ya existe, se sustituye por otro (como...-1
,...-2
). delete_record(self, id=None, record=None, ondelete=True)
- Elimine el registro (que se puede pasar como objeto o como id). Si la
ondelete
es verdad, la funciónon_delete
será llamada (si existe) antes de borrar el registro. get_block(self, block_id)
- Devuelve un bloque.
get_record(self, id)
- Devuelve el registro correspondiente al
id
, oNone
si no existe. log(self, message)
- Registra un mensaje en el registro del servidor. Si la aplicación está en modo de depuración, registra el mismo mensaje en la consola javascript del navegador. Los mensajes pueden ser cadenas o cualquier otro objeto serializable.
records(self)
- Devuelve todos los registros como una lista.
_records(self)
- Devuelve todos los registros como un generador de Python.
search(self, query, sort_index=None, reverse=False)
- Realiza una búsqueda y devuelve registros como una lista.
_search(self, query, sort_index=None, reverse=False)
- Realiza una búsqueda y devuelve registros como un generador de Python.
context.request
and context.parent_request
¶
context.request
es la actual request a Rapido, como:
Cuando un bloque está embebido en una página de Plone, context.request
fue emitido por el navegador del usuario, fue emitido por Diazo.
Para obtener el request emitida por el navegador del usuario, nosotros usamos context.parent_request
.
Ambos son objetos de solicitud HTTP, consulte la documentación de referencia.
Ejemplos:
- Lectura de valores presentados:
val1 = context.request.get('field_1') # returns None if key doesn't exist
val1 = context.request['field_2'] # fail if key doesn't exist
- Lectura del
BODY
:
request.get('BODY')
context.portal
¶
Devolver el objeto de portal Plone.
Es equivalente a:
context.api.portal.get()
La tarea más común que realizaremos a través del objeto de portal es obtener su contenido:
folder = context.portal['my-folder']
context.content
¶
Devuelve el contenido actual de Plone.
Las tareas más comunes que realizaremos en el contenido son:
- leer / escribir sus atributos (lectura / escritura):
the_tile = context.content.title
context.content.title = "I prefer another title"
- obteniendo su URL:
context.content.absolute_url()
Para manipular el contenido, consulte la documentación de la API de Plone sobre el contenido.
Nota
Dependiendo de su tipo de contenido, el objeto de contenido puede tener métodos y propiedades muy diferentes.
context.record
¶
Devuelve el registro Rapido actual si lo hay.
Consulte Registro para obtener más información.
context.api
¶
Da acceso completo a la API de Plone.
Advertencia
No es necesario importar la API, como se muestra en todos los ejemplos de API de Plone:
from plone import api # WRONG
porque la API ya está disponible en el context de Rapido:
catalog = context.api.portal.get().portal_catalog
Esta API permite principalmente:
buscar contenidos; por ejemplo:
folders = context.api.content.find(portal_type="Folder") # be careful, the find() method returns Brain objects, not real objects # so only indexed attributes are available. desc = folders[0].Description # OK folders[0].objectIds() # WRONG! folder = folders[0].getObject() folder.objectIds() # OK!
para manipular contenidos (create / delete / move / publish / etc), ejemplo:
new_page = context.api.content.create( type='Document', title='My Content', container=context.content) context.api.content.transition(obj=new_page, transition='publish')
para acceder o gestionar la información de usuarios y grupos y enviar correos electrónicos. Ejemplo:
current_user = context.api.user.get_current() context.api.portal.send_email( recipient=current_user.getProperty("email"), sender="noreply@plone.org", subject="Hello", body="World", )
Para ejemplos más detallados , consulte la documentación de la API de Plone.
context.rapido
¶
context.rapido
es una función capaz de obtener otra aplicación Rapido en nuestro script actual.
Toma como parámetro obligatorio el id de la aplicación Rapido. Ejemplo:
purchase_app = context.rapido('purchase')
new_purchase_order = purchase_app.create_record()
También puede aceptar un parámetro content
para proporcionar un específico contexto contenido a la aplicación (si no se proporciona, se tomará el contenido actual). Ejemplo:
stat_app = context.rapido('stats', content=context.portal.news)
context.modules
¶
Advertencia
Por razones de seguridad, no se permite importar un módulo Python en un archivo Rapido Python.
Rapido proporciona algunos módulos seguros a través de context.modules
:
context.modules.datetime
: Tipos básicos de fecha y hora,context.modules.random
: Genera números pseudo-aleatorios,context.modules.time
: Tiempo de acceso y conversiones.
Si necesitamos agregar módulos a context.modules
, podemos hacerlo agregando en nuestro propio complemento de la siguiente forma:
import re
from rapido.core import app
app.safe_modules.re = re
En este ejemplo, permitimos acceder a context.modules.re
desde nuestros archivos Python Rapido.
Registro¶
Propiedades
url
- Devuelve la URL del registro.
id
- Devuelve el identificador de registro.
Métodos
display(self, edit=False)
- Representa el registro utilizando su bloque asociado (si existe).
get(self, name, default=None)
- Devuelve el valor del elemento (y el valor predeterminado es el
default
si el elemento no existe). items(self)
- Devuelve todos los elementos almacenados.
reindex(self)
- Vuelva a indexar el registro.
save(self, request=None, block=None, block_id=None, creation=False)
Actualizar el registro con los elementos proporcionados e indexarlo.
request
puede ser una request actual HTTP o un diccionario.Si se menciona un bloque, se ejecutarán fórmulas (
on_save
, elementos calculados, etc.).Si no hay bloque (y
request
es un diccionario), solo salvamos los valores de los elementos.set_block(self, block_id)
- Asigne un bloque al registro. El bloque se utilizará entonces para representar el registro o para guardarlo.
Interfaz de diccionario de Python
Los elementos del registro se pueden acceder y manipular como elementos del diccionario:
myrecord['fruit'] = "banana"
for key in myrecord:
context.app.log(myrecord[key])
if 'vegetable' in myrecord:
del myrecord['fruit']
Nota
Cuando se establece un valor de elemento, el registro no se reindexa.
Lista de control de acceso¶
Nota
La lista de control de acceso a la aplicación puede ser obtenida mediante context.app.acl
.
Métodos
current_user(self)
- Devuelve el ID de usuario actual. Equivalente a:
context.api.user.get_current().getUserName()
current_user_groups(self)
- Devuelve los grupos al usuario actual al que pertenece. Equivalente a:
api.user.get_current().getGroups()
has_access_right(self, access_right)
- Devuelve
True
si el usuario actual tiene el derecho de acceso especificado (los derechos de acceso Rapido sonreader
,author
,editor
,manager
) has_role(self, role_id)
- Devuelve
True
si el usuario actual tiene la función especificada. roles(self)
- Devuelve los roles existentes.