Pergunta

Estou construindo uma bastante grande projecto, que consiste basicamente isto:

Servidor 1: serviços baseados em gelo. Glacier2 para manipulação de sessão. permitindo Firewall acesso a Glacier2.

Server 2: interface web (leia-se, pública) para serviços de gelo através Glacier2. interface de administração de serviços de gelo via Glacier 2.

O ponto que eu estou preocupado é com a interface web. Eu quero usar o Django, porque é tanto escrito em Python e tem que gerador de painel de administração automática incrivelmente útil.

A interface web não acessar qualquer banco de dados. Ele se conecta a um serviço de gelo no servidor # 1 através do roteador Glacier2 e usa a API exposta por esses serviços para manipular dados.

E como você provavelmente sabe, a geração admin no Django depende do uso de ORM do Django; que eu não estou usando desde que eu não tenho nenhuma base de dados para acesso.

Então, eu preciso gerar painel de administração, mas, em vez de ter um acesso de dados padrão como o ORM normalmente faz, eu preciso para interceptar todas as chamadas "db de acesso" e transformá-los em chamadas de serviço de gelo, e depois tome a saída do serviço (se houver), transformá-lo em qualquer que seja o ORM normalmente retorna e controle de retorno para Django.

Alguém sabe como eu poderia fazer isso? o que eu preciso subclasse? Todas as ideias específicas?

Obrigado pelo seu tempo.

Foi útil?

Solução

Eu acho que pode haver uma maneira mais simples do que escrever ORMS personalizados para obter a integração administrador quiser. Usei-o em um aplicativo que permite gerenciar contas de email Webfaction através do seu API Painel de Controle.

Dê uma olhada em models.py, admin.py e urls.py aqui: django- Webfaction

Para criar uma entrada sobre o uso página principal do admin um modelo fictício que conseguiu = false

Register esse modelo com o administrador.

Você pode então interceptar as urls admin e encaminhá-los para os seus próprios pontos de vista.

Isso faz sentido se os adicionar / editar / acções excluir o administrador fornece faz sentido para a sua aplicação. Caso contrário, você é melhor fora substituindo o índice de administrador ou modelos de changelists para incluir suas próprias ações personalizadas

Outras dicas

O poder real do contrib.admin é Django Forms . Em essência, a ferramenta de administração é basicamente uma forma de combinar um modelo com um pouco de urls.py roteamento jogado na geradoras de auto. No final ele provavelmente apenas ser mais fácil de usar o Django Forms além da ferramenta de administração.

Você pode "simulado" alguma classe para que ele olhar como um modelo, mas ele faz proxy para suas 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)

Isso pode funcionar .. mas você precisa fazer um material compatível monte django.model

O ORM Django tem um backent pluggable, o que significa que você pode escrever um backend para coisas que não são RDBMSes. É provavelmente uma tarefa bastante grande, mas um bom lugar para começar é com o discurso de Malcolm Tredinnick de DjangoCon 2008, Dentro de ORM .

Caso contrário, você pode ignorar o ORM completamente, e escrever as formas manualmente para o acesso necessário.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top