Можно ли использовать параметры запроса на сайте администратора Django?

Я работаю с несколькими арендаторами и передаю schema name через параметр запроса. Мой middleware заботится о параметре и устанавливает правильную схему. Он очень хорошо работает с моими запросами API (прямые публикации и получения), но теперь мне нужно получить доступ к странице администрирования для каждой из моих схем, указав имя схемы в Параметр запроса URL.

Вот проблема:

Когда я получаю доступ

http://localhost:8000/admin/?schema_name=myschema

мой middleware перехватывает параметр, но сайт администратора перенаправляет меня на страницу входа с этим URL-адресом:

http://localhost:8000/admin/login/?next=/admin/%3Fschema_name%3Dmyschema

После этого перенаправления кажется, что он снова проходит через мой middleware, на этот раз без параметра ?schema_name=myschema, в результате чего мой middleware устанавливает общедоступную схему каждый раз, когда Django перенаправляет URL-адрес.

Есть ли способ сообщить сайту администратора Django об этом параметре, даже если какое-то перенаправление изменяет URL-адрес? (или, может быть, даже предложение другого подхода, который я мог бы использовать, чтобы информировать арендатора сайта администратора).

Заранее спасибо.


person Danilo Prado    schedule 29.04.2016    source источник


Ответы (1)


Как раз работал над такой же проблемой.

Проблема в том, что администратор django перехватывает любые неизвестные (незарегистрированные через какой-либо фильтр в представлении администратора) параметры запроса, и если они обнаружены, возникает исключение, которое перенаправляет

Решение состоит в том, чтобы вызвать что-то подобное внутри промежуточного программного обеспечения:

def extract_client_id_from_admin_api_url(request):
    request.GET._mutable = True
    client_id = request.GET.pop('client_id', None)
    request.GET._mutable = False
    return client_id[0] if client_id else None

Так что ваш параметр запроса неизвестен сайту администратора django (удален до того, как запрос достигнет представления администратора). Обратите внимание, что это промежуточное программное обеспечение должно быть в верхней части списка промежуточного программного обеспечения в настройках.

Это грязно и хакерски. Хотя я еще не нашел лучшего решения.

person LinPy fan    schedule 30.07.2018