Jav*_*ier 1 python django redirect middleware django-middleware
我正在尝试在注册后立即重定向用户以转到协议条款页面。
这是我的中间件课程:
class TermsMiddleware(object):
def process_request(self, request):
if request.user.profile.filled_terms is None:
return redirect(reverse('terms'))
Run Code Online (Sandbox Code Playgroud)
我收到以下错误,可以快速浏览一下我的服务器:
This webpage has a redirect loop
Run Code Online (Sandbox Code Playgroud)
我有一个带有fill_terms字段的Profile模型类。
我有一个术语模板,当我手动访问它时,它工作得很好。
这也是我的网址匹配器:
url(r'^terms/', 'hana.views.terms', name='terms')
Run Code Online (Sandbox Code Playgroud)
我如何摆脱这种重定向循环,并使用中间件将注册用户重定向到协议条款页面?
好了,也处理了对条款页面的请求,如果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'))
Run Code Online (Sandbox Code Playgroud)
这样,仅当请求不针对重定向页面时,才执行重定向。