質問
PHPでは$_SERVERを使用する↓ことで遷移前の1つ前のページのURLを取得できることを前に学んだのですが、
Pythonにはこういった便利な変数みたいなものは特にないのでしょうか?
<?php echo $_SERVER['HTTP_REFERER']; ?>
色々調べてみたのですが、結果に表示されるものがPHPばかりだったため、もし見逃していたらと思い投稿しました。
やりたいこと
URLからあるサイトの記事にアクセスした際に非ログインだったためログインページに飛ばされるところまではできています
しかし、そのログイン後にTOPページに飛んでしまうため、再度みたかった記事を探さなければなりません。
1つ前のURLw取得しておき、redirectでもともとアクセスしたURLに遷移するようにしたいと思っています。
Pythonの特徴的にあまりこういった1ページ前のuRL取得などの処理は行わないのが一般的なのでしょうか?
追記(11/14 17:00)
request.refferrerというものがあることを知りました。
しかし、ログイン後の各ページの移動の際にはきちんと前のページのURLを取得することができますが、ログイン前の状態でログイン後に遷移可能なページのURLを直接叩いても取得されず、Noneとなってしまいます。
ログイン後に遷移できるページには
@login_requiredを使用しているため、そもそもURLが取れないのでしょうか...?
@login_manager.unauthorized_handler def unauthorized(): app.logger.info('ログイン失敗') print(request.referrer) return redirect(url_for('login', next=request.referrer))
↑のprint(request.referrer)
がNoneになります
↓遷移可能なページの処理を記載しているところ
@app.route('/') @login_required def home():
追記(11/15 15:00)
request.urlというものを知りました。
@login_manager.unauthorized_handler def unauthorized(): app.logger.info('ログイン失敗') print(request.url) return redirect(url_for('login', next=request.url))
↑のようにrequest.referrerからrequest.urlに変更したところ前のページのURLを取得することができました。
リダイレクト先のdef loginでも
@app.route('/login', methods=['GET', 'POST']) def login(next=None): print(request.url) ~~~
と記載すると1つ前のURLが取れているように見えます。
その後、1つ前のURLを保持した状態でログインをすると
@app.route('/login', methods=['GET', 'POST']) def login(next=None): print(request.url) ~~~
↑のprint文において、先ほどは取れていたURLではなく
http://~~~~~/loginのようにログインページが1つ前のページ扱いになってしまいます。
何がおかしい(何が起きている)のかわからず困っています...。
詳しい方よろしくお願いいたします。
追記(11/16 10:00)
@app.route('/login', methods=['GET', 'POST']) def login(next=None): print(request.url)
↑を実行すると、
http://[IPアドレス]/contents/1
のように1つ前のURLを取得できます
しかし、その状態でログインを行うと
http://[IPアドレス]/login
のようにloginページが1つ前のページ扱いとなってしまいます...
回答1件
あなたの回答
tips
プレビュー