通知用户退回确认电子邮件

时间:2017-07-04 21:10:32

标签: django

我的网站要求用户确认他们在注册时使用的电子邮件地址。因此,我发送通常的确认电子邮件。如果这样的电子邮件反弹,我的电子邮件提供商(sendgrid)会通知我。 我想在下次访问我的网站时通知用户他的电子邮件问题。 来自我的电子邮件提供商的通知是对某个URL的异步回调,我需要一种方法来查找用户的会话并存储信息。

发送电子邮件时,我可以在请求中添加一些标识符,然后sendgrid将包含在退回邮件中。但是出于某些原因,如果可能的话,我宁愿不这样做。我宁愿存储用户在匿名会话中使用的电子邮件地址,并使用此信息稍后查找他的会话。

这有可能吗?我可以将一些信息添加到匿名会话中,并将其保存在数据库中,以便以后查找吗?我的Session配置是默认的Django配置吗?

3 个答案:

答案 0 :(得分:1)

通常我不太确定依靠能够识别返回匿名会话的好主意。

我经常看到的处理此问题的另一种方法是允许用户完成注册,并能够使用他们的用户名和密码登录,但是将用户标记为未经验证,可能是在某个字段上一个user profile model。未经验证的用户可能会被拒绝访问您网站的大部分内容。登录后,如果他们尚未收到验证电子邮件,他们可以要求再次发送验证邮件,并且如果他们犯了错误,可以选择更新电子邮件。

django-registration应用看起来很有帮助。

文档:https://django-registration.readthedocs.io/en/2.2/install.html

答案 1 :(得分:0)

Tobitobs,另一种方式:您可以将匿名电子邮件附加到他的localStorage存储桶,稍后您可以将其恢复。但是我的用户在浏览器中清除了cookie和其他数据 - 这些电子邮件会丢失。

还有一种方法 - 使用设备快照保存电子邮件 - browser-device-os-IP(或其他),并将此信息存储在数据库中。

答案 2 :(得分:0)

您可能想要使用Django sessions system。默认情况下,它在使用manage.py startproject创建的Django项目中启用。

基本上,SessionMiddleware为您的Django项目执行的所有请求添加了session属性。您可以在视图中将此属性用作标准python dict:

def my_view(request):

    # At some point, you retrieved the visitor email...
    user_email = 'john@example.com'
    request.session['user_email'] = user_email

默认情况下,存储在此dict中的信息是持久的。

从技术上讲,存储在此dict中的数据存储在表django_session中的默认数据库中。唯一的session_key与这些数据相关联,并且此密钥以cookie的形式存储在您的访问者计算机上。这意味着数据具有到期日期。当用户返回您的网站时,如果Cookie仍然存在(并且没有过时),您可以在几天前存储它时在request.session中检索信息。

Django sessions persistency behavior can be controlled有2个设置:

默认为假。如果设置为true,则在用户关闭浏览器时会销毁会话。您可能希望将此值设置为False。

这是会话的默认持续时间,以秒为单位。默认值为1209600,相当于2周。

注意:您可以直接调用request.session.set_expiry()来修改会话持续时间。这允许基于每个会话覆盖默认设置。