API¶
文件的這個部分涵蓋 Flask 的所有介面。對於 Flask 依賴外部函式庫的部分,我們在此記錄最重要的部分,並提供連到標準文件的連結。
應用程式物件¶
- class flask.Flask(import_name, static_url_path=None, static_folder='static', static_host=None, host_matching=False, subdomain_matching=False, template_folder='templates', instance_path=None, instance_relative_config=False, root_path=None)¶
flask 物件實作 WSGI 應用程式並作為中心物件。它會傳入應用程式的模組或套件名稱。一旦建立,它將作為視圖函式、URL 規則、模板設定等的中心註冊表。
套件名稱用於從套件內部或模組所在的資料夾解析資源,取決於套件參數是否解析為實際的 python 套件(內部有
__init__.py
檔案的資料夾)或標準模組(僅是.py
檔案)。有關資源載入的更多資訊,請參閱
open_resource()
。通常您會在主模組或套件的
__init__.py
檔案中建立Flask
實例,如下所示from flask import Flask app = Flask(__name__)
關於第一個參數
第一個參數的想法是讓 Flask 了解哪些屬於您的應用程式。此名稱用於在檔案系統上尋找資源,可以被擴充套件用來改進偵錯資訊等等。
因此您在那裡提供的內容非常重要。如果您使用單一模組,
__name__
始終是正確的值。但是,如果您使用套件,通常建議在那裡硬編碼您的套件名稱。例如,如果您的應用程式在
yourapplication/app.py
中定義,您應該使用以下兩個版本之一來建立它app = Flask('yourapplication') app = Flask(__name__.split('.')[0])
為什麼會這樣?由於資源的查找方式,應用程式即使使用
__name__
也能運作。但是,這會使偵錯更加痛苦。某些擴充套件可以根據應用程式的導入名稱做出假設。例如,Flask-SQLAlchemy 擴充套件將在您的應用程式中尋找觸發 SQL 查詢的程式碼(在偵錯模式下)。如果導入名稱未正確設定,則偵錯資訊將遺失。(例如,它只會擷取yourapplication.app
中的 SQL 查詢,而不會擷取yourapplication.views.frontend
中的查詢)變更日誌
1.0 版本新增: 新增了
host_matching
和static_host
參數。1.0 版本新增: 新增了
subdomain_matching
參數。子網域匹配現在需要手動啟用。設定SERVER_NAME
不會隱含地啟用它。0.11 版本新增: 新增了
root_path
參數。0.8 版本新增: 新增了
instance_path
和instance_relative_config
參數。0.7 版本新增: 新增了
static_url_path
、static_folder
和template_folder
參數。- 參數:
import_name (str) – 應用程式套件的名稱
static_url_path (str | None) – 可用於指定網頁上靜態檔案的不同路徑。預設為
static_folder
資料夾的名稱。static_folder (str | os.PathLike[str] | None) – 包含靜態檔案的資料夾,在
static_url_path
提供服務。相對於應用程式root_path
或絕對路徑。預設為'static'
。static_host (str | None) – 新增靜態路由時要使用的主機。預設為 None。當搭配設定了
static_folder
的host_matching=True
使用時為必要參數。host_matching (bool) – 設定
url_map.host_matching
屬性。預設為 False。subdomain_matching (bool) – 在匹配路由時,考慮相對於
SERVER_NAME
的子網域。預設為 False。template_folder (str | os.PathLike[str] | None) – 包含應用程式應使用的模板的資料夾。預設為應用程式根路徑中的
'templates'
資料夾。instance_path (str | None) – 應用程式的替代實例路徑。預設情況下,假設實例路徑是套件或模組旁邊的
'instance'
資料夾。instance_relative_config (bool) – 如果設定為
True
,則假定用於載入設定的相對檔案名稱相對於實例路徑而不是應用程式根目錄。root_path (str | None) – 應用程式檔案根目錄的路徑。只有在無法自動偵測到時才應手動設定,例如命名空間套件。
- session_interface: SessionInterface = <flask.sessions.SecureCookieSessionInterface object>¶
要使用的 session 介面。預設情況下,此處使用
SecureCookieSessionInterface
的實例。變更日誌
在 0.8 版本中新增。
- cli: Group¶
用於為此物件註冊 CLI 命令的 Click 命令群組。一旦發現應用程式並註冊了藍圖,這些命令就可以從
flask
命令中使用。
- get_send_file_max_age(filename)¶
由
send_file()
用於確定給定檔案路徑的max_age
快取值(如果未傳遞)。預設情況下,這會從
SEND_FILE_MAX_AGE_DEFAULT
(current_app
的設定)傳回。這預設為None
,這會告知瀏覽器使用條件請求而不是定時快取,這通常是更可取的。請注意,這與 Flask 類別中的相同方法重複。
變更日誌
在 2.0 版本中變更: 預設設定為
None
而不是 12 小時。在 0.9 版本中新增。
- send_static_file(filename)¶
用於從
static_folder
提供檔案的視圖函式。如果設定了static_folder
,則會自動在static_url_path
註冊此視圖的路由。請注意,這與 Flask 類別中的相同方法重複。
變更日誌
在 0.5 版本中新增。
- open_resource(resource, mode='rb', encoding=None)¶
開啟相對於
root_path
的資源檔案以進行讀取。例如,如果檔案
schema.sql
與定義Flask
應用程式的檔案app.py
相鄰,則可以使用以下方式開啟它with app.open_resource("schema.sql") as f: conn.executescript(f.read())
- 參數:
- 回傳類型:
在 3.1 版本中變更: 新增了
encoding
參數。
- open_instance_resource(resource, mode='rb', encoding='utf-8')¶
開啟相對於應用程式實例資料夾
instance_path
的資源檔案。與open_resource()
不同,實例資料夾中的檔案可以開啟以進行寫入。- 參數:
resource (str) – 相對於
instance_path
的資源路徑。mode (str) – 在此模式下開啟檔案。
encoding (str | None) – 以文字模式開啟時,使用此編碼開啟檔案。以二進制模式開啟時,這將被忽略。
- 回傳類型:
在 3.1 版本中變更: 新增了
encoding
參數。
- create_jinja_environment()¶
根據
jinja_options
和應用程式的各種 Jinja 相關方法建立 Jinja 環境。在此之後變更jinja_options
將不會有任何效果。還會將 Flask 相關的全域變數和篩選器新增到環境中。變更日誌
在 0.11 版本中變更:
Environment.auto_reload
根據TEMPLATES_AUTO_RELOAD
設定選項設定。在 0.5 版本中新增。
- 回傳類型:
環境
- create_url_adapter(request)¶
為給定的請求建立 URL 适配器。URL 适配器在請求上下文尚未設定時建立,因此顯式傳遞請求。
在 3.1 版本中變更: 如果設定了
SERVER_NAME
,則無論是subdomain_matching
還是host_matching
,它都不會將請求限制為僅限該網域。變更日誌
在 1.0 版本中變更:
SERVER_NAME
不再隱含地啟用子網域匹配。請改用subdomain_matching
。在 0.9 版本中變更: 當為應用程式上下文建立 URL 适配器時,可以在請求之外呼叫此方法。
在 0.6 版本中新增。
- 參數:
request (Request | None)
- 回傳類型:
MapAdapter | None
- update_template_context(context)¶
使用一些常用的變數更新模板上下文。這會將 request、session、config 和 g 注入到模板上下文中,以及模板上下文處理器想要注入的所有內容。請注意,從 Flask 0.6 開始,如果上下文處理器決定回傳具有相同金鑰的值,則不會覆寫上下文中的原始值。
- make_shell_context()¶
回傳此應用程式互動式 shell 的 shell 上下文。這會執行所有已註冊的 shell 上下文處理器。
變更日誌
在 0.11 版本中新增。
- run(host=None, port=None, debug=None, load_dotenv=True, **options)¶
在本地開發伺服器上執行應用程式。
請勿在生產環境中使用
run()
。它不適用於滿足生產伺服器的安全性和效能要求。相反,請參閱 部署到生產環境 以取得 WSGI 伺服器建議。如果設定了
debug
標誌,伺服器將自動重新載入程式碼變更,並在發生例外狀況時顯示偵錯器。如果您想在偵錯模式下執行應用程式,但停用互動式偵錯器上的程式碼執行,您可以傳遞
use_evalex=False
作為參數。這將保持偵錯器的追溯畫面處於活動狀態,但停用程式碼執行。不建議將此功能用於自動重新載入的開發,因為這支援不佳。相反,您應該使用 flask 命令列腳本的
run
支援。請記住
除非處於偵錯模式,否則 Flask 將使用通用錯誤頁面來抑制任何伺服器錯誤。因此,若要僅啟用互動式偵錯器而不重新載入程式碼,您必須使用
debug=True
和use_reloader=False
呼叫run()
。在未處於偵錯模式的情況下將use_debugger
設定為True
將不會捕獲任何例外狀況,因為不會有任何例外狀況可以捕獲。- 參數:
host (str | None) – 要監聽的主機名稱。將其設定為
'0.0.0.0'
以使伺服器也可以在外部使用。預設為'127.0.0.1'
或SERVER_NAME
設定變數中存在的主機(如果存在)。port (int | None) – 網頁伺服器的埠。預設為
5000
或SERVER_NAME
設定變數中定義的埠(如果存在)。load_dotenv (bool) – 載入最近的
.env
和.flaskenv
檔案以設定環境變數。也會將工作目錄變更為包含找到的第一個檔案的目錄。options (Any) – 要轉發到底層 Werkzeug 伺服器的選項。有關更多資訊,請參閱
werkzeug.serving.run_simple()
。
- 回傳類型:
None
變更日誌
在 1.0 版本中變更: 如果已安裝,python-dotenv 將用於從
.env
和.flaskenv
檔案載入環境變數。FLASK_DEBUG
環境變數將覆寫debug
。預設情況下啟用多執行緒模式。
在 0.10 版本中變更: 預設埠現在從
SERVER_NAME
變數中選取。
- test_client(use_cookies=True, **kwargs)¶
為此應用程式建立測試用戶端。有關單元測試的資訊,請前往 測試 Flask 應用程式。
請注意,如果您正在測試應用程式程式碼中的斷言或例外狀況,則必須設定
app.testing = True
,以便例外狀況傳播到測試用戶端。否則,例外狀況將由應用程式處理(測試用戶端不可見),並且斷言錯誤或其他例外狀況的唯一指示將是對測試用戶端的 500 狀態碼回應。請參閱testing
屬性。例如app.testing = True client = app.test_client()
測試用戶端可以在
with
區塊中使用,以將上下文的關閉延遲到with
區塊的末尾。如果您想存取上下文本機變數以進行測試,這會很有用with app.test_client() as c: rv = c.get('/?vodka=42') assert request.args['vodka'] == '42'
此外,您可以傳遞選用的關鍵字引數,然後將其傳遞給應用程式的
test_client_class
建構函式。例如from flask.testing import FlaskClient class CustomClient(FlaskClient): def __init__(self, *args, **kwargs): self._authentication = kwargs.pop("authentication") super(CustomClient,self).__init__( *args, **kwargs) app.test_client_class = CustomClient client = app.test_client(authentication='Basic ....')
有關更多資訊,請參閱
FlaskClient
。變更日誌
在 0.11 版本中變更: 新增了
**kwargs
以支援將額外的關鍵字引數傳遞給test_client_class
的建構函式。在 0.7 版本中新增: 新增了
use_cookies
參數,以及透過設定test_client_class
屬性來覆寫要使用的用戶端的功能。在 0.4 版本中變更: 為用戶端新增了對
with
區塊用法的支援。- 參數:
use_cookies (bool)
kwargs (t.Any)
- 回傳類型:
- test_cli_runner(**kwargs)¶
建立 CLI 執行器以測試 CLI 命令。請參閱 使用 CLI 執行器執行命令。
回傳
test_cli_runner_class
的實例,預設為FlaskCliRunner
。Flask 應用程式物件作為第一個引數傳遞。變更日誌
在 1.0 版本中新增。
- 參數:
kwargs (t.Any)
- 回傳類型:
- handle_http_exception(e)¶
處理 HTTP 例外狀況。預設情況下,這將調用已註冊的錯誤處理常式,並回退以將例外狀況作為回應回傳。
變更日誌
Changed in version 1.0.3:
RoutingException
,在內部用於路由期間的斜線重定向等動作,不會傳遞至錯誤處理器。Changed in version 1.0: 例外會依據代碼和 MRO 進行查找,因此
HTTPException
子類別可以使用針對基礎HTTPException
的全域捕捉處理器來處理。Added in version 0.3.
- 參數:
e (HTTPException)
- 回傳類型:
HTTPException | ft.ResponseReturnValue
- handle_user_exception(e)¶
此方法會在發生應被處理的例外時呼叫。一個特殊情況是
HTTPException
,它會被轉發到handle_http_exception()
方法。此函數將返回一個回應值,或使用相同的追溯重新引發例外。變更日誌
Changed in version 1.0: 從請求資料(如
form
)引發的 Key error 會在偵錯模式中顯示錯誤的鍵,而不是通用的錯誤請求訊息。Added in version 0.7.
- 參數:
e (Exception)
- 回傳類型:
HTTPException | ft.ResponseReturnValue
- handle_exception(e)¶
處理沒有關聯錯誤處理器的例外,或從錯誤處理器引發的例外。這總是會導致 500
InternalServerError
。總是發送
got_request_exception
訊號。如果
PROPAGATE_EXCEPTIONS
為True
,例如在偵錯模式下,錯誤將會被重新引發,以便偵錯器可以顯示它。否則,原始例外會被記錄,並返回InternalServerError
。如果為
InternalServerError
或500
註冊了錯誤處理器,則將會使用它。為了保持一致性,處理器將始終接收InternalServerError
。原始未處理的例外可以作為e.original_exception
使用。變更日誌
Changed in version 1.1.0: 始終將
InternalServerError
實例傳遞給處理器,並將original_exception
設定為未處理的錯誤。Changed in version 1.1.0: 即使在沒有處理器的情況下,對於預設的 500 回應,也會執行
after_request
函數和其他最終處理。Added in version 0.3.
- log_exception(exc_info)¶
記錄例外。如果停用偵錯且在呼叫處理器之前,
handle_exception()
會呼叫此方法。預設實作會在logger
上將例外記錄為錯誤。變更日誌
在 0.8 版本中新增。
- 參數:
exc_info (tuple[type, BaseException, TracebackType] | tuple[None, None, None])
- 回傳類型:
None
- dispatch_request()¶
執行請求分派。比對 URL 並傳回檢視或錯誤處理器的傳回值。這不一定是回應物件。為了將傳回值轉換為適當的回應物件,請呼叫
make_response()
。變更日誌
Changed in version 0.7: 此方法不再處理例外,此程式碼已移至新的
full_dispatch_request()
。- 回傳類型:
ft.ResponseReturnValue
- full_dispatch_request()¶
分派請求,並在此基礎上執行請求預處理和後處理,以及 HTTP 例外捕捉和錯誤處理。
變更日誌
Added in version 0.7.
- 回傳類型:
- make_default_options_response()¶
此方法被呼叫以建立預設的
OPTIONS
回應。可以透過子類別化來變更此方法,以變更OPTIONS
回應的預設行為。變更日誌
Added in version 0.7.
- 回傳類型:
- ensure_sync(func)¶
確保函數對於 WSGI 工作程序是同步的。純
def
函數會按原樣返回。async def
函數會被包裝以執行並等待回應。覆寫此方法以變更應用程式執行非同步檢視的方式。
變更日誌
Added in version 2.0.
- async_to_sync(func)¶
傳回一個同步函數,該函數將執行協程函數。
result = app.async_to_sync(func)(*args, **kwargs)
覆寫此方法以變更應用程式將非同步程式碼轉換為同步可呼叫程式碼的方式。
變更日誌
Added in version 2.0.
- url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)¶
使用給定的值,為給定的端點產生 URL。
這是由
flask.url_for()
呼叫,也可以直接呼叫。端點是 URL 規則的名稱,通常使用
@app.route()
新增,且通常與檢視函數的名稱相同。在Blueprint
中定義的路由,將在端點前面加上藍圖的名稱,並以.
分隔。在某些情況下,例如電子郵件訊息,您會希望 URL 包含 scheme 和 domain,例如
https://example.com/hello
。當不在活動請求中時,URL 預設為外部的,但這需要設定SERVER_NAME
,以便 Flask 知道要使用哪個 domain。APPLICATION_ROOT
和PREFERRED_URL_SCHEME
也應根據需要進行設定。此設定僅在不在活動請求中使用時使用。可以使用
url_defaults()
修飾函數,以在建構 URL 之前修改關鍵字引數。如果由於某些原因建構失敗,例如未知的端點或不正確的值,則會呼叫應用程式的
handle_url_build_error()
方法。如果該方法傳回字串,則會傳回該字串,否則會引發BuildError
。- 參數:
endpoint (str) – 與要產生的 URL 關聯的端點名稱。如果這以
.
開頭,將會使用目前的藍圖名稱(如果有的話)。_anchor (str | None) – 如果給定,將其作為
#anchor
附加到 URL。_method (str | None) – 如果給定,則為端點產生與此方法關聯的 URL。
_scheme (str | None) – 如果給定,如果 URL 是外部的,則將具有此 scheme。
_external (bool | None) – 如果給定,則偏好 URL 為內部 (False) 或要求其為外部 (True)。外部 URL 包含 scheme 和 domain。當不在活動請求中時,URL 預設為外部的。
values (Any) – 用於 URL 規則的可變部分的數值。未知的鍵會附加為查詢字串引數,例如
?a=b&c=d
。
- 回傳類型:
變更日誌
Added in version 2.2: 從
flask.url_for
移動,後者會呼叫此方法。
- make_response(rv)¶
將檢視函數的傳回值轉換為
response_class
的實例。- 參數:
rv (ft.ResponseReturnValue) –
檢視函數的傳回值。檢視函數必須傳回一個回應。不允許傳回
None
,或檢視在沒有傳回的情況下結束。以下類型允許用於view_rv
str
回應物件是使用編碼為 UTF-8 的字串作為主體建立的。
bytes
回應物件是使用位元組作為主體建立的。
dict
將在傳回之前 jsonify 的字典。
list
將在傳回之前 jsonify 的列表。
generator
或iterator
傳回
str
或bytes
的 generator,以作為回應串流。tuple
可以是
(body, status, headers)
、(body, status)
或(body, headers)
,其中body
是此處允許的任何其他類型,status
是字串或整數,而headers
是字典或(key, value)
tuple 的列表。如果body
是response_class
實例,則status
會覆寫現有值,且headers
會被擴展。response_class
物件會保持不變地傳回。
- 其他
Response
類別 物件會被強制轉換為
response_class
。callable()
該函數會作為 WSGI 應用程式呼叫。結果會用於建立回應物件。
- 回傳類型:
變更日誌
Changed in version 2.2: generator 將會轉換為串流回應。list 將會轉換為 JSON 回應。
Changed in version 1.1: dict 將會轉換為 JSON 回應。
Changed in version 0.9: 先前,tuple 被解釋為回應物件的引數。
- preprocess_request()¶
在分派請求之前呼叫。呼叫在應用程式和當前藍圖(如果有的話)中註冊的
url_value_preprocessors
。然後呼叫在應用程式和藍圖中註冊的before_request_funcs
。如果任何
before_request()
處理器傳回非 None 值,則該值會被視為檢視的傳回值來處理,並且會停止進一步的請求處理。- 回傳類型:
ft.ResponseReturnValue | None
- process_response(response)¶
可以被覆寫,以便在回應物件被傳送到 WSGI 伺服器之前修改它。預設情況下,這將呼叫所有以
after_request()
修飾的函數。變更日誌
Changed in version 0.5: 從 Flask 0.5 開始,為請求後執行註冊的函數會以註冊的相反順序呼叫。
- 參數:
response (Response) –
response_class
物件。- Returns:
一個新的回應物件或相同的物件,必須是
response_class
的實例。- 回傳類型:
- do_teardown_request(exc=_sentinel)¶
在請求被分派且回應被傳回之後,緊接在請求上下文彈出之前呼叫。
這會呼叫所有以
teardown_request()
和Blueprint.teardown_request()
修飾的函數(如果藍圖處理了請求)。最後,會發送request_tearing_down
訊號。這是由
RequestContext.pop()
呼叫,在測試期間可能會延遲呼叫以保持對資源的存取。- 參數:
exc (BaseException | None) – 在分派請求時引發的未處理例外。如果未傳遞,則從當前例外資訊中偵測。傳遞給每個 teardown 函數。
- 回傳類型:
None
變更日誌
Changed in version 0.9: 新增了
exc
引數。
- do_teardown_appcontext(exc=_sentinel)¶
在應用程式上下文彈出之前立即呼叫。
在處理請求時,應用程式上下文會在請求上下文之後彈出。請參閱
do_teardown_request()
。這會呼叫所有以
teardown_appcontext()
修飾的函數。然後發送appcontext_tearing_down
訊號。這是由
AppContext.pop()
呼叫。變更日誌
在 0.9 版本中新增。
- 參數:
exc (BaseException | None)
- 回傳類型:
None
- app_context()¶
建立
AppContext
。使用作為with
區塊以推送上下文,這會使current_app
指向此應用程式。當處理請求和執行 CLI 命令時,應用程式上下文會由
RequestContext.push()
自動推送。在這些情況之外手動建立上下文時,請使用此方法。with app.app_context(): init_db()
請參閱 應用程式上下文。
變更日誌
在 0.9 版本中新增。
- 回傳類型:
- request_context(environ)¶
建立代表 WSGI 環境的
RequestContext
。使用with
區塊以推送上下文,這會使request
指向此請求。請參閱 請求上下文。
通常您不應從自己的程式碼中呼叫此方法。當處理請求時,請求上下文會由
wsgi_app()
自動推送。使用test_request_context()
建立環境和上下文,而不是此方法。- 參數:
environ (WSGIEnvironment) – WSGI 環境
- 回傳類型:
- test_request_context(*args, **kwargs)¶
為從給定值建立的 WSGI 環境建立
RequestContext
。這在測試期間最有用,您可能希望在不分派完整請求的情況下執行使用請求資料的函數。請參閱 請求上下文。
使用
with
區塊以推送上下文,這會使request
指向為建立的環境的請求。with app.test_request_context(...): generate_report()
當使用 shell 時,手動推送和彈出上下文可能更容易,以避免縮排。
ctx = app.test_request_context(...) ctx.push() ... ctx.pop()
採用與 Werkzeug 的
EnvironBuilder
相同的引數,以及應用程式的一些預設值。請參閱連結的 Werkzeug 文件以取得大多數可用的引數。此處列出了 Flask 特有的行為。- 參數:
path – 正在請求的 URL 路徑。
base_url – 應用程式正在服務的基本 URL,
path
相對於此 URL。如果未給定,則從PREFERRED_URL_SCHEME
、subdomain
、SERVER_NAME
和APPLICATION_ROOT
建構。subdomain – 要附加到
SERVER_NAME
的子網域名稱。url_scheme – 要使用的 scheme,而不是
PREFERRED_URL_SCHEME
。data – 請求主體,可以是字串或表單鍵和值的字典。
json – 如果給定,這會序列化為 JSON 並作為
data
傳遞。也會預設content_type
為application/json
。args (Any) – 傳遞給
EnvironBuilder
的其他位置引數。kwargs (Any) – 傳遞給
EnvironBuilder
的其他關鍵字引數。
- 回傳類型:
- wsgi_app(environ, start_response)¶
實際的 WSGI 應用程式。這並未在
__call__()
中實作,以便可以套用中介軟體,而不會遺失對應用程式物件的參考。而不是這樣做app = MyMiddleware(app)
更好的做法是這樣做
app.wsgi_app = MyMiddleware(app.wsgi_app)
然後您仍然擁有原始的應用程式物件,並且可以繼續呼叫其方法。
變更日誌
Changed in version 0.7: 即使發生未處理的錯誤,也會呼叫請求和應用程式上下文的 Teardown 事件。其他事件可能不會被呼叫,具體取決於分派期間何時發生錯誤。請參閱 回呼和錯誤。
- 參數:
environ (WSGIEnvironment) – WSGI 環境。
start_response (StartResponse) – 接受狀態碼、標頭列表和可選例外上下文以啟動回應的可呼叫物件。
- 回傳類型:
cabc.Iterable[bytes]
- add_template_filter(f, name=None)¶
註冊自訂範本篩選器。運作方式與
template_filter()
修飾器完全相同。
- add_template_global(f, name=None)¶
註冊自訂範本全域函數。運作方式與
template_global()
修飾器完全相同。變更日誌
Added in version 0.10.
- add_template_test(f, name=None)¶
註冊自訂範本測試。運作方式與
template_test()
修飾器完全相同。變更日誌
Added in version 0.10.
- add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)¶
註冊用於路由傳入請求和建構 URL 的規則。
route()
修飾器是使用view_func
引數呼叫此方法的捷徑。以下兩者是等效的@app.route("/") def index(): ...
def index(): ... app.add_url_rule("/", view_func=index)
參見 URL 路由註冊。
如果沒有傳遞
endpoint
參數,路由的端點名稱預設為檢視函式的名稱。如果該端點已註冊函式,則會引發錯誤。methods
參數預設為["GET"]
。HEAD
總是自動加入,而OPTIONS
預設也會自動加入。不一定需要傳遞
view_func
,但如果規則應該參與路由,則必須在某個時間點使用endpoint()
裝飾器將端點名稱與檢視函式建立關聯。app.add_url_rule("/", endpoint="index") @app.endpoint("index") def index(): ...
如果
view_func
具有required_methods
屬性,這些方法會被加入到傳遞的和自動的方法中。如果它具有provide_automatic_methods
屬性,則當參數未傳遞時,會將其用作預設值。
- after_request(f)¶
註冊一個函式,使其在此物件的每個請求之後執行。
函式會使用回應物件呼叫,並且必須傳回回應物件。這允許函式在傳送回應之前修改或替換回應。
如果函式引發例外,則不會呼叫任何剩餘的
after_request
函式。因此,這不應該用於必須執行的動作,例如關閉資源。請改用teardown_request()
。這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會在每個請求之後執行。在藍圖上使用時,這會在藍圖處理的每個請求之後執行。若要在藍圖中註冊並在每個請求之後執行,請使用
Blueprint.after_app_request()
。- 參數:
f (T_after_request)
- 回傳類型:
T_after_request
- app_ctx_globals_class¶
_AppCtxGlobals
的別名
- auto_find_instance_path()¶
如果在應用程式類別的建構子中未提供實例路徑,則嘗試尋找實例路徑。它基本上會計算到一個名為
instance
的資料夾的路徑,該資料夾位於您的主要檔案或套件旁邊。變更日誌
在 0.8 版本中新增。
- 回傳類型:
- before_request(f)¶
註冊一個函式,使其在每個請求之前執行。
例如,這可用於開啟資料庫連線,或從 session 中載入已登入的使用者。
@app.before_request def load_user(): if "user_id" in session: g.user = db.session.get(session["user_id"])
函式將在不帶任何引數的情況下被呼叫。如果它傳回非
None
值,則該值會被視為來自檢視的傳回值,並且會停止進一步的請求處理。這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會在每個請求之前執行。在藍圖上使用時,這會在藍圖處理的每個請求之前執行。若要在藍圖中註冊並在每個請求之前執行,請使用
Blueprint.before_app_request()
。- 參數:
f (T_before_request)
- 回傳類型:
T_before_request
- context_processor(f)¶
註冊一個範本上下文處理器函式。這些函式在呈現範本之前執行。傳回的 dict 的鍵會新增為範本中可用的變數。
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會針對每個呈現的範本呼叫。在藍圖上使用時,這會針對從藍圖檢視呈現的範本呼叫。若要在藍圖中註冊並影響每個範本,請使用
Blueprint.app_context_processor()
。- 參數:
f (T_template_context_processor)
- 回傳類型:
T_template_context_processor
- create_global_jinja_loader()¶
建立 Jinja2 環境的載入器。可用於僅覆寫載入器並保持其餘部分不變。不建議覆寫此函式。相反地,應該覆寫
jinja_loader()
函式。全域載入器在應用程式和個別藍圖的載入器之間進行調度。
變更日誌
Added in version 0.7.
- 回傳類型:
DispatchingJinjaLoader
- property debug: bool¶
是否啟用偵錯模式。當使用
flask run
啟動開發伺服器時,未處理的例外狀況會顯示互動式偵錯器,並且在程式碼變更時會重新載入伺服器。這對應到DEBUG
設定鍵。如果設定得太晚,可能無法如預期般運作。在生產環境部署時,請勿啟用偵錯模式。
預設值:
False
- endpoint(endpoint)¶
修飾檢視函式,以將其註冊到給定的端點。如果使用
add_url_rule()
新增規則時沒有view_func
,則會使用此裝飾器。app.add_url_rule("/ex", endpoint="example") @app.endpoint("example") def example(): ...
- errorhandler(code_or_exception)¶
註冊一個函式,以依程式碼或例外類別處理錯誤。
一個裝飾器,用於註冊給定錯誤碼的函式。範例
@app.errorhandler(404) def page_not_found(error): return 'This page does not exist', 404
您也可以為任意例外註冊處理常式
@app.errorhandler(DatabaseError) def special_exception_handler(error): return 'Database connection failed', 500
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這可以處理來自每個請求的錯誤。在藍圖上使用時,這可以處理來自藍圖處理的請求的錯誤。若要在藍圖中註冊並影響每個請求,請使用
Blueprint.app_errorhandler()
。變更日誌
在 0.7 版本中新增:對於應用程式範圍的錯誤處理常式,請使用
register_error_handler()
而不是直接修改error_handler_spec
。在 0.7 版本中新增:現在還可以額外註冊自訂例外類型,這些類型不一定需要是
HTTPException
類別的子類別。
- handle_url_build_error(error, endpoint, values)¶
如果引發了
BuildError
,則會由url_for()
呼叫。如果此函式傳回值,則會由url_for
傳回,否則將重新引發錯誤。url_build_error_handlers
中的每個函式都會使用error
、endpoint
和values
呼叫。如果函式傳回None
或引發BuildError
,則會跳過它。否則,其傳回值會由url_for
傳回。
- property has_static_folder: bool¶
如果設定了
static_folder
,則為True
。變更日誌
在 0.5 版本中新增。
- inject_url_defaults(endpoint, values)¶
將給定端點的 URL 預設值直接注入到傳遞的 values 字典中。這在內部使用,並在 URL 建立時自動呼叫。
變更日誌
Added in version 0.7.
- property jinja_env: Environment¶
用於載入範本的 Jinja 環境。
環境會在第一次存取此屬性時建立。之後變更
jinja_options
將不會有任何效果。
- jinja_environment¶
Environment
的別名
- property jinja_loader: BaseLoader | None¶
此物件範本的 Jinja 載入器。預設情況下,如果設定了
template_folder
,則這是一個指向template_folder
的jinja2.loaders.FileSystemLoader
類別。變更日誌
在 0.5 版本中新增。
- jinja_options: dict[str, t.Any] = {}¶
在
create_jinja_environment()
中傳遞給 Jinja 環境的選項。在建立環境之後變更這些選項(存取jinja_env
)將不會有任何效果。變更日誌
在 1.1.0 版本中變更:這是一個
dict
而不是ImmutableDict
,以允許更輕鬆的設定。
- json_provider_class¶
- property logger: Logger¶
應用程式的標準 Python
Logger
,名稱與name
相同。如果沒有設定任何處理常式,則會新增預設處理常式。請參閱 記錄 以取得更多資訊。
變更日誌
在 1.1.0 版本中變更:記錄器採用與
name
相同的名稱,而不是硬式編碼"flask.app"
。在 1.0.0 版本中變更:行為已簡化。記錄器始終命名為
"flask.app"
。層級僅在設定期間設定,它不會每次都檢查app.debug
。僅使用一種格式,而不是根據app.debug
使用不同的格式。不會移除任何處理常式,並且僅在尚未設定任何處理常式時才新增處理常式。Added in version 0.3.
- make_aborter()¶
建立要指派給
aborter
的物件。該物件由flask.abort()
呼叫以引發 HTTP 錯誤,也可以直接呼叫。預設情況下,這會建立
aborter_class
的實例,預設值為werkzeug.exceptions.Aborter
。變更日誌
在 2.2 版本中新增。
- 回傳類型:
- make_config(instance_relative=False)¶
由 Flask 建構子用於建立 config 屬性。
instance_relative
參數從 Flask 的建構子傳入(在那裡命名為instance_relative_config
),並指示 config 應該相對於實例路徑還是應用程式的根路徑。變更日誌
在 0.8 版本中新增。
- property name: str¶
應用程式的名稱。這通常是匯入名稱,不同之處在於,如果匯入名稱是 main,則會從執行檔中猜測出來。當 Flask 需要應用程式的名稱時,此名稱會用作顯示名稱。可以設定和覆寫以變更值。
變更日誌
在 0.8 版本中新增。
- permanent_session_lifetime¶
一個
timedelta
,用於設定永久 session 的到期日。預設值為 31 天,這使得永久 session 大約可以存活一個月。此屬性也可以從 config 中使用
PERMANENT_SESSION_LIFETIME
設定鍵進行設定。預設值為timedelta(days=31)
- redirect(location, code=302)¶
建立重新導向回應物件。
這由
flask.redirect()
呼叫,也可以直接呼叫。變更日誌
Added in version 2.2: 從
flask.redirect
移動而來,該函式會呼叫此方法。
- register_blueprint(blueprint, **options)¶
在應用程式上註冊
Blueprint
。傳遞給此方法的關鍵字引數將覆寫在藍圖上設定的預設值。在應用程式的
blueprints
中記錄藍圖後,呼叫藍圖的register()
方法。- 參數:
blueprint (Blueprint) – 要註冊的藍圖。
url_prefix – 藍圖路由將以此為前綴。
subdomain – 藍圖路由將在此子網域上匹配。
url_defaults – 藍圖路由將對檢視函式引數使用這些預設值。
options (t.Any) – 額外的關鍵字引數會傳遞至
BlueprintSetupState
。它們可以在record()
回呼中存取。
- 回傳類型:
None
變更日誌
Changed in version 2.0.1:
name
選項可用於變更藍圖註冊時使用的(前綴點號)名稱。這允許同一個藍圖使用唯一的名稱多次註冊,以用於url_for
。Added in version 0.7.
- register_error_handler(code_or_exception, f)¶
替代的錯誤附加函式,用於
errorhandler()
裝飾器,對於非裝飾器用法更為直接易用。變更日誌
Added in version 0.7.
- route(rule, **options)¶
裝飾器,用於註冊具有給定 URL 規則和選項的檢視函式。呼叫
add_url_rule()
,其中包含有關實作的更多詳細資訊。@app.route("/") def index(): return "Hello, World!"
參見 URL 路由註冊。
如果未傳遞
endpoint
參數,則路由的端點名稱預設為檢視函式的名稱。methods
參數預設為["GET"]
。HEAD
和OPTIONS
會自動新增。
- secret_key¶
如果設定了密鑰,密碼編譯元件可以使用它來簽署 Cookie 和其他內容。當您想要使用安全 Cookie 時,請將其設定為複雜的隨機值。
此屬性也可以從組態中透過
SECRET_KEY
組態金鑰進行組態。預設值為None
。
- select_jinja_autoescape(filename)¶
如果應該為給定的模板名稱啟用自動跳脫,則傳回
True
。如果未給定模板名稱,則傳回True
。變更日誌
Changed in version 2.2: 現在預設為
.svg
檔案啟用自動跳脫。在 0.5 版本中新增。
- shell_context_processor(f)¶
註冊 Shell 環境處理器函式。
變更日誌
在 0.11 版本中新增。
- 參數:
f (T_shell_context_processor)
- 回傳類型:
T_shell_context_processor
- should_ignore_error(error)¶
呼叫此函式以判斷是否應忽略錯誤,就拆解系統而言。如果此函式傳回
True
,則拆解處理常式將不會傳遞錯誤。變更日誌
Added in version 0.10.
- 參數:
error (BaseException | None)
- 回傳類型:
- property static_url_path: str | None¶
靜態路由可存取的 URL 前綴。
如果在初始化期間未組態,則會從
static_folder
衍生而來。
- teardown_appcontext(f)¶
註冊一個函式,在應用程式環境內容彈出時呼叫。應用程式環境內容通常會在每個請求的請求環境內容之後、CLI 命令結束時或手動推送的環境內容結束後彈出。
with app.app_context(): ...
當
with
區塊結束(或呼叫ctx.pop()
)時,會在應用程式環境內容變為非活動狀態之前呼叫拆解函式。由於請求環境內容通常也管理應用程式環境內容,因此在您彈出請求環境內容時也會呼叫它。當由於未處理的例外狀況而呼叫拆解函式時,它將會傳遞一個錯誤物件。如果註冊了
errorhandler()
,它將處理例外狀況,而拆解函式將不會收到它。拆解函式必須避免引發例外狀況。如果它們執行的程式碼可能會失敗,則必須將該程式碼用
try
/except
區塊包圍,並記錄任何錯誤。拆解函式的傳回值會被忽略。
變更日誌
在 0.9 版本中新增。
- 參數:
f (T_teardown)
- 回傳類型:
T_teardown
- teardown_request(f)¶
註冊一個函式,在請求環境內容彈出時呼叫。通常這會在每個請求結束時發生,但在測試期間也可以手動推送環境內容。
with app.test_request_context(): ...
當
with
區塊結束(或呼叫ctx.pop()
)時,會在請求環境內容變為非活動狀態之前呼叫拆解函式。當由於未處理的例外狀況而呼叫拆解函式時,它將會傳遞一個錯誤物件。如果註冊了
errorhandler()
,它將處理例外狀況,而拆解函式將不會收到它。拆解函式必須避免引發例外狀況。如果它們執行的程式碼可能會失敗,則必須將該程式碼用
try
/except
區塊包圍,並記錄任何錯誤。拆解函式的傳回值會被忽略。
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會在每個請求之後執行。在藍圖上使用時,這會在藍圖處理的每個請求之後執行。若要向藍圖註冊並在每個請求之後執行,請使用
Blueprint.teardown_app_request()
。- 參數:
f (T_teardown)
- 回傳類型:
T_teardown
- template_filter(name=None)¶
用於註冊自訂模板篩選器的裝飾器。您可以為篩選器指定名稱,否則將使用函式名稱。範例
@app.template_filter() def reverse(s): return s[::-1]
- template_global(name=None)¶
用於註冊自訂模板全域函式的裝飾器。您可以為全域函式指定名稱,否則將使用函式名稱。範例
@app.template_global() def double(n): return 2 * n
變更日誌
Added in version 0.10.
- template_test(name=None)¶
用於註冊自訂模板測試的裝飾器。您可以為測試指定名稱,否則將使用函式名稱。範例
@app.template_test() def is_prime(n): if n == 2: return True for i in range(2, int(math.ceil(math.sqrt(n))) + 1): if n % i == 0: return False return True
變更日誌
Added in version 0.10.
- test_cli_runner_class: type[FlaskCliRunner] | None = None¶
CliRunner
子類別,預設為FlaskCliRunner
,由test_cli_runner()
使用。其__init__
方法應將 Flask 應用程式物件作為第一個引數。變更日誌
在 1.0 版本中新增。
- test_client_class: type[FlaskClient] | None = None¶
test_client()
方法會建立此測試用戶端類別的實例。預設值為FlaskClient
。變更日誌
Added in version 0.7.
- testing¶
測試旗標。將其設定為
True
以啟用 Flask 擴充功能的測試模式(以及未來可能也包括 Flask 本身)。例如,這可能會啟用具有額外執行階段成本的測試輔助程式,這些輔助程式預設不應啟用。如果啟用此功能,且 PROPAGATE_EXCEPTIONS 未從預設值變更,則會隱含地啟用此功能。
此屬性也可以從組態中透過
TESTING
組態金鑰進行組態。預設值為False
。
- trap_http_exception(e)¶
檢查是否應攔截 HTTP 例外狀況。預設情況下,對於所有例外狀況,這將傳回
False
,除非在TRAP_BAD_REQUEST_ERRORS
設定為True
時,發生錯誤請求金鑰錯誤。如果TRAP_HTTP_EXCEPTIONS
設定為True
,它也會傳回True
。對於檢視函式引發的所有 HTTP 例外狀況,都會呼叫此函式。如果它為任何例外狀況傳回
True
,則不會呼叫此例外狀況的錯誤處理常式,並且它會在追溯中顯示為一般例外狀況。這對於偵錯隱含引發的 HTTP 例外狀況很有幫助。變更日誌
Changed in version 1.0: 在偵錯模式下,預設情況下不會攔截錯誤請求錯誤。
在 0.8 版本中新增。
- url_defaults(f)¶
應用程式所有檢視函式的 URL 預設值的回呼函式。它會使用端點和值呼叫,並應就地更新傳遞的值。
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會為每個請求呼叫。在藍圖上使用時,這會為藍圖處理的請求呼叫。若要向藍圖註冊並影響每個請求,請使用
Blueprint.app_url_defaults()
。- 參數:
f (T_url_defaults)
- 回傳類型:
T_url_defaults
- url_value_preprocessor(f)¶
為應用程式中的所有檢視函式註冊 URL 值預處理器函式。這些函式將在
before_request()
函式之前呼叫。該函式可以在將值傳遞給檢視之前,修改從匹配的 URL 捕獲的值。例如,這可以用於彈出常見的語言代碼值並將其放置在
g
中,而不是將其傳遞給每個檢視。該函式會傳遞端點名稱和值字典。傳回值會被忽略。
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會為每個請求呼叫。在藍圖上使用時,這會為藍圖處理的請求呼叫。若要向藍圖註冊並影響每個請求,請使用
Blueprint.app_url_value_preprocessor()
。- 參數:
f (T_url_value_preprocessor)
- 回傳類型:
T_url_value_preprocessor
- instance_path¶
保留實例資料夾的路徑。
變更日誌
在 0.8 版本中新增。
- aborter¶
aborter_class
的實例,由make_aborter()
建立。flask.abort()
呼叫此函式以引發 HTTP 錯誤,也可以直接呼叫。變更日誌
Added in version 2.2: 從
flask.abort
移動而來,該函式會呼叫此物件。
- json: JSONProvider¶
提供對 JSON 方法的存取權。
flask.json
中的函式將在應用程式環境內容處於活動狀態時呼叫此提供者的方法。用於處理 JSON 請求和回應。json_provider_class
的實例。可以透過變更子類別上的該屬性或之後指派給此屬性來自訂。預設值
DefaultJSONProvider
使用 Python 的內建json
程式庫。不同的提供者可以使用不同的 JSON 程式庫。變更日誌
在 2.2 版本中新增。
- url_build_error_handlers: list[t.Callable[[Exception, str, dict[str, t.Any]], str]]¶
當
url_for()
引發BuildError
時,handle_url_build_error()
呼叫的函式清單。每個函式都使用error
、endpoint
和values
呼叫。如果函式傳回None
或引發BuildError
,則會跳過它。否則,其傳回值會由url_for
傳回。變更日誌
在 0.9 版本中新增。
- teardown_appcontext_funcs: list[ft.TeardownCallable]¶
應用程式環境內容被銷毀時呼叫的函式清單。由於應用程式環境內容也會在請求結束時拆解,因此這是儲存與資料庫斷開連線的程式碼的位置。
變更日誌
在 0.9 版本中新增。
- shell_context_processors: list[ft.ShellContextProcessorCallable]¶
Shell 環境處理器函式的清單,應在建立 Shell 環境時執行。
變更日誌
在 0.11 版本中新增。
- blueprints: dict[str, Blueprint]¶
將已註冊的藍圖名稱映射到藍圖物件。字典保留藍圖註冊的順序。藍圖可以多次註冊,此字典不追蹤它們被附加的頻率。
變更日誌
Added in version 0.7.
- extensions: dict[str, t.Any]¶
擴充套件可以儲存應用程式特定狀態的地方。例如,擴充套件可以在這裡儲存資料庫引擎和類似的東西。
鍵值必須符合擴充套件模組的名稱。例如,對於
flask_foo
中的 “Flask-Foo” 擴充套件,鍵值會是'foo'
。變更日誌
Added in version 0.7.
- url_map¶
此實例的
Map
。您可以使用它在類別建立之後但在任何路由連接之前,變更路由轉換器。範例from werkzeug.routing import BaseConverter class ListConverter(BaseConverter): def to_python(self, value): return value.split(',') def to_url(self, values): return ','.join(super(ListConverter, self).to_url(value) for value in values) app = Flask(__name__) app.url_map.converters['list'] = ListConverter
- import_name¶
此物件所屬的套件或模組名稱。一旦由建構子設定後,請勿變更此名稱。
- root_path¶
檔案系統上套件的絕對路徑。用於查找套件中包含的資源。
- view_functions: dict[str, ft.RouteCallable]¶
將端點名稱對應到視圖函式的字典。
若要註冊視圖函式,請使用
route()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- error_handler_spec: dict[ft.AppOrBlueprintKey, dict[int | None, dict[type[Exception], ft.ErrorHandlerCallable]]]¶
已註冊錯誤處理器的資料結構,格式為
{scope: {code: {class: handler}}}
。scope
鍵值是處理器作用的藍圖名稱,或None
表示適用於所有請求。code
鍵值是HTTPException
的 HTTP 狀態碼,或None
表示其他例外狀況。最內層的字典將例外狀況類別對應到處理器函式。若要註冊錯誤處理器,請使用
errorhandler()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- before_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.BeforeRequestCallable]]¶
在每個請求開始時呼叫的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
before_request()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- after_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.AfterRequestCallable[t.Any]]]¶
在每個請求結束時呼叫的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
after_request()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- teardown_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.TeardownCallable]]¶
即使引發例外狀況,在每個請求結束時仍會呼叫的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
teardown_request()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- template_context_processors: dict[ft.AppOrBlueprintKey, list[ft.TemplateContextProcessorCallable]]¶
在呈現範本時呼叫以傳遞額外上下文值的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
context_processor()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- url_value_preprocessors: dict[ft.AppOrBlueprintKey, list[ft.URLValuePreprocessorCallable]]¶
呼叫以修改傳遞到視圖函式的關鍵字引數的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
url_value_preprocessor()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- url_default_functions: dict[ft.AppOrBlueprintKey, list[ft.URLDefaultCallable]]¶
呼叫以修改產生 URL 時的關鍵字引數的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
url_defaults()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
藍圖物件¶
- class flask.Blueprint(name, import_name, static_folder=None, static_url_path=None, template_folder=None, url_prefix=None, subdomain=None, url_defaults=None, root_path=None, cli_group=_sentinel)¶
- 參數:
- cli: Group¶
用於為此物件註冊 CLI 命令的 Click 命令群組。一旦發現應用程式並註冊了藍圖,這些命令就可以從
flask
命令中使用。
- get_send_file_max_age(filename)¶
由
send_file()
用於確定給定檔案路徑的max_age
快取值(如果未傳遞)。預設情況下,這會從
SEND_FILE_MAX_AGE_DEFAULT
(current_app
的設定)傳回。這預設為None
,這會告知瀏覽器使用條件請求而不是定時快取,這通常是更可取的。請注意,這與 Flask 類別中的相同方法重複。
變更日誌
在 2.0 版本中變更: 預設設定為
None
而不是 12 小時。在 0.9 版本中新增。
- send_static_file(filename)¶
用於從
static_folder
提供檔案的視圖函式。如果設定了static_folder
,則會自動在static_url_path
註冊此視圖的路由。請注意,這與 Flask 類別中的相同方法重複。
變更日誌
在 0.5 版本中新增。
- open_resource(resource, mode='rb', encoding='utf-8')¶
開啟相對於
root_path
的資源檔案以進行讀取。藍圖相關的等效方法,如同應用程式的open_resource()
方法。- 參數:
- 回傳類型:
在 3.1 版本中變更: 新增了
encoding
參數。
- add_app_template_filter(f, name=None)¶
註冊一個範本過濾器,在應用程式呈現的任何範本中都可用。作用如同
app_template_filter()
裝飾器。等同於Flask.add_template_filter()
。
- add_app_template_global(f, name=None)¶
註冊一個範本全域變數,在應用程式呈現的任何範本中都可用。作用如同
app_template_global()
裝飾器。等同於Flask.add_template_global()
。變更日誌
Added in version 0.10.
- add_app_template_test(f, name=None)¶
註冊一個範本測試,在應用程式呈現的任何範本中都可用。作用如同
app_template_test()
裝飾器。等同於Flask.add_template_test()
。變更日誌
Added in version 0.10.
- add_url_rule(rule, endpoint=None, view_func=None, provide_automatic_options=None, **options)¶
向藍圖註冊 URL 規則。請參閱
Flask.add_url_rule()
以取得完整文件。URL 規則會加上藍圖的 URL 前綴。與
url_for()
一起使用的端點名稱,會加上藍圖的名稱前綴。
- after_app_request(f)¶
如同
after_request()
,但在每個請求之後執行,而不僅限於藍圖處理的請求。等同於Flask.after_request()
。- 參數:
f (T_after_request)
- 回傳類型:
T_after_request
- after_request(f)¶
註冊一個函式,使其在此物件的每個請求之後執行。
函式會使用回應物件呼叫,並且必須傳回回應物件。這允許函式在傳送回應之前修改或替換回應。
如果函式引發例外狀況,則任何剩餘的
after_request
函式都不會被呼叫。因此,不應將其用於必須執行的動作,例如關閉資源。請改用teardown_request()
。這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會在每個請求之後執行。在藍圖上使用時,這會在藍圖處理的每個請求之後執行。若要在藍圖中註冊並在每個請求之後執行,請使用
Blueprint.after_app_request()
。- 參數:
f (T_after_request)
- 回傳類型:
T_after_request
- app_context_processor(f)¶
如同
context_processor()
,但適用於每個視圖呈現的範本,而不僅限於藍圖。等同於Flask.context_processor()
。- 參數:
f (T_template_context_processor)
- 回傳類型:
T_template_context_processor
- app_errorhandler(code)¶
如同
errorhandler()
,但適用於每個請求,而不僅限於藍圖處理的請求。等同於Flask.errorhandler()
。
- app_template_filter(name=None)¶
註冊一個範本過濾器,在應用程式呈現的任何範本中都可用。等同於
Flask.template_filter()
。
- app_template_global(name=None)¶
註冊一個範本全域變數,在應用程式呈現的任何範本中都可用。等同於
Flask.template_global()
。變更日誌
Added in version 0.10.
- app_template_test(name=None)¶
註冊一個範本測試,在應用程式呈現的任何範本中都可用。等同於
Flask.template_test()
。變更日誌
Added in version 0.10.
- app_url_defaults(f)¶
如同
url_defaults()
,但適用於每個請求,而不僅限於藍圖處理的請求。等同於Flask.url_defaults()
。- 參數:
f (T_url_defaults)
- 回傳類型:
T_url_defaults
- app_url_value_preprocessor(f)¶
如同
url_value_preprocessor()
,但適用於每個請求,而不僅限於藍圖處理的請求。等同於Flask.url_value_preprocessor()
。- 參數:
f (T_url_value_preprocessor)
- 回傳類型:
T_url_value_preprocessor
- before_app_request(f)¶
如同
before_request()
,但在每個請求之前執行,而不僅限於藍圖處理的請求。等同於Flask.before_request()
。- 參數:
f (T_before_request)
- 回傳類型:
T_before_request
- before_request(f)¶
註冊一個函式,使其在每個請求之前執行。
例如,這可用於開啟資料庫連線,或從 session 中載入已登入的使用者。
@app.before_request def load_user(): if "user_id" in session: g.user = db.session.get(session["user_id"])
函式將在不帶任何引數的情況下被呼叫。如果它傳回非
None
值,則該值會被視為來自檢視的傳回值,並且會停止進一步的請求處理。這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會在每個請求之前執行。在藍圖上使用時,這會在藍圖處理的每個請求之前執行。若要在藍圖中註冊並在每個請求之前執行,請使用
Blueprint.before_app_request()
。- 參數:
f (T_before_request)
- 回傳類型:
T_before_request
- context_processor(f)¶
註冊一個範本上下文處理器函式。這些函式在呈現範本之前執行。傳回的 dict 的鍵會新增為範本中可用的變數。
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會針對每個呈現的範本呼叫。在藍圖上使用時,這會針對從藍圖檢視呈現的範本呼叫。若要在藍圖中註冊並影響每個範本,請使用
Blueprint.app_context_processor()
。- 參數:
f (T_template_context_processor)
- 回傳類型:
T_template_context_processor
- endpoint(endpoint)¶
裝飾視圖函式以將其註冊到給定的端點。如果使用
add_url_rule()
新增規則時沒有view_func
,則使用此方法。app.add_url_rule("/ex", endpoint="example") @app.endpoint("example") def example(): ...
- errorhandler(code_or_exception)¶
註冊一個函式,以依程式碼或例外類別處理錯誤。
一個裝飾器,用於註冊給定錯誤碼的函式。範例
@app.errorhandler(404) def page_not_found(error): return 'This page does not exist', 404
您也可以為任意例外註冊處理常式
@app.errorhandler(DatabaseError) def special_exception_handler(error): return 'Database connection failed', 500
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這可以處理來自每個請求的錯誤。在藍圖上使用時,這可以處理來自藍圖處理的請求的錯誤。若要在藍圖中註冊並影響每個請求,請使用
Blueprint.app_errorhandler()
。變更日誌
在版本 0.7 中新增: 使用
register_error_handler()
而不是直接修改error_handler_spec
,以用於應用程式範圍的錯誤處理器。在 0.7 版本中新增:現在還可以額外註冊自訂例外類型,這些類型不一定需要是
HTTPException
類別的子類別。
- 屬性 has_static_folder: bool¶
True
如果static_folder
已設定。變更日誌
在 0.5 版本中新增。
- 屬性 jinja_loader: BaseLoader | None¶
此物件範本的 Jinja 載入器。預設情況下,如果
template_folder
有設定,則為指向它的jinja2.loaders.FileSystemLoader
類別。變更日誌
在 0.5 版本中新增。
- make_setup_state(app, options, first_registration=False)¶
建立
BlueprintSetupState()
物件的實例,該物件稍後會傳遞給註冊回呼函式。子類別可以覆寫此方法以回傳設定狀態的子類別。- 參數:
- 回傳類型:
- record(func)¶
註冊一個函式,當藍圖在應用程式上註冊時會呼叫該函式。此函式會以狀態作為引數呼叫,該狀態由
make_setup_state()
方法回傳。- 參數:
func (Callable[[BlueprintSetupState], None])
- 回傳類型:
None
- record_once(func)¶
作用類似
record()
,但會將函式包裝在另一個函式中,以確保該函式只會被呼叫一次。如果藍圖在應用程式上第二次註冊,則不會呼叫傳遞的函式。- 參數:
func (Callable[[BlueprintSetupState], None])
- 回傳類型:
None
- register(app, options)¶
由
Flask.register_blueprint()
呼叫,以向應用程式註冊在藍圖上註冊的所有視圖和回呼。建立BlueprintSetupState
並使用它呼叫每個record()
回呼。- 參數:
app (App) – 此藍圖正在註冊的應用程式。
options (dict[str, t.Any]) – 從
register_blueprint()
轉發的關鍵字引數。
- 回傳類型:
None
變更日誌
變更於版本 2.3: 巢狀藍圖現在可以正確地套用子網域。
變更於版本 2.1: 多次使用相同名稱註冊相同的藍圖會產生錯誤。
變更於版本 2.0.1: 巢狀藍圖會使用它們的點狀名稱註冊。這允許同名的不同藍圖巢狀在不同的位置。
Changed in version 2.0.1:
name
選項可用於變更藍圖註冊時使用的(前綴點號)名稱。這允許同一個藍圖使用唯一的名稱多次註冊,以用於url_for
。
- register_blueprint(blueprint, **options)¶
在此藍圖上註冊一個
Blueprint
。傳遞給此方法的關鍵字引數將覆寫在藍圖上設定的預設值。變更日誌
Changed in version 2.0.1:
name
選項可用於變更藍圖註冊時使用的(前綴點號)名稱。這允許同一個藍圖使用唯一的名稱多次註冊,以用於url_for
。Added in version 2.0.
- 參數:
blueprint (Blueprint)
options (Any)
- 回傳類型:
None
- register_error_handler(code_or_exception, f)¶
用於
errorhandler()
裝飾器的替代錯誤附加函式,對於非裝飾器用法更為直接。變更日誌
Added in version 0.7.
- route(rule, **options)¶
裝飾視圖函式,以使用給定的 URL 規則和選項註冊它。呼叫
add_url_rule()
,其中有關於實作的更多詳細資訊。@app.route("/") def index(): return "Hello, World!"
參見 URL 路由註冊。
如果未傳遞
endpoint
參數,則路由的端點名稱預設為檢視函式的名稱。methods
參數預設為["GET"]
。HEAD
和OPTIONS
會自動新增。
- 屬性 static_url_path: str | None¶
靜態路由可存取的 URL 前綴。
如果它在初始化期間未設定,則從
static_folder
衍生而來。
- teardown_app_request(f)¶
類似
teardown_request()
,但在每次請求之後,而不僅僅是藍圖處理的請求。等同於Flask.teardown_request()
。- 參數:
f (T_teardown)
- 回傳類型:
T_teardown
- teardown_request(f)¶
註冊一個函式,在請求環境內容彈出時呼叫。通常這會在每個請求結束時發生,但在測試期間也可以手動推送環境內容。
with app.test_request_context(): ...
當
with
區塊結束(或呼叫ctx.pop()
)時,會在請求環境內容變為非活動狀態之前呼叫拆解函式。當由於未處理的例外狀況而呼叫拆解函式時,它將被傳遞一個錯誤物件。如果註冊了
errorhandler()
,它將處理例外狀況,而拆解函式將不會收到它。拆解函式必須避免引發例外狀況。如果它們執行的程式碼可能會失敗,則必須將該程式碼用
try
/except
區塊包圍,並記錄任何錯誤。拆解函式的傳回值會被忽略。
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會在每個請求之後執行。在藍圖上使用時,這會在藍圖處理的每個請求之後執行。若要向藍圖註冊並在每個請求之後執行,請使用
Blueprint.teardown_app_request()
。- 參數:
f (T_teardown)
- 回傳類型:
T_teardown
- url_defaults(f)¶
應用程式所有檢視函式的 URL 預設值的回呼函式。它會使用端點和值呼叫,並應就地更新傳遞的值。
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會為每個請求呼叫。在藍圖上使用時,這會為藍圖處理的請求呼叫。若要向藍圖註冊並影響每個請求,請使用
Blueprint.app_url_defaults()
。- 參數:
f (T_url_defaults)
- 回傳類型:
T_url_defaults
- url_value_preprocessor(f)¶
為應用程式中的所有視圖函式註冊 URL 值預處理器函式。這些函式將在
before_request()
函式之前呼叫。該函式可以在將值傳遞給檢視之前,修改從匹配的 URL 捕獲的值。例如,這可以用於彈出常見的語言代碼值並將其放置在
g
中,而不是將其傳遞給每個檢視。該函式會傳遞端點名稱和值字典。傳回值會被忽略。
這在應用程式和藍圖物件上都可用。在應用程式上使用時,這會為每個請求呼叫。在藍圖上使用時,這會為藍圖處理的請求呼叫。若要向藍圖註冊並影響每個請求,請使用
Blueprint.app_url_value_preprocessor()
。- 參數:
f (T_url_value_preprocessor)
- 回傳類型:
T_url_value_preprocessor
- import_name¶
此物件所屬的套件或模組名稱。一旦由建構子設定後,請勿變更此名稱。
- root_path¶
檔案系統上套件的絕對路徑。用於查找套件中包含的資源。
- view_functions: dict[str, ft.RouteCallable]¶
將端點名稱對應到視圖函式的字典。
若要註冊視圖函式,請使用
route()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- error_handler_spec: dict[ft.AppOrBlueprintKey, dict[int | None, dict[type[Exception], ft.ErrorHandlerCallable]]]¶
已註冊錯誤處理器的資料結構,格式為
{scope: {code: {class: handler}}}
。scope
鍵值是處理器作用的藍圖名稱,或None
表示適用於所有請求。code
鍵值是HTTPException
的 HTTP 狀態碼,或None
表示其他例外狀況。最內層的字典將例外狀況類別對應到處理器函式。若要註冊錯誤處理常式,請使用
errorhandler()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- before_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.BeforeRequestCallable]]¶
在每個請求開始時呼叫的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
before_request()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- after_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.AfterRequestCallable[t.Any]]]¶
在每個請求結束時呼叫的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
after_request()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- teardown_request_funcs: dict[ft.AppOrBlueprintKey, list[ft.TeardownCallable]]¶
即使引發例外狀況,在每個請求結束時仍會呼叫的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
teardown_request()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- template_context_processors: dict[ft.AppOrBlueprintKey, list[ft.TemplateContextProcessorCallable]]¶
在呈現範本時呼叫以傳遞額外上下文值的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
context_processor()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- url_value_preprocessors: dict[ft.AppOrBlueprintKey, list[ft.URLValuePreprocessorCallable]]¶
呼叫以修改傳遞到視圖函式的關鍵字引數的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
url_value_preprocessor()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
- url_default_functions: dict[ft.AppOrBlueprintKey, list[ft.URLDefaultCallable]]¶
呼叫以修改產生 URL 時的關鍵字引數的函式資料結構,格式為
{scope: [functions]}
。scope
鍵值是函式作用的藍圖名稱,或None
表示適用於所有請求。若要註冊函式,請使用
url_defaults()
裝飾器。此資料結構為內部結構。不應直接修改,其格式可能隨時變更。
傳入的請求資料¶
- class flask.Request(environ, populate_request=True, shallow=False)¶
預設在 Flask 中使用的請求物件。記住匹配的端點和視圖引數。
它最終成為
request
。如果您想要替換使用的請求物件,您可以子類別化它並將request_class
設定為您的子類別。請求物件是
Request
子類別,並提供 Werkzeug 定義的所有屬性,以及一些 Flask 特有的屬性。- url_rule: Rule | None = None¶
與請求匹配的內部 URL 規則。這可用於從 before/after 處理常式 (
request.url_rule.methods
) 等檢查 URL 允許哪些方法。雖然如果請求的方法對於 URL 規則無效,則有效列表可在routing_exception.valid_methods
中找到(Werkzeug 例外狀況MethodNotAllowed
的屬性),因為請求從未在內部繫結。變更日誌
在 0.6 版本中新增。
- routing_exception: HTTPException | None = None¶
如果 URL 匹配失敗,則這是將被引發/作為請求處理一部分引發的例外狀況。這通常是
NotFound
例外狀況或類似的狀況。
- 屬性 max_content_length: int | None¶
在此請求期間將讀取的最大位元組數。如果超出此限制,則會引發 413
RequestEntityTooLarge
錯誤。如果設定為None
,則 Flask 應用程式層級不會強制執行任何限制。但是,如果它是None
且請求沒有Content-Length
標頭,且 WSGI 伺服器未指示它終止串流,則不會讀取任何資料以避免無限串流。每個請求預設為
MAX_CONTENT_LENGTH
設定,其預設值為None
。它可以在特定的request
上設定,以將限制套用於該特定視圖。應根據應用程式或視圖的特定需求適當設定此值。變更於版本 3.1: 這可以針對每個請求設定。
變更日誌
變更於版本 0.6: 這是可透過 Flask 設定配置的。
- 屬性 max_form_memory_size: int | None¶
任何非檔案表單欄位在
multipart/form-data
主體中可以使用的最大大小(以位元組為單位)。如果超出此限制,則會引發 413RequestEntityTooLarge
錯誤。如果設定為None
,則 Flask 應用程式層級不會強制執行任何限制。每個請求預設為
MAX_FORM_MEMORY_SIZE
設定,其預設值為500_000
。它可以在特定的request
上設定,以將限制套用於該特定視圖。應根據應用程式或視圖的特定需求適當設定此值。變更於版本 3.1: 這是可透過 Flask 設定配置的。
- 屬性 max_form_parts: int | None¶
在
multipart/form-data
主體中可能存在的最大欄位數。如果超出此限制,則會引發 413RequestEntityTooLarge
錯誤。如果設定為None
,則 Flask 應用程式層級不會強制執行任何限制。每個請求預設為
MAX_FORM_PARTS
設定,其預設值為1_000
。它可以在特定的request
上設定,以將限制套用於該特定視圖。應根據應用程式或視圖的特定需求適當設定此值。變更於版本 3.1: 這是可透過 Flask 設定配置的。
- 屬性 endpoint: str | None¶
與請求 URL 匹配的端點。
如果匹配失敗或尚未執行,則這將為
None
。這與
view_args
結合使用,可用於重建相同的 URL 或修改後的 URL。
- property blueprint: str | None¶
目前藍圖的已註冊名稱。
如果端點不屬於藍圖的一部分,或者 URL 匹配失敗或尚未執行,則此值將為
None
。這不一定與建立藍圖時使用的名稱相符。它可能已被巢狀化,或以不同的名稱註冊。
- property blueprints: list[str]¶
目前藍圖的已註冊名稱,向上追溯至父藍圖。
如果沒有目前的藍圖,或 URL 匹配失敗,則這將會是一個空列表。
變更日誌
在 2.0.1 版本中新增。
- on_json_loading_failed(e)¶
當
get_json()
失敗且未被靜音時呼叫。如果此方法傳回一個值,則該值將用作
get_json()
的傳回值。預設實作會引發BadRequest
。- 參數:
e (ValueError | None) – 如果解析失敗,則為此例外。如果內容類型不是
application/json
,則將為None
。- 回傳類型:
變更日誌
Changed in version 2.3: 在 2.3 版本中變更:引發 415 錯誤而非 400 錯誤。
- property accept_charsets: CharsetAccept¶
此用戶端支援的字元集列表,作為
CharsetAccept
物件。
- property accept_languages: LanguageAccept¶
此用戶端接受的語言列表,作為
LanguageAccept
物件。
- property accept_mimetypes: MIMEAccept¶
此用戶端支援的 MIME 類型列表,作為
MIMEAccept
物件。
- access_control_request_headers¶
與預檢請求一起傳送,以指示將與跨來源請求一起傳送哪些標頭。在回應中設定
access_control_allow_headers
以指示允許哪些標頭。
- access_control_request_method¶
與預檢請求一起傳送,以指示將用於跨來源請求的方法。在回應中設定
access_control_allow_methods
以指示允許哪些方法。
- classmethod application(f)¶
將函數裝飾為接受請求作為最後一個引數的回應器。這與
responder()
裝飾器的工作方式類似,但函數會將請求物件作為最後一個引數傳遞,並且請求物件將自動關閉@Request.application def my_wsgi_app(request): return Response('Hello World!')
從 Werkzeug 0.14 開始,HTTP 例外會自動捕獲並轉換為回應,而不是失敗。
- 參數:
f (t.Callable[[Request], WSGIApplication]) – 要裝飾的 WSGI 可呼叫物件
- Returns:
新的 WSGI 可呼叫物件
- 回傳類型:
WSGIApplication
- property args: MultiDict[str, str]¶
已剖析的 URL 參數(URL 中問號後面的部分)。
預設情況下,此函數會傳回
ImmutableMultiDict
。可以透過將parameter_storage_class
設定為不同的類型來變更此行為。如果表單資料的順序很重要,則可能需要這樣做。變更日誌
Changed in version 2.3: 在 2.3 版本中變更:無效的位元組保持百分比編碼。
- property authorization: Authorization | None¶
Authorization
標頭已剖析為Authorization
物件。如果標頭不存在,則為None
。變更日誌
Changed in version 2.3: 在 2.3 版本中變更:
Authorization
不再是dict
。token
屬性已針對使用權杖而非參數的驗證方案新增。
- property cache_control: RequestCacheControl¶
用於傳入快取控制標頭的
RequestCacheControl
物件。
- close()¶
關閉此請求物件的相關資源。這會明確關閉所有檔案控制代碼。您也可以在 with 語句中使用請求物件,這將自動關閉它。
變更日誌
在 0.9 版本中新增。
- 回傳類型:
None
- content_encoding¶
Content-Encoding 實體標頭欄位用作媒體類型的修飾符。當存在時,其值指示已對實體主體應用了哪些額外的內容編碼,因此必須應用哪些解碼機制才能獲得 Content-Type 標頭欄位引用的媒體類型。
變更日誌
在 0.9 版本中新增。
- property content_length: int | None¶
Content-Length 實體標頭欄位指示實體主體的大小(以位元組為單位),或者,在 HEAD 方法的情況下,指示如果請求是 GET,則本應傳送的實體主體的大小。
- content_md5¶
Content-MD5 實體標頭欄位(如 RFC 1864 中定義)是實體主體的 MD5 摘要,用於提供實體主體的端對端訊息完整性檢查 (MIC)。(注意:MIC 適用於偵測傳輸過程中實體主體的意外修改,但不能防禦惡意攻擊。)
變更日誌
在 0.9 版本中新增。
- content_type¶
Content-Type 實體標頭欄位指示傳送給接收者的實體主體的媒體類型,或者,在 HEAD 方法的情況下,指示如果請求是 GET,則本應傳送的媒體類型。
- property data: bytes¶
從
stream
讀取的原始資料。如果請求表示表單資料,則將為空。若要取得即使它表示表單資料的原始資料,請使用
get_data()
。
- date¶
Date 一般標頭欄位表示訊息的原始日期和時間,其語義與 RFC 822 中的 orig-date 相同。
變更日誌
Changed in version 2.0: 在 2.0 版本中變更:datetime 物件具有時區感知能力。
- dict_storage_class¶
ImmutableMultiDict
的別名
- property files: ImmutableMultiDict[str, FileStorage]¶
包含所有上傳檔案的
MultiDict
物件。files
中的每個鍵都是來自<input type="file" name="">
的名稱。files
中的每個值都是 WerkzeugFileStorage
物件。它基本上像您從 Python 知道的標準檔案物件一樣運作,不同之處在於它還具有一個
save()
函數,可用於將檔案儲存在檔案系統上。請注意,只有當請求方法為 POST、PUT 或 PATCH 且發佈到請求的
<form>
具有enctype="multipart/form-data"
時,files
才會包含資料。否則它將為空。請參閱
MultiDict
/FileStorage
文件,以取得有關所用資料結構的更多詳細資訊。
- property form: ImmutableMultiDict[str, str]¶
表單參數。預設情況下,此函數會傳回
ImmutableMultiDict
。可以透過將parameter_storage_class
設定為不同的類型來變更此行為。如果表單資料的順序很重要,則可能需要這樣做。請記住,檔案上傳將不會在此處結束,而是會在
files
屬性中結束。變更日誌
Changed in version 0.9: 在 0.9 版本中變更:在 Werkzeug 0.9 之前的版本中,這只會包含 POST 和 PUT 請求的表單資料。
- form_data_parser_class¶
FormDataParser
的別名
- classmethod from_values(*args, **kwargs)¶
根據提供的值建立新的請求物件。如果給定了 environ,則會從該處填寫遺失的值。當您需要模擬來自 URL 的請求時,此方法對於小型腳本很有用。請勿將此方法用於單元測試,有一個功能齊全的用戶端物件 (
Client
) 允許建立多部分請求,支援 Cookie 等。這接受與
EnvironBuilder
相同的選項。變更日誌
Changed in version 0.5: 在 0.5 版本中變更:此方法現在接受與
EnvironBuilder
相同的引數。因此,environ
參數現在稱為environ_overrides
。
- get_data(cache=True, as_text=False, parse_form_data=False)¶
這會將來自用戶端的緩衝輸入資料讀取到一個位元組物件中。預設情況下,這會被快取,但可以透過將
cache
設定為False
來變更此行為。通常,在未先檢查內容長度的情況下呼叫此方法不是一個好主意,因為用戶端可能會傳送數十 MB 或更多的資料,從而在伺服器上造成記憶體問題。
請注意,如果已剖析表單資料,則此方法將不會傳回任何內容,因為表單資料剖析不會像此方法一樣快取資料。若要隱含地調用表單資料剖析函數,請將
parse_form_data
設定為True
。完成此操作後,如果表單剖析器處理資料,則此方法的傳回值將為空字串。這通常不是必要的,因為如果快取了所有資料(這是預設值),則表單剖析器將使用快取的資料來剖析表單資料。一般而言,在任何情況下呼叫此方法之前,請注意先檢查內容長度,以避免耗盡伺服器記憶體。如果將
as_text
設定為True
,則傳回值將為已解碼的字串。變更日誌
在 0.9 版本中新增。
- get_json(force=False, silent=False, cache=True)¶
將
data
剖析為 JSON。如果 mimetype 未指示 JSON(application/json,請參閱
is_json
),或剖析失敗,則會呼叫on_json_loading_failed()
,並將其傳回值用作傳回值。預設情況下,這會引發 415 不支援的媒體類型回應。- 參數:
- 回傳類型:
Any | None
變更日誌
Changed in version 2.3: 在 2.3 版本中變更:引發 415 錯誤而非 400 錯誤。
Changed in version 2.1: 在 2.1 版本中變更:如果內容類型不正確,則引發 400 錯誤。
- property host: str¶
請求所發往的主機名稱,如果是非標準連接埠,則包括連接埠。使用
trusted_hosts
驗證。
- property if_modified_since: datetime | None¶
解析後的
If-Modified-Since
標頭,以 datetime 物件表示。變更日誌
Changed in version 2.0: 在 2.0 版本中變更:datetime 物件具有時區感知能力。
- property if_range: IfRange¶
解析後的
If-Range
標頭。變更日誌
變更於版本 2.0:
IfRange.date
具有時區感知能力。Added in version 0.7.
- property if_unmodified_since: datetime | None¶
解析後的
If-Unmodified-Since
標頭,以 datetime 物件表示。變更日誌
Changed in version 2.0: 在 2.0 版本中變更:datetime 物件具有時區感知能力。
- input_stream¶
原始 WSGI 輸入流,不帶任何安全檢查。
使用此屬性具有危險性。它不會防範無限流,也不會防止讀取超過
content_length
或max_content_length
的內容。請改用
stream
。
- is_multiprocess¶
布林值,如果應用程式由產生多個進程的 WSGI 伺服器提供服務,則為
True
。
- is_multithread¶
布林值,如果應用程式由多執行緒 WSGI 伺服器提供服務,則為
True
。
- is_run_once¶
布林值,如果應用程式在進程生命週期中僅執行一次,則為
True
。例如,CGI 就是這種情況,但不保證僅執行一次。
- property json: Any | None¶
如果
mimetype
指示 JSON (application/json,請參閱is_json
),則為已解析的 JSON 資料。呼叫帶有預設引數的
get_json()
。如果請求內容類型不是
application/json
,這將引發 415 Unsupported Media Type 錯誤。變更日誌
Changed in version 2.3: 在 2.3 版本中變更:引發 415 錯誤而非 400 錯誤。
Changed in version 2.1: 在 2.1 版本中變更:如果內容類型不正確,則引發 400 錯誤。
- list_storage_class¶
別名為
ImmutableList
- make_form_data_parser()¶
建立表單資料解析器。使用一些參數實例化
form_data_parser_class
。變更日誌
在 0.8 版本中新增。
- 回傳類型:
- max_forwards¶
Max-Forwards 請求標頭欄位提供一種機制,透過 TRACE 和 OPTIONS 方法來限制可以將請求轉發到下一個入站伺服器的代理伺服器或閘道數量。
- property mimetype: str¶
類似於
content_type
,但不包含參數(例如,不包含字元集、類型等),且始終為小寫。例如,如果內容類型為text/HTML; charset=utf-8
,則 mimetype 將為'text/html'
。
- property mimetype_params: dict[str, str]¶
mimetype 參數,以字典形式表示。例如,如果內容類型為
text/html; charset=utf-8
,則參數將為{'charset': 'utf-8'}
。
- origin¶
請求的來源主機。在回應中設定
access_control_allow_origin
以指示允許哪些來源。
- parameter_storage_class¶
ImmutableMultiDict
的別名
- property pragma: HeaderSet¶
Pragma 通用標頭欄位用於包含實作特定的指令,這些指令可能適用於請求/回應鏈中的任何接收者。所有 pragma 指令都指定協定觀點中的可選行為;但是,某些系統可能要求行為與指令一致。
- referrer¶
Referer[原文如此] 請求標頭欄位允許客戶端為伺服器的利益指定取得 Request-URI 的資源位址 (URI)(「referrer」,儘管標頭欄位拼寫錯誤)。
- remote_user¶
如果伺服器支援使用者身份驗證,且腳本受到保護,則此屬性包含使用者已驗證身份的使用者名稱。
- property stream: IO[bytes]¶
WSGI 輸入流,帶有安全檢查。此流只能使用一次。
使用
get_data()
以取得完整資料作為位元組或文字。data
屬性僅在資料不代表表單資料時才會包含完整位元組。form
屬性在這種情況下將包含已解析的表單資料。與
input_stream
不同,此流可防範無限流或讀取超過content_length
或max_content_length
的內容。如果設定了
max_content_length
,則如果設定了wsgi.input_terminated
,則可以在流上強制執行。否則,將返回空流。如果在基礎流耗盡之前達到限制(例如檔案太大或無限流),則無法安全地讀取流的剩餘內容。根據伺服器處理此問題的方式,客戶端可能會顯示「連線重設」失敗,而不是看到 413 回應。
變更日誌
變更於版本 2.3:預先檢查
max_content_length
並在讀取時檢查。變更於版本 0.9:即使首先存取表單解析,也始終設定流(但可能已被使用)。
- trusted_hosts: list[str] | None = None¶
處理請求時的有效主機名稱。預設情況下,所有主機都受信任,這表示無論客戶端說主機是什麼,都將被接受。
由於惡意客戶端可以將
Host
和X-Forwarded-Host
標頭設定為任何值,因此建議設定此屬性或在代理伺服器中實作類似的驗證(如果應用程式在代理伺服器後面執行)。變更日誌
在 0.9 版本中新增。
- property user_agent: UserAgent¶
使用者代理程式。使用
user_agent.string
取得標頭值。將user_agent_class
設定為UserAgent
的子類別,以提供其他屬性或其他擴充資料的解析。變更日誌
變更於版本 2.1:內建解析器已移除。將
user_agent_class
設定為UserAgent
子類別,以從字串解析資料。
- property values: CombinedMultiDict[str, str]¶
werkzeug.datastructures.CombinedMultiDict
,結合了args
和form
。對於 GET 請求,僅存在
args
,而不存在form
。變更日誌
變更於版本 2.0:對於 GET 請求,僅存在
args
,而不存在form
。
- property want_form_data_parsed: bool¶
如果請求方法攜帶內容,則為
True
。預設情況下,如果傳送了Content-Type
,則為 true。變更日誌
在 0.8 版本中新增。
- environ: WSGIEnvironment¶
WSGI 環境,包含 HTTP 標頭和來自 WSGI 伺服器的資訊。
- method¶
發出請求的方法,例如
GET
。
- scheme¶
請求使用的協定的 URL scheme,例如
https
或wss
。
- server¶
伺服器的位址。
(host, port)
、Unix socket 的(path, None)
,或如果未知則為None
。
- headers¶
請求收到的標頭。
- remote_addr¶
發送請求的客戶端位址。
回應物件¶
- class flask.Response(response=None, status=None, headers=None, mimetype=None, content_type=None, direct_passthrough=False)¶
Flask 中預設使用的回應物件。其運作方式類似於 Werkzeug 中的回應物件,但預設設定為 HTML mimetype。通常您不必自己建立此物件,因為
make_response()
會為您處理。如果您想替換使用的回應物件,可以繼承此物件並將
response_class
設定為您的子類別。- 參數:
- accept_ranges¶
Accept-Ranges
標頭。即使名稱表示支援多個值,它也必須僅為一個字串 token。常見的值為
'bytes'
和'none'
。變更日誌
Added in version 0.7.
- property access_control_allow_credentials: bool¶
瀏覽器是否可以將憑證共用給 JavaScript 程式碼。作為 preflight 請求的一部分,它指示是否可以在跨域請求中使用憑證。
- access_control_allow_headers¶
哪些標頭可以與跨域請求一起傳送。
- access_control_allow_methods¶
哪些方法可以用於跨域請求。
- access_control_allow_origin¶
可以發出跨域請求的來源或 '*' (任何來源)。
- access_control_expose_headers¶
瀏覽器可以將哪些標頭共用給 JavaScript 程式碼。
- access_control_max_age¶
存取控制設定可以快取的最大秒數。
- add_etag(overwrite=False, weak=False)¶
如果目前的回應尚無 etag,則新增一個。
變更日誌
變更於版本 2.0:SHA-1 用於產生值。MD5 在某些環境中可能不可用。
- age¶
Age 回應標頭欄位傳達發送者對回應(或其重新驗證)在原始伺服器上產生以來經過的時間量的估計。
Age 值是非負十進制整數,表示時間(以秒為單位)。
- property allow: HeaderSet¶
Allow 實體標頭欄位列出 Request-URI 識別的資源支援的方法集。此欄位的目的嚴格來說是通知接收者與資源關聯的有效方法。Allow 標頭欄位必須出現在 405 (Method Not Allowed) 回應中。
- automatically_set_content_length = True¶
此回應物件是否應在可能的情況下自動設定 content-length 標頭?預設為 true。
變更日誌
在 0.8 版本中新增。
- 屬性 cache_control: ResponseCacheControl¶
Cache-Control 通用標頭欄位用於指定請求/回應鏈中所有快取機制**必須**遵守的指令。
- call_on_close(func)¶
新增一個函數到內部函數列表中,這些函數應在關閉回應時被調用。自 0.7 版本起,此函數也會返回傳入的函數,因此可以作為裝飾器使用。
變更日誌
在 0.6 版本中新增。
- close()¶
如果可能,關閉包裝的回應。您也可以在 with 語句中使用此物件,它將自動關閉回應。
變更日誌
版本 0.9 新增: 現在可以在 with 語句中使用。
- 回傳類型:
None
- content_encoding¶
Content-Encoding 實體標頭欄位用作媒體類型的修飾符。當存在時,其值指示已對實體主體應用了哪些額外的內容編碼,因此必須應用哪些解碼機制才能獲得 Content-Type 標頭欄位引用的媒體類型。
- content_length¶
Content-Length 實體標頭欄位指示傳送給接收者的實體主體大小(以十進制 OCTET 數表示),或者在 HEAD 方法的情況下,指示如果請求是 GET 請求,則會傳送的實體主體大小。
- content_location¶
當封閉在訊息中的實體可以從與請求資源的 URI 不同的位置存取時,Content-Location 實體標頭欄位**可以**用於提供實體的資源位置。
- content_md5¶
Content-MD5 實體標頭欄位(如 RFC 1864 中定義)是實體主體的 MD5 摘要,用於提供實體主體的端對端訊息完整性檢查 (MIC)。(注意:MIC 適用於偵測傳輸過程中實體主體的意外修改,但不能防禦惡意攻擊。)
- 屬性 content_range: ContentRange¶
Content-Range
標頭作為ContentRange
物件。即使未設定標頭也可用。變更日誌
Added in version 0.7.
- 屬性 content_security_policy: ContentSecurityPolicy¶
Content-Security-Policy
標頭作為ContentSecurityPolicy
物件。即使未設定標頭也可用。Content-Security-Policy 標頭新增額外的安全層,以協助偵測和緩解某些類型的攻擊。
- 屬性 content_security_policy_report_only: ContentSecurityPolicy¶
Content-Security-policy-report-only
標頭作為ContentSecurityPolicy
物件。即使未設定標頭也可用。Content-Security-Policy-Report-Only 標頭新增一個 csp 策略,該策略不會強制執行,但會報告,從而協助偵測某些類型的攻擊。
- content_type¶
Content-Type 實體標頭欄位指示傳送給接收者的實體主體的媒體類型,或者,在 HEAD 方法的情況下,指示如果請求是 GET,則本應傳送的媒體類型。
- cross_origin_embedder_policy¶
防止文件載入任何未明確授予文件許可的跨來源資源。值必須是
werkzeug.http.COEP
列舉的成員。
- cross_origin_opener_policy¶
允許控制與跨來源文件共用瀏覽上下文群組。值必須是
werkzeug.http.COOP
列舉的成員。
- 屬性 data: bytes | str¶
一個描述器,用於調用
get_data()
和set_data()
。
- date¶
Date 一般標頭欄位表示訊息的原始日期和時間,其語義與 RFC 822 中的 orig-date 相同。
變更日誌
Changed in version 2.0: 在 2.0 版本中變更:datetime 物件具有時區感知能力。
- default_status = 200¶
如果未提供狀態碼,則為預設狀態碼。
- delete_cookie(key, path='/', domain=None, secure=False, httponly=False, samesite=None, partitioned=False)¶
刪除 cookie。如果金鑰不存在,則會靜默失敗。
- 參數:
key (str) – 要刪除的 cookie 的金鑰(名稱)。
path (str | None) – 如果要刪除的 cookie 僅限於特定路徑,則必須在此處定義路徑。
domain (str | None) – 如果要刪除的 cookie 僅限於特定網域,則必須在此處定義網域。
secure (bool) – 如果為
True
,則 cookie 僅可透過 HTTPS 取得。httponly (bool) – 禁止 JavaScript 存取 cookie。
samesite (str | None) – 限制 cookie 的範圍,使其僅附加到「同網站」請求。
partitioned (bool) – 如果為
True
,則 cookie 將被分割。
- 回傳類型:
None
- expires¶
Expires 實體標頭欄位給出日期/時間,在此之後回應被視為過時。過時的快取條目通常可能不會被快取返回。
變更日誌
Changed in version 2.0: 在 2.0 版本中變更:datetime 物件具有時區感知能力。
- classmethod force_type(response, environ=None)¶
強制 WSGI 回應為目前類型的回應物件。Werkzeug 在許多情況下(例如例外)會在內部使用
Response
。如果您在例外上調用get_response()
,即使您正在使用自訂子類別,您也會獲得常規的Response
物件。此方法可以強制給定的回應類型,並且如果提供了 environ,它還會將任意 WSGI 可調用物件轉換為回應物件
# convert a Werkzeug response object into an instance of the # MyResponseClass subclass. response = MyResponseClass.force_type(response) # convert any WSGI application into a response object response = MyResponseClass.force_type(response, environ)
如果您想要在主調度器中對回應進行後處理並使用子類別提供的功能,這特別有用。
請記住,如果可能,這將就地修改回應物件!
- freeze()¶
使回應物件準備好進行 pickled。執行以下操作
將回應緩衝到列表中,忽略
implicity_sequence_conversion
和direct_passthrough
。設定
Content-Length
標頭。如果尚未設定
ETag
標頭,則產生一個。
變更日誌
版本 2.1 變更: 移除
no_etag
參數。版本 2.0 變更: 始終新增
ETag
標頭。版本 0.6 變更: 設定
Content-Length
標頭。- 回傳類型:
None
- classmethod from_app(app, environ, buffered=False)¶
從應用程式輸出建立新的回應物件。如果您傳遞一個始終返回產生器的應用程式,則此方法效果最佳。有時應用程式可能會使用
start_response
函數返回的write()
可調用物件。這嘗試自動解決此類邊緣情況。但是,如果您沒有獲得預期的輸出,則應將buffered
設定為True
,這會強制緩衝。
- get_app_iter(environ)¶
返回給定 environ 的應用程式迭代器。根據請求方法和當前狀態碼,返回值可能是空回應,而不是來自回應的回應。
如果請求方法是
HEAD
或狀態碼在 HTTP 規範要求空回應的範圍內,則返回空的可迭代物件。變更日誌
在 0.6 版本中新增。
- 參數:
environ (WSGIEnvironment) – 請求的 WSGI 環境。
- Returns:
回應可迭代物件。
- 回傳類型:
t.Iterable[bytes]
- get_data(as_text=False)¶
回應主體的字串表示形式。每當您調用此屬性時,回應可迭代物件都會被編碼和展平。如果您串流傳輸大數據,這可能會導致不必要的行為。
可以透過將
implicit_sequence_conversion
設定為False
來停用此行為。如果將
as_text
設定為True
,則傳回值將為已解碼的字串。變更日誌
在 0.9 版本中新增。
- get_etag()¶
返回
(etag, is_weak)
形式的元組。如果沒有 ETag,則傳回值為(None, None)
。
- get_json(force=False, silent=False)¶
將
data
解析為 JSON。在測試期間很有用。如果 mimetype 未指示 JSON (application/json,請參閱
is_json
),則此方法返回None
。與
Request.get_json()
不同,結果不會被快取。
- get_wsgi_headers(environ)¶
這會在回應啟動之前自動調用,並返回為給定環境修改的標頭。它返回回應中標頭的副本,並在必要時應用一些修改。
例如,位置標頭(如果存在)會與環境的根 URL 聯接。此外,對於某些狀態碼,內容長度也會在此處自動設定為零。
變更日誌
版本 0.6 變更: 先前該函數名為
fix_headers
,並就地修改回應物件。此外,自 0.6 版本起,位置和內容位置標頭中的 IRI 會被正確處理。同樣從 0.6 版本開始,Werkzeug 將嘗試設定內容長度(如果它能夠自行計算出來)。如果回應可迭代物件中的所有字串都已編碼且可迭代物件已緩衝,則會發生這種情況。
- 參數:
environ (WSGIEnvironment) – 請求的 WSGI 環境。
- Returns:
返回新的
Headers
物件。- 回傳類型:
Headers
- get_wsgi_response(environ)¶
以元組形式返回最終的 WSGI 回應。元組中的第一個項目是應用程式迭代器,第二個是狀態,第三個是標頭列表。返回的回應是專為給定環境建立的。例如,如果 WSGI 環境中的請求方法是
'HEAD'
,則回應將為空,並且僅存在標頭和狀態碼。變更日誌
在 0.6 版本中新增。
- implicit_sequence_conversion = True¶
如果設定為
False
,則存取回應物件上的屬性將不會嘗試消耗回應迭代器並將其轉換為列表。變更日誌
版本 0.6.2 新增: 該屬性先前名為
implicit_seqence_conversion
。(注意拼字錯誤)。如果您確實使用了此功能,則必須調整您的程式碼以適應名稱變更。
- 屬性 is_streamed: bool¶
如果回應被串流傳輸(回應不是具有長度資訊的可迭代物件),則此屬性為
True
。在這種情況下,串流傳輸表示沒有關於迭代次數的資訊。如果將產生器傳遞給回應物件,則通常為True
。這對於在應用某些不應對串流回應進行的後處理篩選之前進行檢查很有用。
- iter_encoded()¶
迭代以回應的編碼方式編碼的回應。如果回應物件作為 WSGI 應用程式被調用,除非
direct_passthrough
已啟用,否則此方法的傳回值將用作應用程式迭代器。
- 屬性 json: Any | None¶
如果
mimetype
指示 JSON (application/json,請參閱is_json
),則為已解析的 JSON 資料。使用預設參數調用
get_json()
。
- last_modified¶
Last-Modified 實體標頭欄位指示原始伺服器認為變體上次修改的日期和時間。
變更日誌
Changed in version 2.0: 在 2.0 版本中變更:datetime 物件具有時區感知能力。
- location¶
Location 回應標頭欄位用於將接收者重新導向到 Request-URI 以外的位置,以完成請求或識別新資源。
- make_conditional(request_or_environ, accept_ranges=False, complete_length=None)¶
使回應成為請求的條件式回應。如果已為回應定義了 etag,則此方法效果最佳。
add_etag
方法可用於執行此操作。如果在沒有 etag 的情況下調用,則僅設定日期標頭。如果請求或 environ 中的請求方法不是 GET 或 HEAD,則此方法不執行任何操作。
為了在處理範圍請求時獲得最佳效能,建議您的回應資料物件實作
io.IOBase
所述的seekable
、seek
和tell
方法。wrap_file()
返回的物件會自動實作這些方法。它不會移除回應的主體,因為這是
__call__()
函數自動為我們執行的操作。返回 self,以便您可以執行
return resp.make_conditional(req)
,但會就地修改物件。- 參數:
request_or_environ (WSGIEnvironment | Request) – 要用於使回應成為條件式回應的請求物件或 WSGI 環境。
accept_ranges (bool | str) – 此參數指示
Accept-Ranges
標頭的值。如果為False
(預設值),則不會設定標頭。如果為True
,則會設定為"bytes"
。如果它是字串,則會使用此值。complete_length (int | None) – 僅在有效的範圍請求中使用。它將設定
Content-Range
完整長度值並計算Content-Length
實際值。此參數對於成功完成範圍請求是強制性的。
- Raises:
RequestedRangeNotSatisfiable
如果無法解析或滿足Range
標頭。- 回傳類型:
變更日誌
版本 2.0 變更: 如果長度為 0,則跳過範圍處理,而不是引發 416 Range Not Satisfiable 錯誤。
- make_sequence()¶
將回應迭代器轉換為列表。預設情況下,如果需要,這會自動發生。如果停用了
implicit_sequence_conversion
,則不會自動調用此方法,並且某些屬性可能會引發例外。這也會編碼所有項目。變更日誌
在 0.6 版本中新增。
- 回傳類型:
None
- 屬性 mimetype_params: dict[str, str]¶
mimetype 參數,以字典形式表示。例如,如果內容類型為
text/html; charset=utf-8
,則參數將為{'charset': 'utf-8'}
。變更日誌
在 0.5 版本中新增。
- property retry_after: datetime | None¶
Retry-After 回應標頭欄位可用於 503 (服務無法使用中) 回應,以指出服務預期無法提供給請求用戶端的時間長度。
到期前的秒數或日期。
變更日誌
Changed in version 2.0: 在 2.0 版本中變更:datetime 物件具有時區感知能力。
- set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None, partitioned=False)¶
設定 Cookie。
如果 Cookie 標頭的大小超過
max_cookie_size
,則會發出警告,但仍會設定標頭。- 參數:
key ( str ) – 要設定的 Cookie 的鍵 (名稱)。
value ( str ) – Cookie 的值。
max_age ( timedelta | int | None ) – 應為秒數,或
None
(預設值),如果 Cookie 僅應在用戶端瀏覽器工作階段期間持續存在。expires ( str | datetime | int | float | None ) – 應為
datetime
物件或 UNIX 時間戳記。path ( str | None ) – 將 Cookie 限制為給定的路徑,預設情況下它將跨越整個網域。
domain ( str | None ) – 如果您要設定跨網域 Cookie。例如,
domain="example.com"
將設定一個可由網域www.example.com
、foo.example.com
等讀取的 Cookie。否則,Cookie 將僅可由設定它的網域讀取。secure (bool) – 如果為
True
,則 cookie 僅可透過 HTTPS 取得。httponly (bool) – 禁止 JavaScript 存取 cookie。
samesite (str | None) – 限制 cookie 的範圍,使其僅附加到「同網站」請求。
partitioned (bool) – 如果為
True
,則 cookie 將被分割。
- 回傳類型:
None
Changed in version 3.1: 新增了
partitioned
參數。
- set_data(value)¶
設定新的字串作為回應。值必須是字串或位元組。如果設定了字串,則會編碼為回應的字元集 (預設為 utf-8)。
變更日誌
在 0.9 版本中新增。
- property stream: ResponseStream¶
回應可迭代物件,作為僅寫入串流。
- property www_authenticate: WWWAuthenticate¶
WWW-Authenticate
標頭已剖析為WWWAuthenticate
物件。修改物件將修改標頭值。預設情況下未設定此標頭。若要設定此標頭,請將
WWWAuthenticate
的執行個體指派給此屬性。response.www_authenticate = WWWAuthenticate( "basic", {"realm": "Authentication Required"} )
可以傳送此標頭的多個值,為用戶端提供多個選項。指派清單以設定多個標頭。但是,修改清單中的項目不會自動更新標頭值,並且存取此屬性將始終僅傳回第一個值。
若要取消設定此標頭,請指派
None
或使用del
。變更日誌
Changed in version 2.3: 此屬性可以指派以設定標頭。可以指派清單以設定多個標頭值。使用
del
以取消設定標頭。Changed in version 2.3:
WWWAuthenticate
不再是dict
。token
屬性已針對使用權杖而非參數的驗證挑戰新增。
- response: t.Iterable[str] | t.Iterable[bytes]¶
要作為 WSGI 可迭代物件傳送的回應本文。字串或位元組清單表示固定長度的回應,任何其他可迭代物件都是串流回應。字串會編碼為 UTF-8 位元組。
請勿設定為純字串或位元組,這會導致傳送回應非常低效,因為它會一次迭代一個位元組。
- direct_passthrough¶
直接將回應本文作為 WSGI 可迭代物件傳遞。當本文是二進位檔案或其他位元組迭代器時,可以使用此選項來跳過一些不必要的檢查。使用
send_file()
而不是手動設定此選項。
- autocorrect_location_header = False¶
如果重新導向
Location
標頭是相對 URL,請使其成為絕對 URL,包括方案和網域。變更日誌
Changed in version 2.1: 預設情況下已停用,因此回應將傳送相對重新導向。
在 0.8 版本中新增。
- property max_cookie_size: int¶
唯讀檢視
MAX_COOKIE_SIZE
設定金鑰。請參閱 Werkzeug 文件中的
max_cookie_size
。
工作階段¶
如果您已設定 Flask.secret_key
(或從 SECRET_KEY
設定),則可以在 Flask 應用程式中使用工作階段。工作階段可以記住從一個請求到另一個請求的資訊。Flask 執行此操作的方式是使用簽署的 Cookie。使用者可以查看工作階段內容,但除非他們知道密碼金鑰,否則無法修改它,因此請務必將其設定為複雜且難以猜測的內容。
若要存取目前的工作階段,您可以使用 session
物件
- class flask.session¶
工作階段物件的運作方式與一般 dict 非常相似,不同之處在於它會追蹤修改。
這是一個代理物件。有關更多資訊,請參閱 代理物件的注意事項。
以下屬性很有趣
- new¶
如果工作階段是新的,則為
True
,否則為False
。
- modified¶
如果工作階段物件偵測到修改,則為
True
。請注意,不會自動擷取可變結構的修改,在這種情況下,您必須明確地將屬性設定為True
。以下範例# this change is not picked up because a mutable object (here # a list) is changed. session['objects'].append(42) # so mark it as modified yourself session.modified = True
- permanent¶
如果設定為
True
,則工作階段會持續permanent_session_lifetime
秒。預設值為 31 天。如果設定為False
(預設值),則當使用者關閉瀏覽器時,工作階段將會刪除。
工作階段介面¶
變更日誌
在 0.8 版本中新增。
工作階段介面提供了一種簡單的方式來取代 Flask 正在使用的工作階段實作。
- class flask.sessions.SessionInterface¶
為了取代使用 werkzeug 安全 Cookie 實作的預設工作階段介面,您必須實作的基本介面。您必須實作的唯一方法是
open_session()
和save_session()
,其他方法具有有用的預設值,您不需要變更。由
open_session()
方法傳回的工作階段物件必須提供類似字典的介面,以及來自SessionMixin
的屬性和方法。我們建議僅子類化 dict 並新增該 mixinclass Session(dict, SessionMixin): pass
如果
open_session()
傳回None
,則 Flask 將呼叫make_null_session()
以建立一個工作階段,作為工作階段支援無法運作時的替代方案,因為未滿足某些需求。建立的預設NullSession
類別將會抱怨未設定密碼金鑰。若要取代應用程式上的工作階段介面,您只需指派
flask.Flask.session_interface
app = Flask(__name__) app.session_interface = MySessionInterface()
可以使用相同工作階段傳送和處理多個請求並行處理。在實作新的工作階段介面時,請考慮是否必須同步讀取或寫入備份儲存區。無法保證每個請求的工作階段開啟或儲存順序,它將按照請求開始和結束處理的順序發生。
變更日誌
在 0.8 版本中新增。
- null_session_class¶
make_null_session()
將在此處尋找在請求 Null 工作階段時應建立的類別。同樣地,is_null_session()
方法將對此類型執行類型檢查。NullSession
的別名
- pickle_based = False¶
一個旗標,指示工作階段介面是否以 pickle 為基礎。Flask 擴充功能可以使用此旗標來決定如何處理工作階段物件。
變更日誌
Added in version 0.10.
- make_null_session(app)¶
建立一個 Null 工作階段,如果由於組態錯誤而無法載入實際的工作階段支援,則該工作階段會作為替代物件。這主要有助於使用者體驗,因為 Null 工作階段的工作仍然是支援查閱而不抱怨,但修改會以關於哪裡失敗的有用錯誤訊息回覆。
這預設會建立
null_session_class
的執行個體。- 參數:
app ( Flask )
- 回傳類型:
- is_null_session(obj)¶
檢查給定的物件是否為 Null 工作階段。Null 工作階段不會被要求儲存。
這預設會檢查物件是否為
null_session_class
的執行個體。
- get_cookie_name(app)¶
工作階段 Cookie 的名稱。使用 ``app.config[“SESSION_COOKIE_NAME”]``。
- get_cookie_domain(app)¶
工作階段 Cookie 上
Domain
參數的值。如果未設定,瀏覽器將僅將 Cookie 傳送到設定它的確切網域。否則,它們也會將其傳送到給定值的任何子網域。使用
SESSION_COOKIE_DOMAIN
設定。變更日誌
Changed in version 2.3: 預設情況下未設定,不會回溯到
SERVER_NAME
。
- get_cookie_path(app)¶
傳回 Cookie 應有效的路徑。預設實作會使用
SESSION_COOKIE_PATH
設定變數中的值 (如果已設定),並回溯到APPLICATION_ROOT
,如果為None
,則使用/
。
- get_cookie_httponly(app)¶
如果工作階段 Cookie 應為 httponly,則傳回 True。目前僅傳回
SESSION_COOKIE_HTTPONLY
設定變數的值。
- get_cookie_secure(app)¶
如果 Cookie 應為安全,則傳回 True。目前僅傳回
SESSION_COOKIE_SECURE
設定的值。
- get_cookie_samesite(app)¶
如果 Cookie 應使用
SameSite
屬性,則傳回'Strict'
或'Lax'
。目前僅傳回SESSION_COOKIE_SAMESITE
設定的值。
- get_cookie_partitioned(app)¶
如果 Cookie 應為已分割,則傳回 True。預設情況下,使用
SESSION_COOKIE_PARTITIONED
的值。Added in version 3.1.
- get_expiration_time(app, session)¶
一個協助程式方法,傳回工作階段的到期日,如果工作階段連結到瀏覽器工作階段,則傳回
None
。預設實作傳回現在 + 應用程式上設定的永久工作階段生命週期。- 參數:
app ( Flask )
session ( SessionMixin )
- 回傳類型:
datetime | None
- should_set_cookie(app, session)¶
工作階段後端使用此方法來判斷是否應為此回應的工作階段 Cookie 設定
Set-Cookie
標頭。如果工作階段已修改,則會設定 Cookie。如果工作階段是永久性的,並且SESSION_REFRESH_EACH_REQUEST
設定為 true,則始終會設定 Cookie。如果工作階段已刪除,則通常會略過此檢查。
變更日誌
在 0.11 版本中新增。
- 參數:
app ( Flask )
session ( SessionMixin )
- 回傳類型:
- open_session(app, request)¶
這會在每個請求開始時呼叫,在推送請求內容之後,在比對 URL 之前。
這必須傳回一個物件,該物件實作類似字典的介面以及
SessionMixin
介面。這將傳回
None
,以指示載入在某些方面失敗,但並非立即錯誤。在這種情況下,請求內容將回溯為使用make_null_session()
。- 參數:
- 回傳類型:
SessionMixin | None
- save_session(app, session, response)¶
這會在每個請求結束時呼叫,在產生回應之後,在移除請求內容之前。如果
is_null_session()
傳回True
,則會略過此呼叫。- 參數:
app ( Flask )
session ( SessionMixin )
response ( Response )
- 回傳類型:
None
- class flask.sessions.SecureCookieSessionInterface¶
預設工作階段介面,透過
itsdangerous
模組將工作階段儲存在簽署的 Cookie 中。- salt = 'cookie-session'¶
鹽,應套用在密碼金鑰之上,以用於簽署以 Cookie 為基礎的工作階段。
- key_derivation = 'hmac'¶
itsdangerous 支援的金鑰衍生名稱。預設值為 hmac。
- serializer = <flask.json.tag.TaggedJSONSerializer object>¶
用於酬載的 Python 序列化程式。預設值是緊湊的 JSON 衍生序列化程式,支援一些額外的 Python 類型,例如 datetime 物件或元組。
- session_class¶
- open_session(app, request)¶
這會在每個請求開始時呼叫,在推送請求內容之後,在比對 URL 之前。
這必須傳回一個物件,該物件實作類似字典的介面以及
SessionMixin
介面。這將傳回
None
,以指示載入在某些方面失敗,但並非立即錯誤。在這種情況下,請求內容將回溯為使用make_null_session()
。- 參數:
- 回傳類型:
SecureCookieSession | None
- save_session(app, session, response)¶
此方法在每個請求結束時呼叫,在產生回應之後,移除請求上下文之前。如果
is_null_session()
返回True
,則會跳過此方法。- 參數:
app ( Flask )
session ( SessionMixin )
response ( Response )
- 回傳類型:
None
- class flask.sessions.SecureCookieSession(initial=None)¶
基於簽名 Cookie 的 Session 基底類別。
此 session 後端將設定
modified
和accessed
屬性。它無法可靠地追蹤 session 是新的(相對於空的),因此new
仍然硬式編碼為False
。- modified = False¶
當資料變更時,此屬性會設定為
True
。僅追蹤 session 字典本身;如果 session 包含可變資料(例如巢狀字典),則在修改該資料時,必須手動將此屬性設定為True
。只有當此屬性為True
時,session Cookie 才會寫入回應。
- accessed = False¶
標頭,允許快取 Proxy 為不同的使用者快取不同的頁面。
- class flask.sessions.NullSession(initial=None)¶
用於在 session 無法使用時產生更友善的錯誤訊息的類別。仍然允許對空的 session 進行唯讀存取,但在設定時會失敗。
- pop(k[, d]) v, remove specified key and return the corresponding value. ¶
如果找不到鍵,則傳回預設值(如果已給定);否則,引發 KeyError。
- popitem(*args, **kwargs)¶
移除並傳回 (鍵, 值) 組,作為 2-tuple。
組以 LIFO(後進先出)順序傳回。如果字典為空,則引發 KeyError。
- update([E, ]**F) None. Update D from dict/iterable E and F. ¶
如果 E 存在且具有 .keys() 方法,則執行:for k in E: D[k] = E[k] 如果 E 存在且缺少 .keys() 方法,則執行:for k, v in E: D[k] = v 在任一情況下,接著執行:for k in F: D[k] = F[k]
- class flask.sessions.SessionMixin¶
使用 session 屬性擴充基本字典。
- modified = True¶
某些實作可以偵測到 session 的變更,並在發生變更時設定此屬性。mixin 預設值硬式編碼為
True
。
- accessed = True¶
某些實作可以偵測到何時讀取或寫入 session 資料,並在發生時設定此屬性。mixin 預設值硬式編碼為
True
。
注意
PERMANENT_SESSION_LIFETIME
設定可以是整數或 timedelta
。permanent_session_lifetime
屬性始終是 timedelta
。
測試用戶端¶
- class flask.testing.FlaskClient(*args, **kwargs)¶
運作方式類似於一般的 Werkzeug 測試用戶端,但了解 Flask 的上下文,以便將請求上下文的清理延遲到
with
區塊的末尾。關於如何使用此類別的通用資訊,請參閱werkzeug.test.Client
。變更日誌
Changed in version 0.12:
app.test_client()
包含預設環境,可以在client.environ_base
中實例化app.test_client()
物件後設定。基本用法在 測試 Flask 應用程式 章節中概述。
- 參數:
args (t.Any)
kwargs (t.Any)
- session_transaction(*args, **kwargs)¶
當與
with
語句結合使用時,這會開啟一個 session 事務。這可用於修改測試用戶端使用的 session。一旦離開with
區塊,session 將儲存回去。with client.session_transaction() as session: session['value'] = 42
在內部,這是通過臨時測試請求上下文實現的,並且由於 session 處理可能取決於請求變數,因此此函數接受與
test_request_context()
相同的參數,這些參數會直接傳遞。- 參數:
- 回傳類型:
- open(*args, buffered=False, follow_redirects=False, **kwargs)¶
從給定的引數產生一個 environ 字典,使用它向應用程式發出請求,並傳回回應。
- 參數:
- 回傳類型:
TestResponse
變更日誌
Changed in version 2.1: 移除
as_tuple
參數。Changed in version 2.0: 在呼叫
response.close()
時關閉請求輸入流。重定向的輸入流會自動關閉。Changed in version 0.5: 如果在
data
參數的字典中,將字典作為檔案提供,則內容類型必須稱為content_type
而不是mimetype
。此變更是為了與werkzeug.FileWrapper
保持一致。Changed in version 0.5: 新增
follow_redirects
參數。
測試 CLI 執行器¶
- class flask.testing.FlaskCliRunner(app, **kwargs)¶
用於測試 Flask 應用程式 CLI 命令的
CliRunner
。通常使用test_cli_runner()
建立。請參閱 使用 CLI 執行器執行命令。- 參數:
app ( Flask )
kwargs (t.Any)
- invoke(cli=None, args=None, **kwargs)¶
在隔離的環境中調用 CLI 命令。有關完整的方法文件,請參閱
CliRunner.invoke
。有關範例,請參閱 使用 CLI 執行器執行命令。如果未給定
obj
引數,則傳遞ScriptInfo
的實例,該實例知道如何載入正在測試的 Flask 應用程式。
應用程式全域變數¶
為了在請求期間從一個函數到另一個函數共享資料,全域變數是不夠好的,因為它會在多執行緒環境中中斷。 Flask 為您提供了一個特殊的物件,確保它僅對活動請求有效,並且每個請求都將傳回不同的值。簡而言之:它做了正確的事情,就像對待 request
和 session
一樣。
- flask.g¶
一個命名空間物件,可以在 應用程式上下文 期間儲存資料。這是
Flask.app_ctx_globals_class
的實例,預設為ctx._AppCtxGlobals
。這是請求期間儲存資源的好地方。例如,
before_request
函數可以從 session ID 載入使用者物件,然後設定g.user
以在視圖函數中使用。這是一個代理物件。有關更多資訊,請參閱 代理物件的注意事項。
變更日誌
Changed in version 0.10: 綁定到應用程式上下文而不是請求上下文。
- class flask.ctx._AppCtxGlobals¶
一個純物件。用作在應用程式上下文期間儲存資料的命名空間。
建立應用程式上下文會自動建立此物件,該物件作為
g
Proxy 提供。- 'key' in g
檢查屬性是否存在。
變更日誌
Added in version 0.10.
- iter(g)
傳回屬性名稱的迭代器。
變更日誌
Added in version 0.10.
- get(name, default=None)¶
依名稱取得屬性,或取得預設值。類似於
dict.get()
。變更日誌
Added in version 0.10.
- pop(name, default=_sentinel)¶
依名稱取得並移除屬性。類似於
dict.pop()
。變更日誌
在 0.11 版本中新增。
- setdefault(name, default=None)¶
如果屬性存在,則取得其值,否則設定並傳回預設值。類似於
dict.setdefault()
。變更日誌
在 0.11 版本中新增。
實用函數和類別¶
- flask.current_app¶
目前請求的應用程式的 Proxy。這在不需要匯入應用程式,或者在無法匯入應用程式時(例如在使用應用程式工廠模式或在 Blueprint 和擴充套件中)存取應用程式時非常有用。
這僅在推送 應用程式上下文 時可用。這會在請求和 CLI 命令期間自動發生。可以使用
app_context()
手動控制。這是一個代理物件。有關更多資訊,請參閱 代理物件的注意事項。
- flask.has_request_context()¶
如果您有程式碼想要測試請求上下文是否存在,則可以使用此函數。例如,您可能希望在請求物件可用時利用請求資訊,但在不可用時靜默失敗。
class User(db.Model): def __init__(self, username, remote_addr=None): self.username = username if remote_addr is None and has_request_context(): remote_addr = request.remote_addr self.remote_addr = remote_addr
或者,您也可以僅測試任何上下文綁定的物件(例如
request
或g
)的真值class User(db.Model): def __init__(self, username, remote_addr=None): self.username = username if remote_addr is None and request: remote_addr = request.remote_addr self.remote_addr = remote_addr
變更日誌
Added in version 0.7.
- 回傳類型:
- flask.copy_current_request_context(f)¶
一個裝飾函數以保留目前請求上下文的輔助函數。這在使用 Greenlet 時非常有用。裝飾函數的那一刻,就會建立請求上下文的副本,然後在呼叫函數時推送。目前的 session 也包含在複製的請求上下文中。
範例
import gevent from flask import copy_current_request_context @app.route('/') def index(): @copy_current_request_context def do_some_work(): # do some work here, it can access flask.request or # flask.session like you would otherwise in the view function. ... gevent.spawn(do_some_work) return 'Regular response'
變更日誌
Added in version 0.10.
- 參數:
f (F)
- 回傳類型:
F
- flask.has_app_context()¶
運作方式類似於
has_request_context()
,但適用於應用程式上下文。您也可以直接對current_app
物件執行布林檢查。變更日誌
在 0.9 版本中新增。
- 回傳類型:
- flask.url_for(endpoint, *, _anchor=None, _method=None, _scheme=None, _external=None, **values)¶
使用給定的值,為給定的端點產生 URL。
這需要活動的請求或應用程式上下文,並呼叫
current_app.url_for()
。請參閱該方法以取得完整文件。- 參數:
endpoint (str) – 與要產生的 URL 關聯的端點名稱。如果這以
.
開頭,將會使用目前的藍圖名稱(如果有的話)。_anchor (str | None) – 如果給定,將其作為
#anchor
附加到 URL。_method (str | None) – 如果給定,則為端點產生與此方法關聯的 URL。
_scheme (str | None) – 如果給定,如果 URL 是外部的,則將具有此 scheme。
_external (bool | None) – 如果給定,則偏好 URL 為內部 (False) 或要求其為外部 (True)。外部 URL 包含 scheme 和 domain。當不在活動請求中時,URL 預設為外部的。
values (Any) – 用於 URL 規則的可變部分的數值。未知的鍵會附加為查詢字串引數,例如
?a=b&c=d
。
- 回傳類型:
變更日誌
Changed in version 2.2: 呼叫
current_app.url_for
,允許應用程式覆寫行為。Changed in version 0.10: 新增
_scheme
參數。Changed in version 0.9: 新增
_anchor
和_method
參數。Changed in version 0.9: 在建置錯誤時呼叫
app.handle_url_build_error
。
- flask.abort(code, *args, **kwargs)¶
引發給定狀態碼的
HTTPException
異常。如果
current_app
可用,它將調用其aborter
物件,否則它將使用werkzeug.exceptions.abort()
。- 參數:
code (int | Response) – 異常的狀態碼,必須在
app.aborter
中註冊。args (Any) – 傳遞給異常的參數。
kwargs (Any) – 傳遞給異常的關鍵字參數。
- 回傳類型:
變更日誌
Added in version 2.2:
current_app.aborter
可用時會調用它,而不是總是使用 Werkzeug 的預設abort
。(版本 2.2 新增)
- flask.redirect(location, code=302, Response=None)¶
建立重新導向回應物件。
如果
current_app
可用,它將使用其redirect()
方法,否則它將使用werkzeug.utils.redirect()
。- 參數:
- 回傳類型:
變更日誌
Added in version 2.2:
current_app.redirect
可用時會調用它,而不是總是使用 Werkzeug 的預設redirect
。(版本 2.2 新增)
- flask.make_response(*args)¶
有時需要在視圖中設定額外的標頭。由於視圖不必返回 response 物件,而是可以返回一個值,該值會被 Flask 本身轉換為 response 物件,因此很難將標頭添加到其中。可以調用此函式來代替使用 return,您將獲得一個 response 物件,您可以用它來附加標頭。
如果視圖看起來像這樣,並且您想要新增一個新的標頭
def index(): return render_template('index.html', foo=42)
您現在可以這樣做
def index(): response = make_response(render_template('index.html', foo=42)) response.headers['X-Parachutes'] = 'parachutes are cool' return response
此函式接受您可以從視圖函式返回的完全相同的參數。例如,這會建立一個帶有 404 錯誤代碼的 response
response = make_response(render_template('not_found.html'), 404)
此函式的另一個用例是強制將視圖函式的返回值轉換為 response,這對視圖裝飾器很有用
response = make_response(view_function()) response.headers['X-Parachutes'] = 'parachutes are cool'
在內部,此函式執行以下操作
如果沒有傳遞任何參數,它會建立一個新的 response 參數
如果傳遞一個參數,則使用它調用
flask.Flask.make_response()
。如果傳遞多個參數,則這些參數將作為元組傳遞給
flask.Flask.make_response()
函式。
變更日誌
在 0.6 版本中新增。
- 參數:
args (t.Any)
- 回傳類型:
- flask.after_this_request(f)¶
在此請求之後執行一個函式。這對於修改 response 物件很有用。該函式會傳遞 response 物件,並且必須返回相同的或新的物件。
範例
@app.route('/') def index(): @after_this_request def add_header(response): response.headers['X-Foo'] = 'Parachute' return response return 'Hello World!'
如果除了視圖函式之外的其他函式想要修改 response,這會更有用。例如,考慮一個想要新增一些標頭而不將返回值轉換為 response 物件的裝飾器。
變更日誌
在 0.9 版本中新增。
- 參數:
f (Callable[[Any], Any] | Callable[[Any], Awaitable[Any]])
- 回傳類型:
Callable[[Any], Any] | Callable[[Any], Awaitable[Any]]
- flask.send_file(path_or_file, mimetype=None, as_attachment=False, download_name=None, conditional=True, etag=True, last_modified=None, max_age=None)¶
將檔案內容傳送給客戶端。
第一個參數可以是檔案路徑或類檔案物件。在大多數情況下,檔案路徑是首選,因為 Werkzeug 可以管理檔案並從路徑中取得額外資訊。傳遞類檔案物件需要以二進制模式開啟檔案,並且主要在記憶體中使用
io.BytesIO
建構檔案時很有用。永遠不要傳遞使用者提供的檔案路徑。該路徑被假定為受信任的,因此使用者可能會精心製作一個路徑來存取您不打算提供的檔案。使用
send_from_directory()
從目錄中安全地提供使用者請求的路徑。如果 WSGI 伺服器在
environ
中設定了file_wrapper
,則會使用它,否則會使用 Werkzeug 的內建 wrapper。或者,如果 HTTP 伺服器支援X-Sendfile
,則使用USE_X_SENDFILE = True
配置 Flask 將告訴伺服器傳送給定的路徑,這比在 Python 中讀取它更有效率。- 參數:
path_or_file (os.PathLike[t.AnyStr] | str | t.BinaryIO) – 要傳送的檔案路徑,如果給定相對路徑,則相對於當前工作目錄。或者,以二進制模式開啟的類檔案物件。請確保檔案指標已定位到資料的開頭。
mimetype (str | None) – 要為檔案傳送的 MIME 類型。如果未提供,它將嘗試從檔案名稱中偵測。
as_attachment (bool) – 向瀏覽器指示它應該提供儲存檔案而不是顯示檔案。
download_name (str | None) – 瀏覽器儲存檔案時將使用的預設名稱。預設為傳遞的檔案名稱。
conditional (bool) – 根據請求標頭啟用條件式和範圍 response。需要傳遞檔案路徑和
environ
。etag (bool | str) – 計算檔案的 ETag,這需要傳遞檔案路徑。也可以是要使用的字串。
last_modified (datetime | int | float | None) – 要為檔案傳送的最後修改時間,以秒為單位。如果未提供,它將嘗試從檔案路徑中偵測。
max_age (None | (int | t.Callable[[str | None], int | None])) – 客戶端應該快取檔案多久,以秒為單位。如果設定,
Cache-Control
將為public
,否則將為no-cache
以優先考慮條件式快取。
- 回傳類型:
變更日誌
Changed in version 2.0:
download_name
取代了attachment_filename
參數。如果as_attachment=False
,則會與Content-Disposition: inline
一起傳遞。(版本 2.0 變更)Changed in version 2.0:
max_age
取代了cache_timeout
參數。conditional
預設為啟用,且max_age
未設定。(版本 2.0 變更)Changed in version 2.0:
etag
取代了add_etags
參數。它可以是要使用的字串,而不是產生一個。(版本 2.0 變更)Changed in version 2.0: 傳遞繼承自
TextIOBase
的類檔案物件將引發ValueError
,而不是傳送空檔案。(版本 2.0 變更)Added in version 2.0: 將實作移至 Werkzeug。現在這是一個 wrapper,用於傳遞一些 Flask 特定的參數。(版本 2.0 新增)
Changed in version 1.1:
filename
可以是PathLike
物件。(版本 1.1 變更)Changed in version 1.1: 傳遞
BytesIO
物件支援範圍請求。(版本 1.1 變更)Changed in version 1.0.3: 為了更廣泛地與 WSGI 伺服器相容,檔案名稱使用 ASCII 而不是 Latin-1 編碼。(版本 1.0.3 變更)
Changed in version 1.0: 支援 RFC 2231 中指定的 UTF-8 檔案名稱。(版本 1.0 變更)
Changed in version 0.12: 檔案名稱不再從檔案物件自動推斷。如果您想使用自動 MIME 和 etag 支援,請透過
filename_or_fp
或attachment_filename
傳遞檔案名稱。(版本 0.12 變更)Changed in version 0.12: 對於 MIME 偵測,
attachment_filename
優先於filename
。(版本 0.12 變更)Changed in version 0.9:
cache_timeout
預設為Flask.get_send_file_max_age()
。(版本 0.9 變更)Changed in version 0.7: 移除了類檔案物件的 MIME 猜測和 etag 支援,因為它不可靠。如果您可以,請傳遞檔案名稱,否則請自行附加 etag。(版本 0.7 變更)
Changed in version 0.5: 新增了
add_etags
、cache_timeout
和conditional
參數。預設行為是新增 etag。(版本 0.5 變更)版本 0.2 新增。
- flask.send_from_directory(directory, path, **kwargs)¶
使用
send_file()
從目錄中傳送檔案。@app.route("/uploads/<path:name>") def download_file(name): return send_from_directory( app.config['UPLOAD_FOLDER'], name, as_attachment=True )
這是從資料夾(例如靜態檔案或上傳檔案)提供檔案的安全方法。使用
safe_join()
以確保來自客戶端的路徑不是惡意製作的,以指向指定目錄之外。如果最終路徑未指向現有的常規檔案,則會引發 404
NotFound
錯誤。- 參數:
directory (os.PathLike[str] | str) –
path
必須位於其下的目錄,相對於當前應用程式的根路徑。這絕不能是由客戶端提供的值,否則會變得不安全。path (os.PathLike[str] | str) – 要傳送的檔案路徑,相對於
directory
。kwargs (t.Any) – 要傳遞給
send_file()
的參數。
- 回傳類型:
變更日誌
Changed in version 2.0:
path
取代了filename
參數。(版本 2.0 變更)Added in version 2.0: 將實作移至 Werkzeug。現在這是一個 wrapper,用於傳遞一些 Flask 特定的參數。(版本 2.0 新增)
在 0.5 版本中新增。
訊息快閃¶
- flask.flash(message, category='message')¶
將訊息快閃到下一個請求。為了從 session 中移除快閃訊息並將其顯示給使用者,範本必須調用
get_flashed_messages()
。變更日誌
Changed in version 0.3: 新增了
category
參數。(版本 0.3 變更)- 參數:
message (str) – 要快閃的訊息。
category (str) – 訊息的類別。建議使用以下值:
'message'
用於任何類型的訊息,'error'
用於錯誤,'info'
用於資訊訊息,'warning'
用於警告。但是,任何類型的字串都可以用作類別。
- 回傳類型:
None
- flask.get_flashed_messages(with_categories=False, category_filter=())¶
從 session 中拉取所有快閃訊息並返回它們。在同一個請求中進一步調用該函式將返回相同的訊息。預設情況下,僅返回訊息,但是當
with_categories
設定為True
時,返回值將是一個元組列表,格式為(category, message)
。透過在
category_filter
中提供這些類別,將快閃訊息篩選為一個或多個類別。這允許在單獨的 html 區塊中渲染類別。with_categories
和category_filter
參數是不同的with_categories
控制是否將類別與訊息文字一起返回(True
給出元組,其中False
僅給出訊息文字)。category_filter
將訊息篩選為僅與提供的類別匹配的訊息。
有關範例,請參閱 訊息快閃。
變更日誌
Changed in version 0.9: 新增了
category_filter
參數。(版本 0.9 變更)Changed in version 0.3: 新增了
with_categories
參數。(版本 0.3 變更)
JSON 支援¶
Flask 預設使用 Python 內建的 json
模組來處理 JSON。可以透過將不同的提供者分配給 flask.Flask.json_provider_class
或 flask.Flask.json
來變更 JSON 實作。flask.json
提供的函式將在應用程式上下文處於活動狀態時使用 app.json
上的方法。
Jinja 的 |tojson
篩選器配置為使用應用程式的 JSON 提供者。該篩選器使用 |safe
標記輸出。使用它來渲染 HTML <script>
標籤內部的資料。
<script>
const names = {{ names|tojson }};
renderChart(names, {{ axis_data|tojson }});
</script>
- flask.json.jsonify(*args, **kwargs)¶
將給定的參數序列化為 JSON,並返回帶有
application/json
mimetype 的Response
物件。從視圖返回的 dict 或 list 將自動轉換為 JSON response,而無需調用此函式。這需要活動的請求或應用程式上下文,並調用
app.json.response()
。在 debug 模式下,輸出會使用縮排進行格式化,使其更易於閱讀。這也可以由提供者控制。
可以給定位置參數或關鍵字參數,但不能同時給定兩者。如果未給定任何參數,則會序列化
None
。- 參數:
args (t.Any) – 要序列化的單個值,或要視為要序列化的列表的多個值。
kwargs (t.Any) – 視為要序列化的 dict。
- 回傳類型:
變更日誌
Changed in version 2.2: 調用
current_app.json.response
,允許應用程式覆蓋行為。(版本 2.2 變更)Changed in version 2.0.2:
decimal.Decimal
透過轉換為字串來支援。(版本 2.0.2 變更)Changed in version 0.11: 新增了對序列化頂層陣列的支援。這在舊版瀏覽器中存在安全風險。請參閱 JSON 安全性。(版本 0.11 變更)
版本 0.2 新增。
- flask.json.dumps(obj, **kwargs)¶
將資料序列化為 JSON。
如果
current_app
可用,它將使用其app.json.dumps()
方法,否則它將使用json.dumps()
。- 參數:
obj (Any) – 要序列化的資料。
kwargs (Any) – 傳遞給
dumps
實作的參數。
- 回傳類型:
變更日誌
Changed in version 2.3: 移除了
app
參數。(版本 2.3 變更)Changed in version 2.2: 調用
current_app.json.dumps
,允許應用程式覆蓋行為。(版本 2.2 變更)Changed in version 2.0.2:
decimal.Decimal
透過轉換為字串來支援。(版本 2.0.2 變更)Changed in version 2.0:
encoding
將在 Flask 2.1 中移除。(版本 2.0 變更)Changed in version 1.0.3: 可以直接傳遞
app
,而無需應用程式上下文進行配置。(版本 1.0.3 變更)
- flask.json.dump(obj, fp, **kwargs)¶
將資料序列化為 JSON 並寫入檔案。
如果
current_app
可用,它將使用其app.json.dump()
方法,否則它將使用json.dump()
。- 參數:
obj (Any) – 要序列化的資料。
fp (IO[str]) – 為寫入文字而開啟的檔案。應使用 UTF-8 編碼以使其成為有效的 JSON。
kwargs (Any) – 傳遞給
dump
實作的引數。
- 回傳類型:
None
變更日誌
Changed in version 2.3: 移除了
app
參數。(版本 2.3 變更)版本變更自 2.2:呼叫
current_app.json.dump
,允許應用程式覆寫此行為。版本變更自 2.0:寫入二進制檔案以及
encoding
引數將在 Flask 2.1 中移除。
- flask.json.loads(s, **kwargs)¶
將資料反序列化為 JSON 格式。
如果
current_app
可用,將會使用其app.json.loads()
方法,否則將使用json.loads()
。變更日誌
Changed in version 2.3: 移除了
app
參數。(版本 2.3 變更)版本變更自 2.2:呼叫
current_app.json.loads
,允許應用程式覆寫此行為。版本變更自 2.0:
encoding
將在 Flask 2.1 中移除。資料必須是字串或 UTF-8 位元組。Changed in version 1.0.3: 可以直接傳遞
app
,而無需應用程式上下文進行配置。(版本 1.0.3 變更)
- flask.json.load(fp, **kwargs)¶
從檔案讀取資料,並將其反序列化為 JSON 格式。
如果
current_app
可用,將會使用其app.json.load()
方法,否則將使用json.load()
。變更日誌
Changed in version 2.3: 移除了
app
參數。(版本 2.3 變更)版本變更自 2.2:呼叫
current_app.json.load
,允許應用程式覆寫此行為。版本變更自 2.2:
app
參數將在 Flask 2.3 中移除。版本變更自 2.0:
encoding
將在 Flask 2.1 中移除。檔案必須是文字模式,或是具有 UTF-8 位元組的二進制模式。
- class flask.json.provider.JSONProvider(app)¶
應用程式的標準 JSON 操作集合。這個類別的子類別可以用來自訂 JSON 行為或使用不同的 JSON 函式庫。
若要為特定的函式庫實作提供者,請繼承這個基底類別,並至少實作
dumps()
和loads()
。所有其他方法都有預設實作。若要使用不同的提供者,可以繼承
Flask
並將json_provider_class
設定為提供者類別,或者將app.json
設定為該類別的實例。- 參數:
app (App) – 應用程式實例。這將會以
weakref.proxy
形式儲存在_app
屬性上。
變更日誌
在 2.2 版本中新增。
- dumps(obj, **kwargs)¶
將資料序列化為 JSON。
- dump(obj, fp, **kwargs)¶
將資料序列化為 JSON 並寫入檔案。
- 參數:
obj (Any) – 要序列化的資料。
fp (IO[str]) – 為寫入文字而開啟的檔案。應使用 UTF-8 編碼以使其成為有效的 JSON。
kwargs (Any) – 可能會傳遞給底層的 JSON 函式庫。
- 回傳類型:
None
- loads(s, **kwargs)¶
將資料反序列化為 JSON 格式。
- load(fp, **kwargs)¶
從檔案讀取資料,並將其反序列化為 JSON 格式。
- class flask.json.provider.DefaultJSONProvider(app)¶
使用 Python 內建的
json
函式庫提供 JSON 操作。序列化以下額外的資料類型datetime.datetime
和datetime.date
會序列化為 RFC 822 字串。這與 HTTP 日期格式相同。uuid.UUID
會序列化為字串。dataclasses.dataclass
會傳遞至dataclasses.asdict()
。Markup
(或任何具有__html__
方法的物件) 將會呼叫__html__
方法以取得字串。
- 參數:
app (App)
- static default(o)¶
將此函式套用至任何
json.dumps()
不知道如何序列化的物件。它應該傳回有效的 JSON 類型或引發TypeError
。
- ensure_ascii = True¶
將非 ASCII 字元取代為跳脫序列。這可能與某些用戶端更相容,但可以停用以獲得更好的效能和大小。
- sort_keys = True¶
排序任何序列化字典中的鍵。這可能對某些快取情況很有用,但可以停用以獲得更好的效能。啟用時,鍵必須全部都是字串,它們在排序之前不會被轉換。
- compact: bool | None = None¶
如果
True
,或在非偵錯模式下為None
,response()
輸出將不會新增縮排、換行符號或空格。如果False
,或在偵錯模式下為None
,它將會使用非精簡表示法。
- mimetype = 'application/json'¶
在
response()
中設定的 mimetype。
- dumps(obj, **kwargs)¶
將資料序列化為 JSON 字串。
關鍵字引數會傳遞給
json.dumps()
。從default
、ensure_ascii
和sort_keys
屬性設定一些參數預設值。- 參數:
obj (Any) – 要序列化的資料。
kwargs (Any) – 傳遞至
json.dumps()
。
- 回傳類型:
- loads(s, **kwargs)¶
從字串或位元組將資料反序列化為 JSON 格式。
- 參數:
kwargs (Any) – 傳遞至
json.loads()
。
- 回傳類型:
標籤化 JSON¶
用於無損序列化非標準 JSON 類型的精簡表示法。SecureCookieSessionInterface
使用它來序列化 session 資料,但它在其他地方也可能很有用。它可以擴充以支援其他類型。
- class flask.json.tag.TaggedJSONSerializer¶
使用標籤系統來精簡表示非 JSON 類型的物件的序列化器。作為中介序列化器傳遞給
itsdangerous.Serializer
。支援以下額外類型
- default_tags = [<class 'flask.json.tag.TagDict'>, <class 'flask.json.tag.PassDict'>, <class 'flask.json.tag.TagTuple'>, <class 'flask.json.tag.PassList'>, <class 'flask.json.tag.TagBytes'>, <class 'flask.json.tag.TagMarkup'>, <class 'flask.json.tag.TagUUID'>, <class 'flask.json.tag.TagDateTime'>]¶
建立序列化器時要綁定的標籤類別。可以使用
register()
在稍後新增其他標籤。
- register(tag_class, force=False, index=None)¶
向此序列化器註冊新的標籤。
- class flask.json.tag.JSONTag(serializer)¶
TaggedJSONSerializer
的類型標籤定義的基底類別。- 參數:
serializer (TaggedJSONSerializer)
讓我們來看一個範例,新增對 OrderedDict
的支援。字典在 JSON 中沒有順序,因此為了處理這個問題,我們將項目傾印為 [key, value]
配對的列表。繼承 JSONTag
並給它新的鍵 ' od'
以識別類型。session 序列化器首先處理字典,因此將新標籤插入順序的前面,因為 OrderedDict
必須在 dict
之前處理。
from flask.json.tag import JSONTag
class TagOrderedDict(JSONTag):
__slots__ = ('serializer',)
key = ' od'
def check(self, value):
return isinstance(value, OrderedDict)
def to_json(self, value):
return [[k, self.serializer.tag(v)] for k, v in iteritems(value)]
def to_python(self, value):
return OrderedDict(value)
app.session_interface.serializer.register(TagOrderedDict, index=0)
模板渲染¶
- flask.render_template(template_name_or_list, **context)¶
使用給定的上下文渲染指定名稱的模板。
- flask.render_template_string(source, **context)¶
使用給定的上下文從給定的原始碼字串渲染模板。
- flask.stream_template(template_name_or_list, **context)¶
使用給定的上下文以串流方式渲染指定名稱的模板。這會傳回字串的迭代器,可以用作視圖的串流回應。
- 參數:
- 回傳類型:
變更日誌
在 2.2 版本中新增。
- flask.stream_template_string(source, **context)¶
使用給定的上下文以串流方式從給定的原始碼字串渲染模板。這會傳回字串的迭代器,可以用作視圖的串流回應。
變更日誌
在 2.2 版本中新增。
- flask.get_template_attribute(template_name, attribute)¶
載入模板匯出的巨集(或變數)。這可以用於從 Python 程式碼中調用巨集。例如,如果您有一個名為
_cider.html
的模板,其內容如下{% macro hello(name) %}Hello {{ name }}!{% endmacro %}
您可以像這樣從 Python 程式碼存取它
hello = get_template_attribute('_cider.html', 'hello') return hello('World')
變更日誌
版本 0.2 新增。
設定¶
- class flask.Config(root_path, defaults=None)¶
完全如同字典般運作,但提供從檔案或特殊字典填充內容的方法。有兩種常見的模式來填充設定。
您可以從設定檔填充設定
app.config.from_pyfile('yourconfig.cfg')
或者,您可以在呼叫
from_object()
的模組中定義組態選項,或提供應載入模組的匯入路徑。也可以告知它使用相同的模組,並在呼叫之前提供組態值DEBUG = True SECRET_KEY = 'development key' app.config.from_object(__name__)
在這兩種情況下(從任何 Python 檔案載入或從模組載入),只有大寫鍵會被新增到設定中。這使得可以在設定檔中使用小寫值作為不會新增到設定的暫時值,或在實作應用程式的同一個檔案中定義設定鍵。
可能最有趣的載入設定方式是從指向檔案的環境變數載入
app.config.from_envvar('YOURAPPLICATION_SETTINGS')
在這種情況下,在啟動應用程式之前,您必須將此環境變數設定為您想要使用的檔案。在 Linux 和 OS X 上,使用 export 陳述式
export YOURAPPLICATION_SETTINGS='/path/to/config/file'
在 Windows 上,請改用
set
。- 參數:
- from_envvar(variable_name, silent=False)¶
從指向組態檔的環境變數載入組態。這基本上只是一個捷徑,對於這行程式碼提供了更友善的錯誤訊息
app.config.from_pyfile(os.environ['YOURAPPLICATION_SETTINGS'])
- from_prefixed_env(prefix='FLASK', *, loads=json.loads)¶
載入任何以
FLASK_
開頭的環境變數,從環境鍵中刪除前綴作為設定鍵。值會透過載入函數傳遞,嘗試將它們轉換為比字串更特定的類型。鍵以
sorted()
順序載入。預設載入函數嘗試將值解析為任何有效的 JSON 類型,包括字典和列表。
巢狀字典中的特定項目可以使用雙底線 (
__
) 分隔鍵來設定。如果中繼鍵不存在,它將被初始化為空字典。- 參數:
prefix (str) – 載入以此前綴開頭的環境變數,以底線 (
_
) 分隔。loads (Callable[[str], Any]) – 將每個字串值傳遞給此函數,並使用傳回值作為設定值。如果引發任何錯誤,則會忽略該錯誤,並且值保持為字串。預設值為
json.loads()
。
- 回傳類型:
變更日誌
在 2.1 版本中新增。
- from_pyfile(filename, silent=False)¶
從 Python 檔案更新設定中的值。此函數的行為就像檔案被作為模組匯入,並使用
from_object()
函數一樣。- 參數:
- Returns:
True
如果檔案成功載入。- 回傳類型:
變更日誌
在 0.7 版本中新增:
silent
參數。
- from_object(obj)¶
從給定的物件更新值。物件可以是以下兩種型別之一
字串:在這種情況下,將匯入具有該名稱的物件
實際物件參考:直接使用該物件
物件通常是模組或類別。
from_object()
僅載入模組/類別的大寫屬性。dict
物件不適用於from_object()
,因為dict
的鍵不是dict
類別的屬性。基於模組的設定範例
app.config.from_object('yourapplication.default_config') from yourapplication import default_config app.config.from_object(default_config)
在載入之前,不會對物件進行任何處理。如果物件是類別且具有
@property
屬性,則需要在傳遞給此方法之前實例化。您不應使用此函數載入實際的設定,而應載入預設設定。實際設定應使用
from_pyfile()
載入,理想情況下,應從套件外部的位置載入,因為套件可能已在系統範圍內安裝。請參閱 開發/生產環境設定 以取得使用
from_object()
的基於類別的設定範例。
- from_file(filename, load, silent=False, text=True)¶
從使用
load
參數載入的檔案更新設定中的值。載入的資料會傳遞給from_mapping()
方法。import json app.config.from_file("config.json", load=json.load) import tomllib app.config.from_file("config.toml", load=tomllib.load, text=False)
- 參數:
- Returns:
True
如果檔案成功載入。- 回傳類型:
變更日誌
在 2.3 版本中變更: 新增了
text
參數。Added in version 2.0.
- from_mapping(mapping=None, **kwargs)¶
如同
update()
一樣更新設定,忽略非大寫鍵的項目。變更日誌
在 0.11 版本中新增。
- get_namespace(namespace, lowercase=True, trim_namespace=True)¶
傳回一個字典,其中包含符合指定命名空間/前綴的設定選項子集。範例用法
app.config['IMAGE_STORE_TYPE'] = 'fs' app.config['IMAGE_STORE_PATH'] = '/var/app/images' app.config['IMAGE_STORE_BASE_URL'] = 'http://img.website.com' image_store_config = app.config.get_namespace('IMAGE_STORE_')
結果字典
image_store_config
看起來會像這樣{ 'type': 'fs', 'path': '/var/app/images', 'base_url': 'http://img.website.com' }
當設定選項直接映射到函數或類別建構子中的關鍵字引數時,這通常很有用。
- 參數:
- 回傳類型:
變更日誌
在 0.11 版本中新增。
串流助手¶
- flask.stream_with_context(generator_or_function: Iterator) Iterator ¶
- flask.stream_with_context(generator_or_function: Callable[[...], Iterator]) Callable[[Iterator], Iterator]
當伺服器開始回應時,請求上下文就會消失。 這樣做是為了提高效率,並減少因 WSGI 中介軟體寫得不好而遇到記憶體洩漏的可能性。缺點是,如果您正在使用串流回應,則產生器將無法再存取請求綁定的資訊。
但是,此函數可以幫助您將上下文保持更長的時間
from flask import stream_with_context, request, Response @app.route('/stream') def streamed_response(): @stream_with_context def generate(): yield 'Hello ' yield request.args['name'] yield '!' return Response(generate())
或者,它也可以在特定的產生器周圍使用
from flask import stream_with_context, request, Response @app.route('/stream') def streamed_response(): def generate(): yield 'Hello ' yield request.args['name'] yield '!' return Response(stream_with_context(generate()))
變更日誌
在 0.9 版本中新增。
實用內部元件¶
- class flask.ctx.RequestContext(app, environ, request=None, session=None)¶
請求上下文包含每個請求的資訊。 Flask 應用程式在請求開始時建立並推送它,然後在請求結束時彈出它。它將為提供的 WSGI 環境建立 URL 適配器和請求物件。
請勿嘗試直接使用此類別,而是使用
test_request_context()
和request_context()
來建立此物件。當請求上下文被彈出時,它將評估在應用程式上註冊的所有用於拆解執行的函數 (
teardown_request()
)。請求上下文會在請求結束時自動彈出。 當使用互動式偵錯工具時,上下文將會還原,以便
request
仍然可以存取。 同樣地,測試用戶端可以在請求結束後保留上下文。 但是,拆解函數可能已經關閉了一些資源,例如資料庫連線。- 參數:
app ( Flask )
environ (WSGIEnvironment)
request (Request | None)
session (SessionMixin | None)
- copy()¶
建立此請求上下文的副本,具有相同的請求物件。 這可以用於將請求上下文移動到不同的 Greenlet。 因為實際的請求物件是相同的,所以除非鎖定對請求物件的存取,否則不能用於將請求上下文移動到不同的執行緒。
變更日誌
在 1.1 版本中變更: 使用目前的會話物件,而不是重新載入原始資料。 這可以防止
flask.session
指向過時的物件。Added in version 0.10.
- 回傳類型:
- match_request()¶
可以由子類別覆寫,以掛鉤到請求的匹配。
- 回傳類型:
None
- pop(exc=_sentinel)¶
彈出請求上下文並透過這樣做解除綁定。 這也將觸發由
teardown_request()
裝飾器註冊的函數的執行。變更日誌
在 0.9 版本中變更: 新增了
exc
引數。- 參數:
exc (BaseException | None)
- 回傳類型:
None
- flask.globals.request_ctx¶
目前的
RequestContext
。 如果請求上下文未啟用,則存取此代理上的屬性將引發RuntimeError
。這是一個內部物件,對於 Flask 如何處理請求至關重要。 在大多數情況下,不需要存取此物件。 您很可能想要的是
request
和session
。
- class flask.ctx.AppContext(app)¶
應用程式上下文包含特定於應用程式的資訊。 如果應用程式上下文尚未啟用,則會在每個請求開始時建立並推送應用程式上下文。 當執行 CLI 命令時,也會推送應用程式上下文。
- 參數:
app ( Flask )
- push()¶
將應用程式上下文綁定到目前的上下文。
- 回傳類型:
None
- pop(exc=_sentinel)¶
彈出應用程式上下文。
- 參數:
exc (BaseException | None)
- 回傳類型:
None
- flask.globals.app_ctx¶
目前的
AppContext
。 如果應用程式上下文未啟用,則存取此代理上的屬性將引發RuntimeError
。這是一個內部物件,對於 Flask 如何處理請求至關重要。 在大多數情況下,不需要存取此物件。 您很可能想要的是
current_app
和g
。
- class flask.blueprints.BlueprintSetupState(blueprint, app, options, first_registration)¶
用於向應用程式註冊藍圖的臨時持有者物件。 此類別的實例由
make_setup_state()
方法建立,稍後傳遞給所有註冊回呼函數。- app¶
對目前應用程式的參考
- blueprint¶
對建立此設定狀態的藍圖的參考。
- options¶
包含所有傳遞給
register_blueprint()
方法的選項的字典。
- first_registration¶
由於藍圖可以向應用程式註冊多次,並且並非所有內容都希望在其上註冊多次,因此可以使用此屬性來判斷藍圖是否已在過去註冊過。
- subdomain¶
藍圖應啟用的子網域,否則為
None
。
- url_prefix¶
應用於藍圖上定義的所有 URL 的前綴。
- url_defaults¶
一個包含 URL 預設值的字典,該字典會新增到使用藍圖定義的每個 URL。
訊號¶
訊號由 Blinker 函式庫提供。 請參閱 訊號 以取得簡介。
- flask.template_rendered¶
當模板成功呈現時,會傳送此訊號。 訊號會使用模板的實例作為
template
和上下文作為字典(名為context
)調用。訂閱者範例
def log_template_renders(sender, template, context, **extra): sender.logger.debug('Rendering template "%s" with context %s', template.name or 'string template', context) from flask import template_rendered template_rendered.connect(log_template_renders, app)
- flask.before_render_template
此訊號在模板呈現過程之前傳送。 訊號會使用模板的實例作為
template
和上下文作為字典(名為context
)調用。訂閱者範例
def log_template_renders(sender, template, context, **extra): sender.logger.debug('Rendering template "%s" with context %s', template.name or 'string template', context) from flask import before_render_template before_render_template.connect(log_template_renders, app)
- flask.request_started¶
當請求上下文設定完成時,在任何請求處理發生之前,會傳送此訊號。 由於請求上下文已綁定,因此訂閱者可以使用標準全域代理(例如
request
)存取請求。訂閱者範例
def log_request(sender, **extra): sender.logger.debug('Request context is set up') from flask import request_started request_started.connect(log_request, app)
- flask.request_finished¶
此訊號會在回應傳送至用戶端之前立即傳送。 它會將要傳送的回應(名為
response
)傳遞出去。訂閱者範例
def log_response(sender, response, **extra): sender.logger.debug('Request context is about to close down. ' 'Response: %s', response) from flask import request_finished request_finished.connect(log_response, app)
- flask.got_request_exception¶
當請求處理期間發生未處理的例外狀況時,包括在偵錯時,會傳送此訊號。 例外狀況會作為
exception
傳遞給訂閱者。此訊號不會針對
HTTPException
或其他已註冊錯誤處理常式的例外狀況傳送,除非例外狀況是從錯誤處理常式引發的。此範例示範了如果引發理論上的
SecurityException
時如何執行一些額外的記錄from flask import got_request_exception def log_security_exception(sender, exception, **extra): if not isinstance(exception, SecurityException): return security_logger.exception( f"SecurityException at {request.url!r}", exc_info=exception, ) got_request_exception.connect(log_security_exception, app)
- flask.request_tearing_down¶
當請求正在拆解時,會傳送此訊號。 即使發生例外狀況,也總是會呼叫它。 目前,監聽此訊號的函數會在常規拆解處理常式之後呼叫,但這不是您可以依賴的東西。
訂閱者範例
def close_db_connection(sender, **extra): session.close() from flask import request_tearing_down request_tearing_down.connect(close_db_connection, app)
從 Flask 0.9 開始,這也會傳遞一個
exc
關鍵字引數,如果存在導致拆解的例外狀況,則該引數會參考該例外狀況。
- flask.appcontext_tearing_down¶
當應用程式上下文正在拆解時,會傳送此訊號。 即使發生例外狀況,也總是會呼叫它。 目前,監聽此訊號的函數會在常規拆解處理常式之後呼叫,但這不是您可以依賴的東西。
訂閱者範例
def close_db_connection(sender, **extra): session.close() from flask import appcontext_tearing_down appcontext_tearing_down.connect(close_db_connection, app)
這也會傳遞一個
exc
關鍵字引數,如果存在導致拆解的例外狀況,則該引數會參考該例外狀況。
- flask.appcontext_pushed¶
當應用程式上下文被推送時,會傳送此訊號。 傳送者是應用程式。 這通常對於單元測試很有用,以便暫時掛鉤資訊。 例如,它可以用於在
g
物件上提早設定資源。用法範例
from contextlib import contextmanager from flask import appcontext_pushed @contextmanager def user_set(app, user): def handler(sender, **kwargs): g.user = user with appcontext_pushed.connected_to(handler, app): yield
在測試程式碼中
def test_user_me(self): with user_set(app, 'john'): c = app.test_client() resp = c.get('/users/me') assert resp.data == 'username=john'
變更日誌
Added in version 0.10.
- flask.appcontext_popped¶
此訊號會在應用程式上下文彈出時傳送。發送者為應用程式。這通常與
appcontext_tearing_down
訊號一致。變更日誌
Added in version 0.10.
- flask.message_flashed¶
當應用程式快閃訊息時,會傳送此訊號。訊息會以
message
關鍵字參數和類別以category
傳送。訂閱者範例
recorded = [] def record(sender, message, category, **extra): recorded.append((message, category)) from flask import message_flashed message_flashed.connect(record, app)
變更日誌
Added in version 0.10.
類別型視圖¶
變更日誌
Added in version 0.7.
- class flask.views.View¶
繼承此類別並覆寫
dispatch_request()
以建立通用類別型視圖。呼叫as_view()
以建立視圖函式,該函式使用給定的引數建立類別的實例,並使用任何 URL 變數呼叫其dispatch_request
方法。請參閱 類別型視圖 以取得詳細指南。
class Hello(View): init_every_request = False def dispatch_request(self, name): return f"Hello, {name}!" app.add_url_rule( "/hello/<name>", view_func=Hello.as_view("hello") )
設定類別上的
methods
以變更視圖接受的方法。設定類別上的
decorators
,以將裝飾器列表套用至產生的視圖函式。套用至類別本身的裝飾器將不會套用至產生的視圖函式!將
init_every_request
設定為False
以提高效率,除非您需要在self
上儲存請求全域資料。- methods: ClassVar[Collection[str] | None] = None¶
此視圖註冊用於的方法。預設使用與
route
和add_url_rule
相同的預設值(["GET", "HEAD", "OPTIONS"]
)。
- provide_automatic_options: ClassVar[bool | None] = None¶
控制是否自動處理
OPTIONS
方法。預設使用與route
和add_url_rule
相同的預設值(True
)。
- decorators: ClassVar[list[Callable[[...], Any]]] = []¶
要依序套用至產生的視圖函式的裝飾器列表。請記住,
@decorator
語法是由下而上套用的,因此列表中的第一個裝飾器將會是最底層的裝飾器。變更日誌
在 0.8 版本中新增。
- init_every_request: ClassVar[bool] = True¶
預設為每個請求建立此視圖類別的新實例。如果視圖子類別將其設定為
False
,則每個請求都會使用相同的實例。單一實例更有效率,尤其是在初始化期間完成複雜設定時。但是,跨請求在
self
上儲存資料已不再安全,應改為使用g
。變更日誌
在 2.2 版本中新增。
- dispatch_request()¶
實際的視圖函式行為。子類別必須覆寫此方法並傳回有效的回應。來自 URL 規則的任何變數都會作為關鍵字參數傳遞。
- 回傳類型:
ft.ResponseReturnValue
- classmethod as_view(name, *class_args, **class_kwargs)¶
將類別轉換為可為路由註冊的視圖函式。
預設情況下,產生的視圖將為每個請求建立視圖類別的新實例,並呼叫其
dispatch_request()
方法。如果視圖類別將init_every_request
設定為False
,則每個請求都會使用相同的實例。除了
name
之外,傳遞給此方法的所有其他引數都會轉發到視圖類別__init__
方法。變更日誌
版本變更自 2.2: 新增了
init_every_request
類別屬性。- 參數:
name (str)
class_args (t.Any)
class_kwargs (t.Any)
- 回傳類型:
ft.RouteCallable
- class flask.views.MethodView¶
將請求方法分派到對應的實例方法。例如,如果您實作
get
方法,它將用於處理GET
請求。這對於定義 REST API 很有用。
methods
會根據類別上定義的方法自動設定。請參閱 類別型視圖 以取得詳細指南。
class CounterAPI(MethodView): def get(self): return str(session.get("counter", 0)) def post(self): session["counter"] = session.get("counter", 0) + 1 return redirect(url_for("counter")) app.add_url_rule( "/counter", view_func=CounterAPI.as_view("counter") )
- dispatch_request(**kwargs)¶
實際的視圖函式行為。子類別必須覆寫此方法並傳回有效的回應。來自 URL 規則的任何變數都會作為關鍵字參數傳遞。
- 參數:
kwargs (t.Any)
- 回傳類型:
ft.ResponseReturnValue
URL 路由註冊¶
一般來說,有三種方式可以定義路由系統的規則
您可以使用
flask.Flask.route()
裝飾器。您可以使用
flask.Flask.add_url_rule()
函式。您可以直接存取底層 Werkzeug 路由系統,該系統公開為
flask.Flask.url_map
。
路由中的變數部分可以使用角括號 (/user/<username>
) 指定。預設情況下,URL 中的變數部分接受不含斜線的任何字串,但也可以使用 <converter:name>
指定不同的轉換器。
變數部分會作為關鍵字參數傳遞至視圖函式。
提供以下轉換器
|
接受不含斜線的任何文字 (預設值) |
|
接受整數 |
|
類似 |
|
類似預設值,但也接受斜線 |
|
符合提供的其中一個項目 |
|
接受 UUID 字串 |
可以使用 flask.Flask.url_map
定義自訂轉換器。
以下是一些範例
@app.route('/')
def index():
pass
@app.route('/<username>')
def show_user(username):
pass
@app.route('/post/<int:post_id>')
def show_post(post_id):
pass
務必記住的一個重要細節是 Flask 如何處理尾隨斜線。目的是保持每個 URL 的唯一性,因此適用以下規則
如果規則以斜線結尾,並且使用者在沒有斜線的情況下請求,則使用者會自動重新導向至附加尾隨斜線的相同頁面。
如果規則不以尾隨斜線結尾,並且使用者使用尾隨斜線請求頁面,則會引發 404 找不到錯誤。
這與網頁伺服器處理靜態檔案的方式一致。這也使得安全地使用相對連結目標成為可能。
您也可以為同一個函式定義多個規則。但是,它們必須是唯一的。也可以指定預設值。例如,以下是接受選用頁面的 URL 的定義
@app.route('/users/', defaults={'page': 1})
@app.route('/users/page/<int:page>')
def show_users(page):
pass
這指定 /users/
將是第一頁的 URL,而 /users/page/N
將是第 N
頁的 URL。
如果 URL 包含預設值,它將重新導向到其更簡單的形式,並顯示 301 重新導向。在上面的範例中,/users/page/1
將重新導向到 /users/
。如果您的路由處理 GET
和 POST
請求,請確保預設路由僅處理 GET
,因為重新導向無法保留表單資料。
@app.route('/region/', defaults={'id': 1})
@app.route('/region/<int:id>', methods=['GET', 'POST'])
def region(id):
pass
以下是 route()
和 add_url_rule()
接受的參數。唯一的區別在於,使用 route 參數時,視圖函式是使用裝飾器而不是 view_func
參數定義的。
|
作為字串的 URL 規則 |
|
註冊 URL 規則的端點。如果未明確聲明,Flask 本身會假設視圖函式的名稱是端點的名稱。 |
|
在服務對所提供端點的請求時要呼叫的函式。如果未提供此項,則稍後可以透過將函式儲存在 |
|
包含此規則預設值的字典。請參閱上面的範例,了解預設值如何運作。 |
|
指定子網域規則,以防正在使用子網域比對。如果未指定,則假設為預設子網域。 |
|
要轉發到底層 |
視圖函式選項¶
對於內部使用,視圖函式可以附加一些屬性,以自訂視圖函式通常無法控制的行為。可以選擇性地提供以下屬性,以覆寫 add_url_rule()
或一般行為的某些預設值
__name__
:函式的名稱預設用作端點。如果明確提供了端點,則會使用此值。此外,預設情況下,這將以藍圖的名稱作為前綴,而藍圖的名稱無法從函式本身自訂。methods
:如果在新增 URL 規則時未提供方法,Flask 將在視圖函式物件本身上尋找是否存在methods
屬性。如果存在,它將從那裡提取方法的資訊。provide_automatic_options
:如果設定了此屬性,Flask 將強制啟用或停用 HTTPOPTIONS
回應的自動實作。當使用想要在每個視圖的基礎上自訂OPTIONS
回應的裝飾器時,這會很有用。required_methods
:如果設定了此屬性,即使方法在route()
呼叫中被明確覆寫,Flask 也始終會在註冊 URL 規則時新增這些方法。
完整範例
def index():
if request.method == 'OPTIONS':
# custom options handling here
...
return 'Hello World!'
index.provide_automatic_options = False
index.methods = ['GET', 'OPTIONS']
app.add_url_rule('/', index)
變更日誌
版本新增自 0.8: 新增了 provide_automatic_options
功能。
命令列介面¶
- class flask.cli.FlaskGroup(add_default_commands=True, create_app=None, add_version_option=True, load_dotenv=True, set_debug_flag=True, **extra)¶
特殊的
AppGroup
群組子類別,支援從設定的 Flask 應用程式載入更多命令。通常開發人員不必與此類別介接,但對於某些非常進階的使用案例來說,建立此類別的實例是有意義的。請參閱 自訂腳本。- 參數:
add_default_commands (bool) – 如果為 True,則會新增預設的 run 和 shell 命令。
add_version_option (bool) – 新增
--version
選項。create_app (t.Callable[..., Flask] | None) – 選用回呼,會將腳本資訊傳遞給它,並傳回載入的應用程式。
load_dotenv (bool) – 載入最近的
.env
和.flaskenv
檔案以設定環境變數。也會將工作目錄變更為包含找到的第一個檔案的目錄。set_debug_flag (bool) – 設定應用程式的偵錯旗標。
extra (t.Any)
版本變更自 3.1:
-e path
優先於預設的.env
和.flaskenv
檔案。變更日誌
版本變更自 2.2: 新增了
-A/--app
、--debug/--no-debug
、-e/--env-file
選項。版本變更自 2.2: 在執行
app.cli
命令時,會推送應用程式上下文,因此這些命令不再需要@with_appcontext
。在 1.0 版本中變更: 如果已安裝,python-dotenv 將用於從
.env
和.flaskenv
檔案載入環境變數。- get_command(ctx, name)¶
給定上下文和命令名稱,如果存在,則傳回
Command
物件,否則傳回None
。
- make_context(info_name, args, parent=None, **extra)¶
此函式在給定資訊名稱和引數時,將啟動剖析並建立新的
Context
。但它不會調用實際的命令回呼。若要快速自訂使用的上下文類別,而無需覆寫此方法,請設定
context_class
屬性。- 參數:
- 回傳類型:
版本變更自 8.0: 新增了
context_class
屬性。
- class flask.cli.AppGroup(name=None, commands=None, **attrs)¶
這與一般的 click
Group
類似,但它變更了command()
裝飾器的行為,使其自動將函式包裝在with_appcontext()
中。請勿與
FlaskGroup
混淆。- 參數:
- command(*args, **kwargs)¶
這與一般的
click.Group
上同名的方法完全相同,但它會將回呼包裝在with_appcontext()
中,除非透過傳遞with_appcontext=False
停用它。
- class flask.cli.ScriptInfo(app_import_path=None, create_app=None, set_debug_flag=True, load_dotenv_defaults=True)¶
協助處理 Flask 應用程式的 Helper 物件。通常不必與其介接,因為它在分派到 click 時於內部使用。在 Flask 的未來版本中,此物件很可能會扮演更重要的角色。它通常由
FlaskGroup
自動建立,但您也可以手動建立它並將其作為 click 物件傳遞下去。版本變更自 3.1: 新增了
load_dotenv_defaults
參數和屬性。- 參數:
- app_import_path¶
Flask 應用程式的選用匯入路徑。
- create_app¶
選用函式,會將腳本資訊傳遞給它,以建立應用程式的實例。
- load_dotenv_defaults¶
是否應載入預設的
.flaskenv
和.env
檔案。ScriptInfo
不會載入任何內容,這僅供參考,以便在處理期間於其他位置進行載入時使用。Added in version 3.1.
- flask.cli.load_dotenv(path=None, load_defaults=True)¶
載入 “dotenv” 檔案以設定環境變數。給定的路徑優先於
.env
,而.env
優先於.flaskenv
。在載入和合併這些檔案後,只有當金鑰尚未在os.environ
中設定時,才會設定值。如果未安裝 python-dotenv,則此操作無效。
- 參數:
- Returns:
True
如果至少載入一個環境變數。- 回傳類型:
版本 3.1 變更: 新增了
load_defaults
參數。給定的路徑優先於預設檔案。變更日誌
版本 2.0 變更: 目前目錄不會變更為載入檔案的位置。
版本 2.0 變更: 載入 env 檔案時,預設編碼設定為 UTF-8。
版本 1.1.0 變更: 當未安裝 python-dotenv 或給定的路徑不是檔案時,傳回
False
。在 1.0 版本中新增。
- flask.cli.with_appcontext(f)¶
包裝一個回呼函式,以確保它在腳本的應用程式內容中執行。
在
app.cli
或blueprint.cli
下註冊的自訂命令(及其選項)將始終具有可用的應用程式內容,在這種情況下不需要此裝飾器。變更日誌
版本 2.2 變更: 應用程式內容對於子命令以及裝飾的回呼函式都處於活動狀態。應用程式內容始終可用於
app.cli
命令和參數回呼函式。- 參數:
f (F)
- 回傳類型:
F
- flask.cli.pass_script_info(f)¶
標記一個函式,以便將
ScriptInfo
的實例作為第一個引數傳遞給 click 回呼函式。- 參數:
f (t.Callable[te.Concatenate[T, P], R])
- 回傳類型:
t.Callable[P, R]
- flask.cli.run_command = <Command run>¶
執行本地開發伺服器。
此伺服器僅用於開發目的。它不提供生產 WSGI 伺服器的穩定性、安全性或效能。
預設情況下,重載器和偵錯器已啟用 ‘–debug’ 選項。