如果他們的個人資料角色值設定為“0”,我希望使用自定義中間件將用戶重定向到他們的個人資料角色。
下面是我正在使用的當前代碼,但會導致 302 重定向回圈。這是基于我在互聯網上找到的其他示例,但沒有找到修復程式的運氣。
任何想法都會受到高度重視。
from django.shortcuts import redirect
from django.utils.deprecation import MiddlewareMixin
from django.http import HttpResponseRedirect
class UserRoleMiddleware(MiddlewareMixin):
def __init__(self, get_response):
self.get_response = get_response
def process_request(self, request):
redirect_url = '/role/'
if request.user.is_authenticated and request.user.profile.role == '0':
print('user must define a role')
return HttpResponseRedirect(redirect_url)
return None
回復:
[23/Oct/2021 23:00:50] "GET /role/ HTTP/1.1" 302 0
user must define a role
[23/Oct/2021 23:00:50] "GET /role/ HTTP/1.1" 302 0
user must define a role
[23/Oct/2021 23:00:50] "GET /role/ HTTP/1.1" 302 0
user must define a role
[23/Oct/2021 23:00:50] "GET /role/ HTTP/1.1" 302 0
uj5u.com熱心網友回復:
因為中間件也會在您的/role/路由上觸發,您應該檢查請求路徑是否針對該路由以避免回圈。
def process_request(self, request):
redirect_url = '/role/'
if request.path == redirect_url:
return self.get_response(request)
# or check for `and request.path != redirect_url` here
if request.user.is_authenticated and request.user.profile.role == '0':
print('user must define a role')
return HttpResponseRedirect(redirect_url)
return None
另外,我相信你不想被回傳self.get_response(request)沒有None。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/334385.html
標籤:姜戈 django 中间件 django-3.2
