1
    try:
        username = self.get_argument('username')
    except:
        self.write('Username empty')
        time.sleep(1)
        self.redirect('/auth/login')

Username empty1秒間表示してからリダイレクトしたい。しかし、リダイレクト前にページに何も表示されないようです。接続が閉じられる前にクライアントに何も表示されないためです。とにかく、書かれた内容を一瞬表示するには?

4

1 に答える 1

3

を使用するself.redirectと、ヘッダーが送信され、ブラウザがすぐに /auth/login にリダイレクトされます。これが HTTP リダイレクトの仕組みであり、Tornado とは関係ありません。

ページを表示したままにしたい場合は、次の代わりに遅延を指定してメタ リフレッシュself.write('Username empty')を使用してページを提供できます。

<meta http-equiv="refresh" content="5;URL='http://example.com/auth/login'">

しかし、メタ リフレッシュも実際には理想的ではありません。W3C は長い間、メタ リフレッシュの使用を思いとどまらせてきました。この状況で私がすることは、すぐにリダイレクトして、ログイン ページにエラーを表示することです。例えば:

self.redirect('/auth/login?error=%s' % tornado.escape.url_escape('Username empty'))

エラー引数が設定されている場合は、ログイン ページにエラー引数を表示します。したがって、ハンドラーでは次のようになります。

...
error = self.get_argument('error', None)
if error is not None:
    error = tornado.escape.url_unescape(error)
....
self.render('foo.html', error=error)

テンプレートで:

{% if error %}
{{ error }}
{% end %}
于 2013-04-26T05:03:35.773 に答える