[英]How to redirect url from middleware in Django?
如何從中間件重定向網址?
無限循環問題。
如果注冊尚未完成,我打算將用戶重定向到客戶端注冊 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
對服務器的每個請求都經過中間件。 因此,當您要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
您應該使用login_required
類的裝飾器,請參閱Django 身份驗證系統以獲取更多詳細信息。
例子:
from django.contrib.auth.decorators import login_required
@login_required(login_url="/your/login/view/url/")
def my_view(request):
...
根據 文檔,盡可能避免使用中間件進行任何類型的重定向
中間件是 Django 請求/響應處理的鈎子框架。 它是一個輕量級的低級“插件”系統,用於全局更改 Django 的輸入或輸出。
換句話說,中間件用於處理請求和響應,如果您重定向到任何視圖,您將(可能)遞歸地觸發您的中間件。
以后可能要添加匿名用戶可以訪問的視圖,這個中間件會出問題……
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.