3

我不知道这是否可能,但我想使用中间件在 URL 末尾添加一些参数。修改请求的 URL 后可以不重定向吗?

IE。用户点击: .../some_link 和中间件将其重写为: .../some_link?par1=1&par2=2

另一种方法是修改响应并替换每个 HTML 链接,但这不是我想做的事情。

谢谢

4

3 回答 3

4
class YourRedirectMiddleware:

    def process_request(self, request):
        redirect_url = request.path+'?par1=1&par2=2'
        return HttpResponsePermanentRedirect(redirect_url)

你想完成什么,为什么这样?

于 2009-09-22T09:03:49.343 回答
1

我认为这真的取决于你的问题以及你到底想要做什么。

您无法在不重定向用户的情况下更改 URL,因为您无法在不重新加载的情况下修改页面上的 URL。基本上,重定向是告诉用户继续前进的响应,没有办法实际更改 URL。请注意,即使您使用 JavaScript 之类的方式执行此操作,您也基本上与重定向相同,因此无法在客户端或服务器端完成。

如果您向我们解释为什么需要通过 URL 传递此信息,我认为这可能会有所帮助。为什么不在会话中存储数据?

我想您可以将数据添加到请求对象中,但不会将其添加到 URL 中。

于 2009-09-22T14:06:31.420 回答
0

你可以在中间件中做任何你喜欢的事情。您可以访问请求对象,您可以获取 URL 并根据需要重定向到新的。

我的问题是,你为什么要这样做?如果您需要保留有关请求的信息,那么执行此操作的正确位置是在会话中。

于 2009-09-22T09:06:21.350 回答