这是一个非常微不足道的问题,但我必须遗漏一些东西,因为我无法想出一个我很满意的解决方案。
我正在使用两个库来处理注册,基于电子邮件注册的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 }
答案 0 :(得分: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 ''
用户已通过身份验证已经了解,您无需输入用户电子邮件,因为在您注册时,需要提供电子邮件
答案 1 :(得分:0)
为了清楚起见,您希望在用户第一次成功登录时显示欢迎消息(它在您的问题中首次注册)?他们是否遵循电子邮件中的激活链接?您可以将该电子邮件链接转到目标网页的新用户版本。
否则,如果您想为普通用户和第一次登录的人使用相同的页面,我看不出如何避免检查这是否是用户第一次登录。为此,看起来好像在用户上使用布尔属性(或者跟他们说话),跟踪他们之前是否已经登录,而不是看他们多久以前激活帐户(如果他们怎么办? 2天前激活但没有登录?)
答案 2 :(得分:0)
根据您对公主的评论,您最好的选择是在用户首次登录时保存某种数据。
我建议编写一个简单的中间件来检测首次登录并以持久的形式保存
看看这个:
http://blog.elcodo.pl/post/926902087/django-detect-users-first-login
您还可以在django跟踪中查看中间件
https://github.com/codekoala/django-tracking/blob/master/tracking/middleware.py
效率稍低,但鉴于HTTP
的无状态,我没有看到任何其他方式