面試Flask需要知道的知識點

2021-10-04 17:58:28 字數 3391 閱讀 2914

class

regexurl

(baseconverter)

:def

__init__

(self,url_map,

*args)

:super

(regexurl,self)

.__init__(url_map)

self.regex = args[

0]

第二步:把正則類賦值給我們定義的正則規則。

're'

]=regexurl

第三步:在url中使用正則。

'/regex/'

)def

regex111(id

):return

'id:%s'%id

請求上下文:儲存了客戶端和伺服器互動的資料。

應用上下文:flask 應用程式執行過程中,儲存的一些配置資訊,比如程式名,資料庫連線,應用資訊等。

兩者作用:動態追蹤修改設定,如未設定只會提示警告

查詢時會顯示原始sql語句

filter() 把過濾器新增到原查詢上,返回乙個新查詢。

filter_by() 把等值過濾器新增到原查詢上,返回乙個新查詢。

limit() 使用指定的值限定原查詢返回的結果

offset() 偏移原查詢返回的結果,返回乙個新查詢。

order_by() 根據指定條件對原查詢結果進行排序,返回乙個新查詢

group_by() 根據指定條件對原查詢結果進行分組,返回乙個新查詢。

藍圖的定義

藍圖 /blueprint 是flask 應用程式元件化的方法,可以在一 個應用內或多個專案公用藍圖。使用藍圖可以極大地簡化大型應用的開發難度,也為flask 擴充套件提供了一種在應用中註冊服務的集中式機制

藍圖的應用場景

把乙個應用分解為乙個藍圖的集合。這對大型應用是理想的。乙個專案可以例項化乙個應用物件,初始化幾個擴充套件,並註冊到乙個集合的藍圖。

以url字首/子網域名稱,在應用上註冊乙個藍圖。url 字首/子網域名稱中的引數即成為這個藍圖下的所有檢視函式的共同的檢視引數。

在乙個應用中用不同的url規則多次註冊乙個藍圖。

通過藍圖提供模板過濾器,靜態檔案,模板和其他功能。乙個藍圖不一定要實現應用或者檢視函式。

初始化乙個flask擴充套件式,在這些情況中註冊乙個藍圖。

藍圖的缺點

不能再應用建立後撤銷註冊乙個藍圖而不銷毀整個應用物件。

使用藍圖的三個步驟

建立乙個藍圖物件

bule = blueprint(

'blue'

,__name__)

在這個藍圖物件上進行操作,例如註冊路由,指定靜態資料夾,註冊模板過濾器。

@blue。route(

"blue"

,__name__)

defblue_index()

:return

"welcome to my blueprint"

在應用物件上註冊這個藍圖物件

'/blue'

)在flask中,為了處理web表單,我們一般使用flask-wtf擴充套件,它封裝了wtfforms,並且它有驗證表單資料的功能。

使用 flask-wtf需要配置引數secret_key.

csrf_enabled 是為了csrf保護,secret_key 用來生成加密令牌,當csrf啟用的時候,該設定會根據社會的秘鑰生成加密令牌。

flask 中有三個 session:

第乙個:資料庫中的session,例如db.session.add()

第二個:在flask_session擴充套件中的session,使用from flask_session import session ,使用第三方擴充套件的session可以把資訊儲存在伺服器中,客戶端瀏覽器中只儲存sessionid。

第三個:flask 自帶的session,是乙個請求上下文,使用from flask import session。 自帶的session 把資訊加密後都儲存在客戶端的瀏覽器cookie中。

可以通過postman 測試工具測試,或者看log日誌資訊找到錯誤資訊的大概位置

url反**根據檢視函式名稱得到當前所執行的url

url_for():函式最簡單的用法是以檢視函式名作為引數,返回對應的url,還可以用作載入靜態檔案。

url_for 和redirect區別

url_for 是用來拼接 url的,可以使用程式url對映中儲存的資訊生成url。url_for()函式最簡單的用法是以師團混熟名作為引數,返回對應的url。

redirect 是重定向函式,輸入乙個url後自動跳轉到另乙個url所在的位址。

before_first_request 在處理第乙個請求前執行

before_request 在每次請求前執行

after_request 如果沒有未處理的異常丟擲,在每次請求後執行

teardown_request即使有未處理的異常丟擲,在每次請求後執行

在django中,路由是瀏覽器訪問伺服器時,先訪問的專案中的url,再由專案中的url找到應用中url,這些url是放在乙個列表裡,遵從從前往後匹配的規則。在flask中,路由是通過裝飾器給每個檢視函式提供的,而且根據請求方式的不同可以乙個url用於不同的作用。

可以傳入的引數:

字串:『hello『,但是『abc』不行,因為abc是python內建的模組

name, 約定俗稱

不可以插入的引數。

python內建的模組,re,urllib,abc 等

數字一開始使用者開啟瀏覽器,訪問受信任**a,輸入使用者名稱和密碼登入請求登入**a。

**a驗證使用者資訊,使用者資訊通過驗證後,**a產生cookie資訊並返回給瀏覽器。

使用者登入**a成功後,可以正常請求**a。

使用者未退出**a之前,在同一瀏覽器中,開啟乙個tab訪問**b

**b看到有人方式後,他會返回一下攻擊**。

瀏覽器在接受這些攻擊性**後,促使使用者不知情的情況下瀏覽器攜帶cookie(包括sessionid)資訊,請求**a。這種請求有可能更新密碼,新增使用者什麼操作。

從上面csrf攻擊原理可以看出,要完成一次csrf攻擊,需要被攻擊者完成兩個步驟:

登入受信任**a,並在本地生成cookie

在不登出a的情況下,訪問危險**b

如果不滿足以上兩個條件中的乙個, 就不會受到csrf的攻擊,以下情況可能會導致csrf

關閉瀏覽器了後,本地的cookie尚未過期,你上次的會話還沒有結束。

解決辦法:就是在表單中新增from.csrf_token.

c 有關虛方法要知道的知識點

虛方法 這個方法其實就是為了重寫方法而存在的 在宣告中包含virtual關鍵字 否則沒感覺到它存在的意義。其一 因為要重寫所以它的訪問型別如果為private則毫無意義阻礙了重寫動作的進行也就是它不能私有化,所以c 中virtual關鍵字和private關鍵字不能同時使用。其二 因為靜態的方法和抽象...

C 有關虛方法要知道的知識點

虛方法 這個方法其實就是為了重寫方法而存在的 在宣告中包含virtual關鍵字 否則沒感覺到它存在的意義。其一 因為要重寫所以它的訪問型別如果為private則毫無意義阻礙了重寫動作的進行也就是它不能私有化,所以c 中virtual關鍵字和private關鍵字不能同時使用。其二 因為靜態的方法和抽象...

ButterKnife你需要知道的點

butterknife,這個方便findviewbyid而使用的庫,無數的應用在使用它,以註解來實現的他,對應用的效能影響幾乎可以忽略,可以放心使用。使用 compile com.jakewharton butterknife 7.0.1 我們常用的無非就是 bind r.id.name view ...