2

这是一个非常小的问题,但我必须错过一些东西,因为我无法想出一个我很满意的解决方案。如何在使用django-registration和django-socialauth时显示注册后欢迎信息?

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

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

我尝试过使用信号来实现它,但是我碰到的问题是我需要某种方式来挂接请求,但只有django注册才能传递请求。

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

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 } 

回答

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 '' 

用户进行身份验证已经明白,你不必把用户的电子邮件,因为当你注册,电子邮件需要

+0

不,我明白这一部分。问题是,我不想使用just_registered函数,因为检查是为每个页面加载完成的,因为我应该只做一次。 啊感谢电子邮件的注意事项 - 我还使用类似的代码来处理其他需要电子邮件的地方,如果用户使用Twitter注册,那么电子邮件未设置。 – 2013-02-27 00:35:40

+0

为什么不创建装饰者? – princess 2013-02-27 00:38:01

+0

这将如何工作?用与上下文处理器中大致相同的逻辑包装每个视图? – 2013-02-27 15:47:54

0

只是要清楚,你要显示一个值得欢迎的消息时,用户第一次成功登录(它说在您的问题中第一次注册)?他们是否遵循电子邮件中的激活链接?您可以将该电子邮件链接转到目标网页的新用户版本。

否则,如果您想为普通用户和第一次登录的用户使用相同的页面,我不明白如何避免检查用户是否第一次登录。要做到这一点,似乎在用户上使用布尔型attrib(或者向他们发送)跟踪他们之前是否已经登录,这将是前进的方式,而不是查看他们多久之前激活帐户(如果他们在2天前激活,但没有登录?)

+0

我正在使用不需要激活的基本认证流程。作为流程的一部分,它还将用户重定向到自动注册之前所在的页面,因此我无法为刚刚注册的用户提供单独的页面。 我想过DB标志,但它看起来像矫枉过正,所以我试图避免它,除非必要。 – 2013-03-10 23:44:52

+0

我认为使用django的消息框架可能会起作用,正如公主建议的那样。我不记得django-registration的观点,但你可以进入用户创建账户时注册的账户(注册也许?),并添加一条向用户添加欢迎消息的行。然后你不需要just_registered函数。 – 2013-03-11 02:33:45

+0

问题是我使用pip安装了这些库,尽管我知道我可以绕过它们,但我希望尽可能避免它。我最终可能会做一些简单的事情,并为社交认证应用程序生成一个信号,使其具有与注册应用程序相同的格式。 – 2013-03-11 14:56:02

0

从您对公主的评论回答你最好的选择将是当用户第一次登录时保存某种数据。

我建议写一个简单的中间件检测第一次登录并保存在一个持久的形式

看一看这样的:

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

您还可以检出中间件在Django跟踪

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

这是稍微ineffici恩,但我没有看到任何其他方式给予HTTP的无国籍状态

相关问题