如何在Django rest框架中实现动态切换URL的功能?

问题描述 投票:0回答:1

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

我们遵循的模式是,如果功能切换开关关闭,就不对某些端点进行路由。例如在 urls.py中的URL,我们只包括 urlconf 如果切换是开启的。但这意味着只有当服务器重新启动时,功能切换才会有效果。我们希望能够在运行中的服务器上动态地打开和关闭功能切换。似乎 urlconf 只有在启动时才会被解析,所以在没有重启的情况下,对它的更改不会被反映出来。

我试着做了一个中间件,根据功能切换的值来阻止某些URL,这可以工作,但不能很好的与 Swagger docs,我也希望能反映出功能切换的状态。

总的来说,感觉我是在和系统作斗争,这通常是我处理问题的角度不对。

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

EDIT:我的意思是说,我看了一些帖子,比如这个。Django动态urlpatterns 但其实并没有任何解决方法。

有些甚至是老帖子说要强行刷新的。urlconf 我试过这样做,但是,虽然我可以看到代码再次被执行,但这似乎并不影响URLs。好像它们被缓存了,但我找不到任何方法来清除缓存(我找到的所有关于这个问题的帖子都已经过时了)。

django django-rest-framework featuretoggle
1个回答
0
投票

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

我不清楚是有很多toggleurl选项还是只有一个,但听起来你已经有办法存储和查找这些信息了。

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>")
© www.soinside.com 2019 - 2024. All rights reserved.