Django 在每个视图中显示消息
Django show message in every view
我想在我的 Django 项目的每个视图中显示一条消息。用户创建帐户后,我会向他们发送一封电子邮件,要求他们验证他们的电子邮件,直到他们验证了他们的电子邮件地址(通过访问验证 URL),我才会显示该消息。
现在,我不想在验证 URL 视图中显示消息,也不希望消息是 "duplicated",即显示两条相同的消息。最初我尝试了创建一个中间件的方法,该中间件只会将消息添加到每个响应中,但这有两个缺点:
- 消息出现在验证视图中 -- 目前我从该视图中删除了所有消息,但这并不理想。
- 当我在我的视图中使用重定向时,我收到不止一条相同的消息。我使用的大多数重定向都在 POST 之后,所以我 可以 检查请求是否为 GET,但感觉不对。
这是中间件:
class VerifiedEmailMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
if request.user.id is None:
return self.get_response(request)
if not request.user.profile.verified_email:
messages.warning(request, 'We have sent you an email to verify your account. '
'Please click the link in that email to verify your account.')
response = self.get_response(request)
return response
是否有标准或更好的方法来做到这一点?
您可以通过简单地创建上下文处理器来实现这一点,并且可以检查用户是否已验证。根据它,您可以将一些上下文传递给您的模板。
喜欢:
def myContextProcessor(request):
return {
"is_loggedIn": True
}
并在settings.py
中注册
'context_processors': [
...,
'project.context_processors.myContextProcessor'
]
我想在我的 Django 项目的每个视图中显示一条消息。用户创建帐户后,我会向他们发送一封电子邮件,要求他们验证他们的电子邮件,直到他们验证了他们的电子邮件地址(通过访问验证 URL),我才会显示该消息。
现在,我不想在验证 URL 视图中显示消息,也不希望消息是 "duplicated",即显示两条相同的消息。最初我尝试了创建一个中间件的方法,该中间件只会将消息添加到每个响应中,但这有两个缺点:
- 消息出现在验证视图中 -- 目前我从该视图中删除了所有消息,但这并不理想。
- 当我在我的视图中使用重定向时,我收到不止一条相同的消息。我使用的大多数重定向都在 POST 之后,所以我 可以 检查请求是否为 GET,但感觉不对。
这是中间件:
class VerifiedEmailMiddleware:
def __init__(self, get_response):
self.get_response = get_response
# One-time configuration and initialization.
def __call__(self, request):
# Code to be executed for each request before
# the view (and later middleware) are called.
if request.user.id is None:
return self.get_response(request)
if not request.user.profile.verified_email:
messages.warning(request, 'We have sent you an email to verify your account. '
'Please click the link in that email to verify your account.')
response = self.get_response(request)
return response
是否有标准或更好的方法来做到这一点?
您可以通过简单地创建上下文处理器来实现这一点,并且可以检查用户是否已验证。根据它,您可以将一些上下文传递给您的模板。 喜欢:
def myContextProcessor(request):
return {
"is_loggedIn": True
}
并在settings.py
'context_processors': [
...,
'project.context_processors.myContextProcessor'
]