0

web.py フレームワークを使用してプロジェクトに取り組んでいます。データベースクエリから返された結果が空白の場合 (または返された行数がゼロの場合)、ユーザーを別の画面にリダイレクトするための小さなコードがあります。

voma_user_details = get_user_by_email(['id','is_active'],None,email)
if len(list(voma_user_details)) == 0:
    #return redirect_url+'?error=User not found in database'
    web.redirect(redirect_url+'?error=User not found in database')      
voma_id = int(voma_user_details[0]['id'])

ここで、クエリがゼロ レコードを返す場合、ページを redirect_url にリダイレクトする必要がありますが、リダイレクトは機能せず、次の行で例外が発生します。つまり、リスト インデックスが範囲外です (リストの長さがゼロであるため)。ブロックにリダイレクトURLを出力して確認しましたが、ifブロックに入りますが、ページはリダイレクトされません。

どんな指針も高く評価されます。

4

2 に答える 2

2

web.redirectRedirectのインスタンスであるオブジェクトを返しますException

リダイレクトを発生させるには、値を上げる (または戻すこともできます) 必要があります。

そうしないと、メソッドの残りの部分が引き続き実行され、無関係な例外が発生する可能性があります (この場合、空のリストの要素を取得しようとしているため、IndexError が発生します)。

返された文字列のみを呼び出すとweb.redirect、応答コンテンツとして送信されますが、応答ヘッダーには引き続きリダイレクトが含まれます (ステータス 301 を使用)。しかし、ブラウザーは通常、301 リダイレクトにすぐに従います。

于 2013-06-27T11:55:41.180 に答える