二、FLask會話技術和Flask模板語言
1.會話技術
cookie
客戶端的會話技術:讓服務器認識瀏覽器,常用于登錄
cookie本身由瀏覽器保存,通過Response將cookie寫到瀏覽器上,下一次訪問,瀏覽器會根據不同的規則攜帶cookie過來
特點:
-
客戶端會話技術,瀏覽器的會話技術
-
數據全都是存儲在客戶端中
-
存儲使用的鍵值對結構進行的存儲
-
特性
- 支持過期時間
- 默認會自動攜帶本網站的所有cookie
- 根據域名進行cookie存儲
- 不能跨域名
- 不能跨瀏覽器
-
Cookie是通過服務器創建的Response來創建的
- 設置cookie:
response.set_cookie(key , value[ ,max_age=None,exprise=None])
- max_age:整數,指定cookie過期時間
- expries:整數,指定過期時間,可以指定一個具體日期時間
- max_age和expries兩個選一個指定,max_age優先級高
- 獲取cookie:
request.cookies.get(key)
- 刪除cookiel
response.delete_cookie(key)
- 設置cookie:
session
服務器端會話技術,賴于cookie
特點:
- 服務端的會話技術
- 所有數據存儲在服務器中
- 默認存儲在內存中
- 存儲結構也是key-value形勢,鍵值對
- session是離不開cookie的
Flask中的session是全局對象(之前的request也是Flask的一個全局對象)
常用操作:
-
設置session
session['key'] = 'value'
-
獲取session
session.get(key ,default=None)
根據鍵獲取會話的值 -
刪除session
-
session.pop(key)
刪除某一值 -
session.clear()
清除所有
-
Cookie和Session區別
- cookie:
- 1.在瀏覽器存儲
- 2.安全性較低
- 3.可以減輕服務器壓力
- session:
- 1.在服務器端存儲
- 2.安全性高
- 3.對服務器要求較高
- 4.依賴cookie
2. 模板Template
模板是呈現給用戶的界面
在MVT中充當T的角色,實現了MT的解耦,開發中VT有這N:N的關系,一個V可以調用任意T,一個T可以被任意V調用模板處理分為兩個過程
1.加載HTML
2.模板渲染(模板語言)模板代碼包含兩個部分
? 1.靜態HTML
? 2.動態插入的代碼段(模板語法)
Jinja2
Flask中使用Jinja2模板引擎,Jinja2由Flask作者開發
- 一個現代化設計和友好的Python模板語言
- 模仿Django的模板引擎
優點
- 速度快,被廣泛使用
- HTML設計和后端Python分離減少Python復雜度
- 非常靈活,快速和安全
- 提供了控制,繼承等高級功能
模板語法
- 模板語法主要分為兩種
- 變量
- 標簽
- 模板中的變量
{{ var }}
- 視圖傳遞給模板的數據
- 前面定義出來的數據
- 變量不存在,默認忽略
- 模板中的標簽
{{% tag %}}
- 控制邏輯
- 使用外部表達式創建變量
- 宏定義
結構標簽
# block塊操作
# 父模板挖坑,子模板填坑
{% block xxx %}
{% endblock %}
extends繼承
{% extends 'xxx' %}# 繼承后保留塊中的內容
{{ super() }}
# include
# 包含,將其他htm1包含進來
{% include 'xxx' %}
# marco 【了解】
# 宏定義,可以在模板中定義函數。在其它地方調用
{% macro hello(name) %}{{ name }}
{% endmacro %}
# 宏定義可導入
{% from "xxx" import XXX %}
循環
# for循環
{% for item in cols %}AA
{% else %}BB
{% endfor %}# 可以使用和Python一樣的for...else
# 也可以獲取循環信息loop
# loop.first: 判斷是否是第一個元素
# loop.last: 判斷是否是最后一個元素loop
# index: 1開始的下標
# loop.indexe: 0開始的下標
# loop.revindex: 反向下標,不包括0
# loop.revindexe: 反向下標,包括0
過濾器(擴展)
語法:{{ 變量 | 過濾器 | 過濾器... }}
capitalize
lower
upper
title
trim
reverse
striptags 渲染之前,將值中標簽去掉
safe
default(1)
last
first
length
sum
sort
...