Django, как создать админ-панель без моделей? - PullRequest
5 голосов
/ 28 ноября 2009

Я строю довольно большой проект, который в основном состоит из этого:

Сервер 1: Ледовые услуги. Glacier2 для обработки сеансов. Брандмауэр, разрешающий доступ к Glacier2.

Сервер 2: Веб-интерфейс (чтение, общедоступный) для сервисов Ice через Glacier2. Интерфейс администратора для сервисов Ice через Glacier 2.

Дело в том, что меня интересует веб-интерфейс. Я хочу использовать Django, потому что он написан на python и обладает невероятно полезным автоматическим генератором панели администратора.

Веб-интерфейс не имеет доступа ни к какой базе данных. Он подключается к службе Ice на сервере №1 через маршрутизатор Glacier2 и использует API, предоставляемый этими службами, для манипулирования данными.

И, как вы, вероятно, знаете, генерация администратора в Django зависит от использования ORM в Django; который я не использую, так как у меня нет базы данных для доступа.

Итак, мне нужно сгенерировать панель администратора, но вместо стандартного доступа к данным, как это обычно делает ORM, мне нужно перехватывать любые вызовы "db-access" и преобразовывать их в вызовы службы Ice, а затем принимать вывод сервиса (если есть), преобразовать его во все, что обычно возвращает ORM, и вернуть управление Django.

Кто-нибудь знает, как я мог это сделать? что мне нужно для подкласса? Какие-то конкретные идеи?

Спасибо за ваше время.

Ответы [ 4 ]

7 голосов
/ 29 ноября 2009

Я думаю, что может быть более простой способ, чем написать пользовательскую ORMS, чтобы получить необходимую интеграцию администратора. Я использовал его в приложении, которое позволяет управлять учетными записями электронной почты Webfaction через API панели управления.

Взгляните на models.py, admin.py и urls.py здесь: django-webfaction

Чтобы создать запись на странице индекса администратора, используйте фиктивную модель со значением = False

Зарегистрируйте эту модель у администратора.

Затем вы можете перехватить административные URL-адреса и направить их на свои собственные виды.

Это имеет смысл, если действия по добавлению / редактированию / удалению, которые предоставляет администратор, имеют смысл для вашего приложения. В противном случае вам лучше переопределить индекс администратора или шаблоны списка изменений, чтобы включить свои собственные действия

3 голосов
/ 28 ноября 2009

Реальная сила contrib.admin Джанго Формы . По сути, инструмент администратора в основном автоматически генерирует форму для соответствия модели с добавлением небольшого количества маршрутизации urls.py. В конце концов, вероятно, будет проще использовать формы django отдельно от инструмента администратора.

1 голос
/ 29 ноября 2009

вы можете "насмехаться" над некоторым классом, чтобы он выглядел как модель, но он прокси для ваших API

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)

Это может сработать .. но вам нужно многое сделать для совместимости с django.model

0 голосов
/ 28 ноября 2009

Django ORM имеет подключаемую backent, что означает, что вы можете написать backend для вещей, которые не являются RDBMS. Это, вероятно, довольно сложная задача, но хорошее место для начала - выступление Малкольма Трединника на DjangoCon 2008, Inside the ORM .

В противном случае вы можете вообще обойти ORM и написать формы вручную для получения необходимого вам доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...