0

我在开发服务器上的项目中使用 Django 注册。当我注册一个新用户时,我使用 EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend' 来获取激活链接。当我尝试将激活链接放入网络浏览器时,出现错误,并且该帐户未激活。

据说 :未找到错误

谢谢你。该函数用于生成密钥。

def create_profile(self, user):
    """
    Create a ``RegistrationProfile`` for a given
    ``User``, and return the ``RegistrationProfile``.

    The activation key for the ``RegistrationProfile`` will be a
    SHA1 hash, generated from a combination of the ``User``'s
    username and a random salt.

    """
    salt = hashlib.sha1(str(random.random())).hexdigest()[:5]
    username = user.username
    if isinstance(username, unicode):
        username = username.encode('utf-8')
    activation_key = hashlib.sha1(salt+username).hexdigest()
    return self.create(user=user,
                       activation_key=activation_key)

我收到了那封邮件。但我使用 EMAIL_BACKEND'django.core.mail.backends.filebased.EmailBackend'。

我认为问题来自这里。但我无法在生产服务器中进行测试。

收到的邮件

我实际上解决了这个问题这是因为我生成了要在文件中发送的电子邮件,这要归功于 django 为开发目的提供的文件电子邮件后端。在这个文件中,当有回车时,它会添加一个 = 字符。激活帐户的链接就是这种情况。

4

2 回答 2

0

字符 '=' 不在 \w+ 的范围内。使用 [\w=]+ 代替 \w+。

?P<activation_key>\w+替换为?P<activation_key>[\w=]+

于 2012-08-23T15:34:01.007 回答
0

您的激活密钥中不应包含=字符。

尽管sergzach' 的答案会起作用,但我更感兴趣的是首先找出为什么=会出现这种情况。

django-registration 通常按如下方式生成密钥

        salt = sha.new(str(random.random())).hexdigest()[:5]
        activation_key = sha.new(salt+user.username).hexdigest()

你在哪里生成你的?

于 2012-08-23T16:03:40.200 回答