Flask 會話

2022-08-16 10:43 更新

與Cookie不同,Session(會話)數(shù)據(jù)存儲在服務器上。會話是客戶端登錄到服務器并注銷服務器的時間間隔。需要在該會話中保存的數(shù)據(jù)會存儲在服務器上的臨時目錄中。

為每個客戶端的會話分配會話ID。會話數(shù)據(jù)存儲在cookie的頂部,服務器以加密方式對其進行簽名。對于此加密,F(xiàn)lask應用程序需要一個定義的SECRET_KEY。

Session對象也是一個字典對象,包含會話變量和關聯(lián)值的鍵值對。

例如,要設置一個'username'會話變量,請使用以下語句:

Session['username'] = 'admin'

要釋放會話變量,請使用pop()方法。

session.pop('username', None)

以下代碼是Flask中的會話工作的簡單演示。URL '/'只是提示用戶登錄,因為未設置會話變量'username'

@app.route('/')
def index():
   if 'username' in session:
      username = session['username']
         return 'Logged in as ' + username + '<br>'  \
         "<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()視圖函數(shù)時,因為它是通過GET方法調用的,所以將打開一個登錄表單。

表單發(fā)送回'/login',現(xiàn)在會話變量已設置。應用程序重定向到'/'。此時會話變量'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>
	
   '''

應用程序還包含一個logout()視圖函數(shù),它會彈出'username'會話變量。因此,'/' 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 render_template

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 ”



以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號