Django - 查看所有子网址上的激活

时间:2014-05-13 02:36:02

标签: django

在我的网站上,一旦用户注册,就会通过电子邮件发送验证码。在用户输入代码验证其帐户之前,该网站的所有子页面上都会显示一个横幅(位于此处顶部的过时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),

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以使用django中间件,检查用户是否已记录。如果用户已登录,您可以找到激活标志。如果激活标志为false,那么您可以附加您的请求META标记的某个消息变量。

<强>中间件:

Middleware is a framework of hooks into Django’s request/response processing. It’s a light, low-level “plugin” system for globally altering Django’s input or output.

这是您的中间件,

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用户模型字段外部附件。

希望这会对你有所帮助。