在我的网站上,一旦用户注册,就会通过电子邮件发送验证码。在用户输入代码验证其帐户之前,该网站的所有子页面上都会显示一个横幅(位于此处顶部的过时django文档的红色横幅:https://docs.djangoproject.com/en/1.2/ref/forms/validation/)。输入验证码。”用表格输入验证码。
这是我第一次构建django网站,我只熟悉如何将特定网址绑定到单个视图。由于我的account_activation视图需要出现在所有子页面上(当用户登录时),这样做的最佳方法是什么?
我的urls.py到目前为止:
#urls.py
....
url(r'^$', views.register_user),
url(r'^accounts/login/$', user.login),
url(r'^accounts/logout/$', user.logout),
url(r'^accounts/register/$', user.register_user),
感谢您的帮助!
答案 0 :(得分:1)
您可以使用django中间件,检查用户是否已记录。如果用户已登录,您可以找到激活标志。如果激活标志为false,那么您可以附加您的请求META标记的某个消息变量。
<强>中间件:强>
这是您的中间件,
from django.contrib.auth.models import User
class FlashActivationMiddleware():
def process_request(request):
if request.user.is_authenticated():
if not request.user.is_active_email:
request.META["message"] = "You Email is not activated"
在设置中:
在django.core.context_processors.request
的设置文件中添加TEMPLATE_CONTEXT_PROCESSORS
,然后您就可以在模板中使用该请求,而无需在request
上下文中明确传递该请求。
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.request', # this one
)
在base.html中:
{% if request.META.message %}
{{ request.META.message }}
{% endif %}
注意: is_active_email
是django用户模型字段外部附件。
希望这会对你有所帮助。