我不知道这是否可能,但我想使用中间件在 URL 末尾添加一些参数。修改请求的 URL 后可以不重定向吗?
IE。用户点击: .../some_link 和中间件将其重写为: .../some_link?par1=1&par2=2
另一种方法是修改响应并替换每个 HTML 链接,但这不是我想做的事情。
谢谢
我不知道这是否可能,但我想使用中间件在 URL 末尾添加一些参数。修改请求的 URL 后可以不重定向吗?
IE。用户点击: .../some_link 和中间件将其重写为: .../some_link?par1=1&par2=2
另一种方法是修改响应并替换每个 HTML 链接,但这不是我想做的事情。
谢谢
class YourRedirectMiddleware:
def process_request(self, request):
redirect_url = request.path+'?par1=1&par2=2'
return HttpResponsePermanentRedirect(redirect_url)
你想完成什么,为什么这样?
我认为这真的取决于你的问题以及你到底想要做什么。
您无法在不重定向用户的情况下更改 URL,因为您无法在不重新加载的情况下修改页面上的 URL。基本上,重定向是告诉用户继续前进的响应,没有办法实际更改 URL。请注意,即使您使用 JavaScript 之类的方式执行此操作,您也基本上与重定向相同,因此无法在客户端或服务器端完成。
如果您向我们解释为什么需要通过 URL 传递此信息,我认为这可能会有所帮助。为什么不在会话中存储数据?
我想您可以将数据添加到请求对象中,但不会将其添加到 URL 中。
你可以在中间件中做任何你喜欢的事情。您可以访问请求对象,您可以获取 URL 并根据需要重定向到新的。
我的问题是,你为什么要这样做?如果您需要保留有关请求的信息,那么执行此操作的正确位置是在会话中。