【フラスコ】フラスコセッション

フラスコセッション(セッション)

HTTPはステートレスであるため、クライアントの一連のアクションを記録できません。サーバーがクライアントを認識できるようにするメカニズムが必要です。これにより、「セッション」の概念が導入され
ますサーバーはクライアントにセッションIDを送信し、クライアントがサーバーに再度アクセスするとこのIDでは、サーバーはこの一意のIDを使用してユーザーを識別します。

Cookieとは異なり、セッションデータはサーバーに保存されます。セッションは、クライアントがサーバーにログインしてサーバーからログアウトするまでの時間間隔です。このセッションで保存する必要があるデータは、サーバーの一時ディレクトリに保存されます。

各クライアントのセッションにセッションIDを割り当てますセッションデータはCookieの上に保存され、サーバーは暗号化して署名します。この暗号化のために、Flaskアプリケーションには定義済みのSECRET_KEYが必要です

Sessionオブジェクトはディクショナリオブジェクトでもあり、セッション変数と関連する値のキーと値のペアが含まれています。

たとえば、「username」セッション変数を設定するには、次のステートメントを使用します。

Session['username'] = 'admin'

セッション変数を解放するには、pop()メソッドを使用します。

session.pop('username', None)

次のコードは、Flaskでのセッション作業の簡単なデモです。セッション変数 username 」が設定されていないため、URL  「/」はユーザーにログインを促すだけです。

@app.route('/')
def index():
   if 'username' in session:
      username = session['username']
         return 'Logged in as ' &plus; username &plus; '<br>' &plus; \
         "<b><a href = '/logout'>click here to log out</a></b>"
   return "You are not logged in <br><a href = '/login'></b>" &plus; \
      "click here to log in</b></a>"

ユーザーが「/ login」login()ビュー関数を参照すると、GETメソッドによって呼び出されるため、ログインフォームが開きます。

フォームは'/ login'に送り返され、セッション変数が設定されます。アプリケーションは'/'にリダイレクトしますこの時点で、セッション変数 username が見つかりました。

@app.route('/login', methods = ['GET', 'POST'])
def login():
   if request.method == 'POST':
      session['username'] = request.form['username']
      return redirect(url_for('index'))
   return '''
	
   <form action = "" method = "post">
      <p><input type = text name = username/></p>
      <p<<input type = submit value = Login/></p>
   </form>
	
   '''

アプリケーションには、「username」セッション変数をポップアップ表示するlogout()ビュー関数も含まれています。したがって、「/」の  URLは開始ページを再び表示します。

@app.route('/logout')
def logout():
   # remove the username from the session if it is there
   session.pop('username', None)
   return redirect(url_for('index'))

アプリケーションを実行し、ホームページにアクセスします。(アプリケーションのsecret_keyを必ず設定してください

from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
app.secret_key = 'any random string’

完全なコードは次のとおりです

from flask import Flask

from flask import render_template

from flask import request

from flask import make_response

from flask import Flask, session, redirect, url_for, escape, request

app = Flask(__name__)

app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj'

@app.route('/')
def index():
    if 'username' in session:
        username = session['username']
        return '登录用户名是:' + username + '<br>' + "<b><a href = '/logout'>点击这里注销</a></b>"
    return "您暂未登录, <br><a href = '/login'></b>" + "点击这里登录</b></a>"

@app.route('/login', methods = ['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
   <form action = "" method = "post">
      <p><input type ="text" name ="username"/></p>
      <p><input type ="submit" value ="登录"/></p>
   </form>
   '''

@app.route('/logout')
def logout():
   # remove the username from the session if it is there
   session.pop('username', None)
   return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug = True)

出力は以下のようになります。クリック「にログインするには、ここをクリックし、」リンク。

リンクは別の画面に送られます。「admin」と入力します。

画面に「ログインユーザー名はadminです  」というメッセージが表示されます 

おすすめ

転載: blog.csdn.net/u013066730/article/details/108361349