在同时使用django registration和django SocialaAuth时,如何显示注册后的欢迎消息?

在同时使用django registration和django SocialaAuth时,如何显示注册后的欢迎消息?,django,django-views,django-registration,django-socialauth,Django,Django Views,Django Registration,Django Socialauth,这是一个相当琐碎的问题,但我肯定错过了一些东西,因为我无法想出一个我满意的解决方案 我使用两个库来处理注册,django注册用于基于电子邮件的注册,django socialauth用于基于社交的注册,并希望在用户首次注册时显示欢迎消息 我目前的方法是使用上下文处理器来检查用户是否在过去2分钟内注册,如果是,则更新请求对象。这似乎效率低下,因为我每次只使用一次就检查它 我尝试使用信号实现它,但遇到的问题是,我需要某种方法来钩住请求,但只有django注册才能传递请求 我正在考虑的一个选择是使用这

这是一个相当琐碎的问题,但我肯定错过了一些东西,因为我无法想出一个我满意的解决方案

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

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

我尝试使用信号实现它,但遇到的问题是,我需要某种方法来钩住请求,但只有django注册才能传递请求

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

context_processors.py:

def刚刚注册(请求):
just_registed=False
如果request.user.is_authenticated()和request.user.email:
如果request.user.date_加入
您可以使用django消息并在模板中实现它

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

def刚刚注册(请求):
if request.user.is_经过身份验证():
如果request.user.date_加入

用户已通过身份验证已被理解,您不必发送用户电子邮件,因为当您注册时,需要发送电子邮件

只是为了清楚,您希望在用户首次成功登录时显示欢迎消息(在您的问题中称为首次注册)?他们是否遵循电子邮件中的激活链接?您可以将该电子邮件链接转到登录页的新用户版本


否则,如果您想为普通用户和首次登录的用户使用相同的页面,我不知道如何避免检查这是否是用户的首次登录。要做到这一点,就好像在用户(或fk’ed给他们)上使用布尔属性来跟踪他们以前是否登录过,而不是查看他们在多长时间前激活了该帐户(如果他们在2天前激活但没有登录怎么办?)

以下是您对公主的评论,您的最佳选择是在用户首次登录时保存某种数据

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

看看这个:

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


它有点低效,但是考虑到HTTP的无状态性,我看不到任何其他方法。不,我理解这一部分。问题是我根本不想使用just_registed函数,因为每次加载页面时都会进行检查,而我应该只执行一次。啊,谢谢你在邮件上的留言——我也在使用类似的代码处理我需要邮件的其他事情,如果用户使用Twitter注册,那么邮件就没有设置。那怎么办?使用与上下文处理器中大致相同的逻辑包装每个视图?我使用的是基本身份验证流,不需要激活。作为流程的一部分,它还将用户重定向到他们在自动注册之前所在的页面,因此我不能为仅注册的用户创建单独的页面。我考虑过DB标志,但它似乎有点过头了,所以除非必要,否则我会尽量避免使用它。我认为使用django的消息传递框架可能会起作用,就像princess建议的那样。我不记得django registration的即时视图,但您可以进入用户在创建帐户时点击的视图(可能是注册?),并添加一行内容,向用户添加欢迎消息。那么你就不需要just_注册函数了。问题是我用pip安装了这些库,虽然我知道我可以绕过它们,但如果可能的话,我想避免它。我可能会做一些简单的事情,并生成一个信号,让social auth应用程序与注册应用程序具有相同的格式。您还可以在github上进行django注册,进行一些更改,然后使用pip安装该fork
def just_registered(request):
    if request.user.is_authenticated():
        if request.user.date_joined < datetime.today() + timedelta(minutes=2):
            messages.info(request, "Welcome")
    return ''