flask基礎(chǔ)理論知識(shí)

JSON 是HTTP 請(qǐng)求和響應(yīng)使用的傳輸格式。在資源的內(nèi)部表示和JSON 之間進(jìn)行轉(zhuǎn)換。

GET 請(qǐng)求實(shí)現(xiàn)用于處理不同資源的路由,只返回信息,無需修改信息。

路由:

處理URL 和函數(shù)之間關(guān)系的程序稱為路由。處理URL 到Python 函數(shù)的映射關(guān)系

Flask定義路由:

使用程序?qū)嵗峁┑?b>app.route 修飾器,把修飾的函數(shù)注冊(cè)為路由。


app.route 修飾器聲明路由

修飾器是Python 語言的標(biāo)準(zhǔn)特性,使用不同的方式修改函數(shù)的行為,使用修飾器把函數(shù)注冊(cè)為事件的處理程序。


index( )函數(shù)稱為視圖函數(shù),視圖函數(shù)返回的響應(yīng),可以使包含HTML 的簡(jiǎn)單字符串,也可以是復(fù)雜的表單。

URL 格式地址中都包含可變部分,F(xiàn)lask 支持這種形式的URL,只需在route 修飾器中使用特

殊的句法即可。


定義路由動(dòng)態(tài)部分

調(diào)用視圖函數(shù)時(shí),F(xiàn)lask 會(huì)將動(dòng)態(tài)部分作為參數(shù)傳入函數(shù)。

路由中的動(dòng)態(tài)部分默認(rèn)使用字符串,不過也可使用類型定義。

Flask 支持在路由中使用int、float 和path 類型。

path 類型也是字符串,但不把斜線視作分隔符,而將其當(dāng)作動(dòng)態(tài)片段的一部分。


程序?qū)嵗?b>run 方法啟動(dòng)Flask 集成的開發(fā)Web 服務(wù)器:


run方法啟動(dòng)服務(wù)器

服務(wù)器啟動(dòng)后,會(huì)進(jìn)入輪詢,等待并處理請(qǐng)求。輪詢會(huì)一直運(yùn)行,直到程序停止

開發(fā)過程中啟用調(diào)試模式會(huì)帶來一些便利,比如激活調(diào)試器、重載程序等。

Flask 提供的Web 服務(wù)器不適合在生產(chǎn)環(huán)境中使用。


一個(gè)完整的Flask 程序

將其作為參數(shù)傳入視圖函數(shù),視圖函數(shù)就能夠訪問請(qǐng)求對(duì)象。為了避免大量可有可無的視圖函數(shù):

Flask 使用上下文臨時(shí)把某些對(duì)象變?yōu)槿挚稍L問。


上下文


Flask上下文全局變量

Flask 中有兩種上下文:程序上下文和請(qǐng)求上下文,使用上下文臨時(shí)把某些對(duì)象變?yōu)槿挚稍L問,讓視圖函數(shù)能夠訪問請(qǐng)求對(duì)象。

程序上下文被推送后,就可以在線程中使用current_app 和g 變量。

請(qǐng)求上下文被推送后,就可以使用request 和session 變量。

Flask 在分發(fā)請(qǐng)求之前激活(或推送)程序和請(qǐng)求上下文,請(qǐng)求處理完成后再將其刪除。如果使用這些變量時(shí)我們沒有激活程序上下文或請(qǐng)求上下文,就會(huì)導(dǎo)致錯(cuò)誤。


沒激活程序上下文之前就調(diào)用current_app.name 會(huì)導(dǎo)致錯(cuò)誤,但推送完上下文之后就可以調(diào)用了。

在程序?qū)嵗?b>調(diào)用app.app_context() 可獲得一個(gè)程序上下文。



程序收到客戶端發(fā)來的請(qǐng)求時(shí),要找到處理該請(qǐng)求的視圖函數(shù),F(xiàn)lask會(huì)在程序的URL 映射中查找請(qǐng)求的URL。

URL 映射:

URL 映射是URL 和視圖函數(shù)之間的對(duì)應(yīng)關(guān)系。

生成映射:

Flask 使用app.route 修飾器或者非修飾器形式的app.add_url_rule() 生成映射。


查看Flask 程序中的URL 映射:


URL 映射中的HEAD、Options、GET 是請(qǐng)求方法,由路由進(jìn)行處理。

Flask 為每個(gè)路由都指定了請(qǐng)求方法,這樣不同的請(qǐng)求方法發(fā)送到相同的URL 上時(shí),會(huì)使用不同的視圖函數(shù)進(jìn)行處理。


Flask注冊(cè)通用函數(shù)的功能:

注冊(cè)的函數(shù)可在請(qǐng)求被分發(fā)到視圖函數(shù)之前或之后調(diào)用。

Flask 支持以下4 種鉤子:

? before_first_request:注冊(cè)一個(gè)函數(shù),在處理第一個(gè)請(qǐng)求之前運(yùn)行。?

? before_request:注冊(cè)一個(gè)函數(shù),在每次請(qǐng)求之前運(yùn)行。

? after_request:注冊(cè)一個(gè)函數(shù),如果沒有未處理的異常拋出,在每次請(qǐng)求之后運(yùn)行。

? teardown_request:注冊(cè)一個(gè)函數(shù),即使有未處理的異常拋出,也在每次請(qǐng)求之后運(yùn)行。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 22年12月更新:個(gè)人網(wǎng)站關(guān)停,如果仍舊對(duì)舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,397評(píng)論 22 257
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評(píng)論 19 139
  • 這幾天想學(xué)新東西,就看了flask框架,本身對(duì)python不太了解,網(wǎng)上的很多教程看了,總是在某些地方卡住。翻到一...
    易木成華閱讀 2,399評(píng)論 0 11
  • [TOC]一直想做源碼閱讀這件事,總感覺難度太高時(shí)間太少,可望不可見。最近正好時(shí)間充裕,決定試試做一下,并記錄一下...
    何柯君閱讀 7,386評(píng)論 3 98
  • 初始化 所有 Flask 程序都必須創(chuàng)建一個(gè) app 實(shí)例。Web 服務(wù)器使用 Web 服務(wù)器網(wǎng)關(guān)接口協(xié)議(Web...
    焉知非魚閱讀 2,122評(píng)論 0 1

友情鏈接更多精彩內(nèi)容