【问题标题】:Is it possible to use query parameters on the Django Admin Site是否可以在 Django 管理站点上使用查询参数
【发布时间】:2016-08-25 03:54:25
【问题描述】:

我使用多租户并通过查询参数传递schema name。我的middleware 负责处理参数并设置正确的架构。它适用于我的 API 请求(直接 postsgets),但现在我需要通过在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? (或者甚至可能是我可以用来让管理站点租户了解的不同方法的建议)。

提前致谢。

【问题讨论】:

    标签: python django django-rest-framework multi-tenant query-parameters


    【解决方案1】:

    只是在解决同样的问题。

    问题是 django 管理员捕获任何 uknown(通过管理员视图上的某些过滤器未注册)查询参数,如果发现任何引发重定向的异常

    解决方案是在中间件内部调用类似的东西:

    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 管理站点是未知的(在请求到达管理视图之前删除)。请注意,此中间件应位于设置中的中间件列表的顶部。

    这很脏,而且很hacky。虽然我还没有找到更好的解决方案。

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 2011-02-17
      • 2014-09-27
      • 2018-02-09
      • 2020-12-18
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      相关资源
      最近更新 更多