2

这是一个非常微不足道的问题,但我一定遗漏了一些东西,因为我无法提出我满意的解决方案。

我正在使用两个库来处理注册,django-registration 用于基于电子邮件的注册,django-socialauth 用于基于社交的注册,并且希望在用户第一次注册时显示欢迎消息。

我目前的方法是使用上下文处理器检查用户是否在过去 2 分钟内注册,如果是,则更新请求对象。这似乎效率低下,因为我每次都检查它只使用一次。

我尝试使用信号来实现它,但我遇到的问题是我需要某种方式来挂钩请求,但只有 django-registration 会传递请求。

我正在考虑的一个选项是使用信号来更新数据库中的记录,但这对于这么简单的事情来说似乎有点过分了。我错过了一些明显的东西吗?

context_processors.py:

def just_registered(request):
    just_registered = False
    if request.user.is_authenticated() and request.user.email:
        if request.user.date_joined < datetime.today() + timedelta(minutes=2):
            if 'just_registered' not in request.session:
                just_registered = True
                request.session['just_registered'] = just_registered
    return { 'just_registered' : just_registered }
4

3 回答 3

3

您可以使用 django 消息并在模板​​中实现它

{% if messages %}
    {% for message in messages %}
    {{message}}
    {% endfor %}
{% endif %}

.

def just_registered(request):
    if request.user.is_authenticated():
        if request.user.date_joined < datetime.today() + timedelta(minutes=2):
            messages.info(request, "Welcome")
    return ''

user is authenticated 已经明白了,你不必输入用户电子邮件,因为当你注册时,电子邮件是必需的

于 2013-02-27T00:25:22.647 回答
0

根据您对公主的评论,您最好的选择是在用户第一次登录时保存某种数据。

我建议编写一个简单的中间件来检测首次登录并将其保存为持久形式

看看这个:

http://blog.elcodo.pl/post/926902087/django-detect-users-first-login

您还可以在 django tracking 中签出中间件

https://github.com/codekoala/django-tracking/blob/master/tracking/middleware.py

它的效率有点低,但是鉴于 HTTP 的无状态性,我看不到任何其他方式

于 2013-03-16T04:37:50.420 回答
0

为了清楚起见,您想在用户第一次成功登录时显示欢迎消息(它在您的问题中表示第一次注册)?他们是否关注电子邮件中的激活链接?您可以将该电子邮件链接转到登录页面的新用户版本。

否则,如果您想为普通用户和第一次登录的人使用相同的页面,我看不出如何避免检查这是否是用户第一次登录。要做到这一点,看起来像在用户上使用布尔属性(或对他们进行 fk'ed)来跟踪他们之前是否登录过,而不是查看他们多久之前激活了帐户(如果他们激活了 2 天呢?以前但没有登录?)

于 2013-03-09T23:19:40.853 回答