Skip to main content
 首页 » 编程设计

python之django 中间件导致的重定向循环

2025年05月04日69lori

我试图在注册后立即将用户重定向到协议(protocol)条款页面。

这是我的中间件类:

class TermsMiddleware(object): 
 
    def process_request(self, request): 
        if request.user.profile.filled_terms is None: 
            return redirect(reverse('terms'))  

我收到以下错误,我可以通过快速浏览我的服务器来确认:

This webpage has a redirect loop 

我有一个带有 filled_terms 字段的 Profile 模型类。

我有一个术语模板,当我手动访问它时它工作正常。

这也是我的 url 匹配器:

url(r'^terms/', 'hana.views.terms', name='terms') 

我怎样才能摆脱这个重定向循环,让注册用户通过中间件重定向到协议(protocol)条款页面?

请您参考如下方法:

好吧,对条款页面的请求也会被处理,如果 filled_terms 是 None,它会重定向到条款页面,这...那是你的循环。

如果当前请求是针对重定向页面的路径,那么一种解决方法是检查中间件:

class TermsMiddleware(object): 
 
    def process_request(self, request): 
        if request.user.profile.filled_terms is None: 
            if not request.path == reverse('terms'): 
                return redirect(reverse('terms')) 

如果请求不是针对重定向页面的请求,那么您只执行重定向。