1

Django 1.5.1 を使用して、セッションを有効にINSTALLED_APPSしてMIDDLEWARE_CLASSES

django.views.generic.edit.CreateView登録時に新しいユーザーを作成する責任があります。その部分はうまく機能します。また、新しいユーザーにメールを送信して、アカウントを有効にします。それもうまくいきます。

フォームが送信され、フォームが有効であると判断された後、ユーザーは成功 URL にリダイレクトされます。その成功 URL ページで、「メールが foo@bar.com に送信されました」などのメール アドレスにメールが送信されたことを通知したいと思います。

self.request.session['email'] = user.emailリダイレクト生成前にフォームビューで使用しています。ローカル (sqlite DB バックエンドを使用) では、これは完全に機能します。リダイレクトが読み込まれると、「電子メールが foo@bar.com に送信されました」と表示されます。

しかし、これをステージング サーバーに展開すると、「メールが送信されました。」と表示されます。そのページを手動で更新すると、メールが正しく表示されます。私のステージング サーバーの DB バックエンドは MySQL です。

def form_valid(self, form):
    user = form.save()
    self.request.session['email'] = user.email
    self.send_notification(user)
    return super(AccountCreateFormView, self).form_valid(form)

編集:

テンプレートには、次のものがあります。

An email has been sent to {{ request.session.email }}.
4

1 に答える 1

1

この問題に 1 日を費やした後、解決策を発見しました。

uWSGI 1.0.2.1から1.9.8にアップグレードしました。

1.0.2.1 に戻すと問題が再発することを確認しました。なぜこれが当てはまるのかについての説明はありませんが、それでも、最新の uWSGI を使用することはおそらく悪い考えではありません。


さらに調査したところ、私が経験していた問題は他の領域で発生していたことが明らかになりました。例えば:

管理領域で、ユーザーをアクティブから非アクティブに変更してからフォームを保存すると、ユーザーのリストにリダイレクトされます。非アクティブ化したばかりの同じユーザーをクリックすると、チェックボックスがオンになっているように見えます。ページを更新すると、「アクティブ」がチェックされていないことがわかります。

予期しない部分は次のとおりです。ページを 2 回目に更新すると、Active がチェックされているように表示されます。

自分のフォームでも同じ動作が見られました。request.user.first_nameそこで、とのみを含む単純なテンプレートを作成しました{% now "U u" %}。タイムスタンプの目的は、レンダリングされたテンプレートがキャッシュされているかどうかを判断することでした。

1 つのタブで、ユーザーの名を更新しました。別のタブで、新しいテンプレートをすばやく更新しました。これにより、新しい値と古い値が交互に表示されました。タイムスタンプは正しくインクリメントされ、キャッシュはありません。

多分それは私のブラウザ(firefox)だと思いました。Chrome をシークレット モードで開きました。クロムで、新しいテンプレートを開きました。firefox で、フォームを送信してユーザー名を変更しました。クロムに戻って、すぐにリフレッシュし始めました。まったく同じ動作。

dbshel​​l にジャンプして mysql db に直接アクセスすると、常に正しい値が得られました。

いくつかのことを除外しようとして、次のことを試しました。

  • デフォルトのCACHESバックエンドを DummyCache に設定 (機能しませんでした)
  • CACHE_MIDDLEWARE_ANONYMOUS_ONLYTrue に設定
  • django-debug-toolbarSQLを直接見るためにインストールされています。ツールバーの sql をすばやく更新すると、値も交互に変わりました。

django 1.5.1 にアップグレードしてから、この問題を観察し始めました。以前はdjango 1.4.2を使用していました。

要するに、これをdjango/uwsgi 不確実性原理と呼ぶことを提案します。

于 2013-04-28T04:38:36.567 に答える