簡體   English   中英

如何從 Django 中的中間件重定向 url?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM