1

我正在做一个项目,我们使用功能切换来隐藏功能,直到它们准备好发布。

我们遵循的模式是,如果功能切换关闭,则根本不路由某些端点。即在 中,如果切换打开urls.py,我们仅在中包含 URL 。urlconf但这意味着功能切换只有在服务器重新启动时才会生效。我们希望能够在正在运行的服务器上动态打开和关闭功能切换。似乎urlconf仅在启动时解析,因此如果不重新启动,则不会反映对它的更改。

我已经尝试制作一个中间件来根据功能切换的值阻止某些 URL,它可以工作但不能很好地与Swagger文档一起使用,我也想反映功能切换的状态。

总的来说,感觉就像我在与系统作斗争,这通常表明我没有从正确的角度接近它。

那么,人们如何建议我在 Django 中实现行为的动态功能切换?

编辑:我的意思是说我看过一些帖子,比如这个:Django dynamic urlpatterns但实际上并没有任何解决方案。

一些更老的帖子谈到urlconf通过重新加载模块来强制刷新,我已经尝试过了,但是虽然我可以看到代码再次执行,但它似乎不会影响 URL。就好像它们正在被缓存,但我找不到任何清除缓存的方法(我在该主题上找到的所有帖子都已过时)

4

1 回答 1

0

在 urls.py 中包含所有 url。然后将 if-else 重定向添加到中间件。

我不清楚是否有许多切换/网址选项或只有一个,但听起来您已经有了一种存储和查找该信息的方法。

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>")
于 2020-04-30T13:58:57.893 回答