2009-11-28 16 views
5

Estoy construyendo un proyecto bastante grande, que consiste básicamente en esto:Django, ¿cómo generar un panel de administración sin modelos?

Servidor 1: Servicios basados ​​en hielo. Glacier2 para el manejo de sesiones. Firewall que permite el acceso a Glacier2.

Servidor 2: Interfaz web (lectura, pública) para servicios de hielo a través de Glacier2. Interfaz de administración para servicios de hielo a través de Glacier 2.

El punto que me preocupa es la interfaz web. Quiero usar Django, porque está escrito en python y tiene ese generador de panel de administración automática increíblemente útil.

interfaz de la web no tiene acceso a ninguna base de datos. Se conecta a un servicio Ice en el servidor n. ° 1 a través del enrutador Glacier2 y utiliza la API expuesta por esos servicios para manipular datos.

Y como probablemente sepa, la generación de administradores en Django depende del uso del ORM de Django; que no estoy usando ya que no tengo una base de datos para acceder.

Así que necesito para generar el panel de administración, pero, en lugar de tener un acceso a los datos estándar como el ORM hace normalmente, lo que necesito para interceptar las llamadas "DB-Access" y transformarlas en llamadas de servicio de hielo, y luego tomar la salida del servicio (si corresponde), transfórmela en lo que normalmente devuelve ORM y devuelva el control a Django.

Alguien sabe cómo podría hacer esto? ¿Qué necesitaría para crear una subclase? Alguna idea especifica?

Gracias por su tiempo.

Respuesta

7

creo que podría ser una manera más sencilla que la escritura ORMS personalizados para conseguir la integración de administración que desea. Lo usé en una aplicación que permite gestionar cuentas de correo electrónico de Webfaction a través de su API del Panel de control.

Tome un vistazo a models.py, admin.py y URLs.py aquí: django-webfaction

para crear una entrada en la página de índice del administrador utilizar un modelo ficticio que ha logrado = False

Register ese modelo con el administrador.

Puede interceptar las direcciones de administrador y dirigirlas a sus propios puntos de vista.

Esto tiene sentido si las acciones de agregar/editar/eliminar que proporciona el administrador tienen sentido para su aplicación. De lo contrario, es mejor que anule el índice de administrador o las plantillas de lista de cambios para incluir sus propias acciones personalizadas

+0

He descargado su aplicación, y me gusta la implementación general. En cuanto a lo que realmente hacen los servicios, los principales que ya he diseñado, se trata de: Cuentas (autenticación, usuarios, grupos, permisos), Configuración (para cada servicio, e incluso la interfaz web), Registro (registra las acciones de cada usuario, no es lo mismo que el panel de administración 'Acciones recientes'), Trabajos (cola para otros servicios) y los servicios reales que hacen algo interesante, que aún no se han diseñado. Por lo tanto, 9/10, se mantiene el conjunto de acciones add/edit/delete. Para ese 1/10, siempre puedo generar mis propias páginas personalizadas como lo hace tu aplicación. – user168833

+0

+1 por sugerir 'managed = False' – Don

0

El django ORM tiene un backent conectable, lo que significa que puede escribir un backend para cosas que no son RDBMS. Probablemente sea una tarea bastante grande, pero un buen lugar para comenzar es con la charla de Malcolm Tredinnick de DjangoCon 2008, Inside the ORM.

De lo contrario, podría omitir el ORM por completo, y escribir los formularios manualmente para el acceso que necesita.

3

El poder real de contrib.admin es django Forms. Básicamente, la herramienta de administración básicamente genera automáticamente un Formulario para unir un Modelo con un poco de enrutamiento urls.py. Al final, probablemente sea más fácil usar los Formularios de django además de la herramienta de administración.

+0

+1. Debería tomar el código de ejemplo de la URL que proporcionó, ponerlo en funcionamiento y luego adaptarlo a sus propósitos. – steveha

+0

Verificaré la documentación que vinculó. – user168833

1

se puede "simulacro" alguna clase de modo que se vea como un modelo, pero lo hace de proxy a sus APIs

F. E.

class QuerysetMock(object): 
    def all(): 
     return call_to_your_api() 
    [...] 


class MetaMock(object): 
    def fields(): 
     return fields_mock_objects.. 
    verbose_name = '' 
    [...] 

class ModelMock(object): 
    _meta = MetaMock() 
    objects = QuerysetMock() 

admin.site.register(ModelMock) 

Esto puede funcionar .. pero hay que hacer muchas cosas django.model compatibles

Cuestiones relacionadas