0

開発サーバー上のプロジェクト内で Django 登録を使用しています。新しいユーザーを登録するとき、アクティベーション リンクを取得するために EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend' を使用します。アクティベーション リンクを Web ブラウザに入力しようとすると、エラーが発生し、アカウントがアクティベートされません。

それは言われています:エラーはみつかりません

ありがとうございました。この関数は、キーを生成するために使用されます。

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

=アクティベーション キーに文字を含めないでください。

の答えは機能しますが、そもそも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 に答える
0

文字 '=' は \w+ の範囲内にありません。\w+ の代わりに [\w=]+ を使用します。

?P<activation_key>\w+?P<activation_key>[\w=]+に置き換えます

于 2012-08-23T15:34:01.007 に答える