學習理解篇1

WDS望尘發表於2024-05-07

一、關於如何使用cookie

二、關於使用資料庫

三、當面臨這些問題時

一、關於如何使用cookie

1、設定cookie

resp = make_response(redirect('/userCenter'))
resp.set_cookie('username', username)
return resp

設定cookie, 預設有效期是臨時cookie,瀏覽器關閉就失效

同時,設定時有許多引數,如下

Response.set_cookie( key, //鍵 value='', //值 max_age=None, //秒為單位的cookie壽命,None表示http-only expires=None, //失效時間,datetime物件或unix時間戳 path='/', //cookie的有效路徑 domain=None, //cookie的有效域 secure=None, httponly=False)

因此也能這樣設定:

resp.set_cookie("Name2", "Python1", max_age=3600)

2、刪除cookie

resp = make_response(redirect('/login'))
resp.delete_cookie('username')
return resp

格式相似,注意第一行的路由是設定時使用的路由

3、獲取cookie

username = request.cookies.get('username')

這裡要提及的是,第一:cookie與session的區別

cookie

cookie的出現就是為了解決這個問題,cookie本質是一種儲存機制,為了儲存使用者相關的資訊。

第一次登入後伺服器返回一些資料(cookie)給瀏覽器,然後瀏覽器儲存在本地,當該使用者傳送第二次請求的時候,就會自動的把上次請求儲存的cookie資料自動的攜帶給伺服器,伺服器透過瀏覽器攜帶的資料就能判斷當前使用者是哪個了。

第一次訪問後,瀏覽器會自動儲存伺服器發過來的cookie資料,以便再次請求這個網站時讓伺服器"記住"使用者!

cookie特性

cookie儲存的資料量有限,不同的瀏覽器有不同的儲存大小,但一般不超過4KB。因此使用cookie只能儲存一些小量的資料。 cookie有有效期:伺服器可以設定cookie的有效期,以後瀏覽器會自動的清除過期的cookie。 cookie有域名的概念:只有訪問同一個域名,才會把之前相同域名返回的cookie攜帶給伺服器。也就是說,訪問谷歌的時候,不會把百度的cookie傳送給谷歌。

session

我們不可能把使用者的個人資訊直接儲存到cookie中,那樣太不安全了! 為了解決這種問題,session就誕生了~

不同的是,cookie是儲存在本地瀏覽器,session是一個思路、一個概念、一個伺服器儲存授權資訊的解決方案,不同的伺服器,不同的框架,不同的語言有不同的實現。總之,它是為了解決cookie儲存資料不安全的問題的。

Flask中的session機制是將session資訊加密,然後儲存在cookie中!!!!

第二:如何編寫程式碼時呼叫cookie

if request.method == 'GET':
if request.cookies.get('username'):#如果能獲取到cookie儲存的資訊
return redirect('/userCenter')#重定向到另一個路由進行驗證
else:
return render_template('login.html')#重定向到登入介面

如上,看看請求的方式是"get"還是"post",再進一步進行驗證

二、關於使用資料庫

這裡主要講一些單個問題

1、連線資料庫

(1)sqlite3.connect(“要連線的資料庫”) 會預設檢測有沒有資料庫,如果沒有的話就會建立一個。

conn = sqlite3.connect('database.db')
cursor = conn.cursor()# 獲取遊標物件

(2)填寫具體詳細資訊

db=pymysql.connect(
host='127.0.0.1',
user='123456',
password='123456',
database='students',
)
cursor = db.cursor()

2、當使用sql語句時有變數怎麼辦

cursor.execute("SELECT password FROM user WHERE username = ?", (username, ))

用圖上方法,以"?"代替

3、一些函式的認識

result = cursor.fetchone()# 獲取一行資料
data1 = cursor.fetchall()  # 得到資料庫中所有資料 是一個二維元組

三、當面臨這些問題時

1、這樣寫更簡便

data = request.form
username = data.get('username')
password = data.get('password')

2、當要檢測賬號和密碼是否存在時

if not username or not password:#檢測賬號和密碼是否存在
return render_template('login.html', message='Invalid username or password')

這裡的message與前端的HTML頁面的message相對應

相關文章