Как включить функцию динамического переключения URL в Django rest framework - PullRequest
0 голосов
/ 30 апреля 2020

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

Шаблон, который мы использовали, состоит в том, чтобы просто не маршрутизировать определенные конечные точки, если функция выключена. Т.е. в urls.py мы включаем URL-адреса в urlconf только если переключатель включен. Но это означает, что переключатели функций имеют эффект только при перезапуске сервера. Мы хотели бы иметь возможность динамически включать и выключать функции на работающем сервере. Кажется, что urlconf анализируется только во время запуска, поэтому изменения в нем не отражаются без перезагрузки.

Я попытался создать промежуточное ПО для блокировки определенных URL-адресов на основе значения переключателя функции и это работает, но не очень хорошо работает с Swagger документами, которые я также хотел бы отразить в состоянии переключателей функций.

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

Итак, как люди советуют мне использовать функцию динамических переключателей c в Django?

РЕДАКТИРОВАТЬ: Я хотел сказать, что я просмотрел несколько постов, таких как этот: Django dynamici c urlpatterns но на самом деле не было никакого разрешения.

Некоторые даже старше в постах говорится о принудительном обновлении sh из urlconf путем перезагрузки модуля, и я попробовал это, но, хотя я вижу, что код снова выполняется, похоже, он не влияет на URL-адреса. Как будто они кешируются, но я не могу найти способ очистить этот кеш (все посты, которые я нашел по этой теме, устарели)

1 Ответ

0 голосов
/ 30 апреля 2020

Включить все URL в urls.py. Затем добавьте перенаправление if-else в промежуточное ПО.

Мне не ясно, есть ли много опций переключения / URL или только один, но похоже, что у вас уже есть способ сохранить и просмотреть эту информацию.

class BeforeViewMiddleware(object):
    def process_view(self, request, view_func, view_args, view_kwargs):

        path = request.path

        # look up toggle option, urls in dynamic place. I use a DB table; you said in comments you use Constance 

        if <toggle is off and url is in toggle-on options only>: # depends on how you store this info
             return HttpResponseRedirect("<other url or some error page, whatever>")
...