2

これはかなり些細な質問ですが、満足のいく解決策を思い付くことができないため、何かが欠けているに違いありません。

登録を処理するために 2 つのライブラリを使用しています。電子メール ベースの登録には 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 }
4

3 に答える 3

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 ''

ユーザーが認証されていることはすでに理解されています。登録時にメールアドレスが必要なため、ユーザーのメールアドレスを入力する必要はありません。

于 2013-02-27T00:25:22.647 に答える
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のステートレス性を考えると、他の方法は見当たりません。

于 2013-03-16T04:37:50.420 に答える
0

明確にするために、ユーザーが初めてログインに成功したときにウェルカムメッセージを表示したいですか (質問で初めて登録すると表示されます)? 電子メールのアクティベーション リンクをたどりますか? その電子メールで送信されたリンクを、ランディング ページの新しいユーザー バージョンに移動させることができます。

そうでなければ、通常のユーザーと初めてログインする人に同じページを使用したい場合、これがユーザーの初めてのログインであるかどうかのチェックを回避する方法がわかりません。それを行うには、ユーザーにブール属性を使用する (または fk する) ことで、ユーザーが以前にログインしたことがあるかどうかを追跡することができます。アカウントをアクティブ化したのはどれくらい前のことでしょうか (2 日間アクティブ化した場合はどうなるでしょうか)。前だけどログインしてない?)

于 2013-03-09T23:19:40.853 に答える