如何从中间件重定向URL?
无限循环问题。
如果注册尚未完成,我打算将用户重定向到客户端注册URL。
def check_user_active(get_response):
def middleware(request):
response = get_response(request)
try:
print(Cliente.objects.get(usuario_id=request.user.id))
except Cliente.DoesNotExist:
return redirect('confirm')
return response
return middleware
答案 0 :(得分:2)
对服务器的每个请求都通过中间件。因此,当您进入confirm
页面时,请求将再次通过中间件。因此最好在此放置一些条件,以便忽略confirm
url。您可以尝试这样:
def check_user_active(get_response):
def middleware(request):
response = get_response(request)
if not request.path == "confirm":
try:
print(Cliente.objects.get(usuario_id=request.user.id))
except Cliente.DoesNotExist:
return redirect('confirm')
return response
return middleware
答案 1 :(得分:0)
您应该使用类似装饰器的login_required
,有关更多详细信息,请参见Django authentication system。
示例:
from django.contrib.auth.decorators import login_required
@login_required(login_url="/your/login/view/url/")
def my_view(request):
...
根据docs
,始终尽量避免使用中间件进行任何重定向中间件是挂钩Django请求/响应处理的框架。这是一个轻量级的“插件”系统,用于全局更改Django的输入或输出。
换句话说,中间件可用于处理请求和响应,如果您重定向到任何视图,则将(潜在地)递归触发中间件。
将来,您可能想添加一个可供匿名用户访问的视图,这种中间件将是一个问题...