摘要:服務(wù)器會(huì)根據(jù)將請(qǐng)求交給相應(yīng)的程序處理。函數(shù)稱(chēng)為視圖函數(shù)。無(wú)參數(shù)當(dāng)訪問(wèn)網(wǎng)站根域名時(shí),會(huì)執(zhí)行函數(shù),返回值的結(jié)果會(huì)在網(wǎng)頁(yè)中顯示。。而返回特殊狀態(tài)碼可在返回值中添加,代碼如下返回特殊狀態(tài)碼鍵值對(duì)形式后的鍵值對(duì)由提供對(duì)象處理。
Web框架
Web框架是構(gòu)建Web應(yīng)用的一種方式。盡管現(xiàn)在很多語(yǔ)言如PHP、Java都能開(kāi)發(fā)Web應(yīng)用,這些語(yǔ)言也都有相應(yīng)成熟的Web框架,但是請(qǐng)求處理是這些Web框架的核心。知乎問(wèn)答-如何學(xué)習(xí)Web框架 提到Web框架涉及的基本元素,請(qǐng)求處理是學(xué)習(xí)Web框架的首要問(wèn)題。
Flask框架Flask 是一個(gè)用于 Python 的微型網(wǎng)絡(luò)開(kāi)發(fā)框架。
Flask的‘微’體現(xiàn)在它只提供Web服務(wù)的基本功能,其他的功能是由Flask的擴(kuò)展實(shí)現(xiàn),用戶可以根據(jù)需求應(yīng)用核心擴(kuò)展。它的基本功能依賴(lài)于符合 WSGI 規(guī)范(Web Server Gateway Interface)的 Werkzeug 庫(kù)和模板系統(tǒng) Jinja2。
當(dāng)我們通過(guò)URL訪問(wèn)網(wǎng)站時(shí),是向Web服務(wù)器發(fā)送了請(qǐng)求。服務(wù)器會(huì)根據(jù)URL將請(qǐng)求交給相應(yīng)的Web程序處理。所以服務(wù)器與Web應(yīng)用程序的交互需要一定的規(guī)則。而Python專(zhuān)用的規(guī)范是WSGI [PEP-3333定義],文章 WSGI簡(jiǎn)介 給出了簡(jiǎn)單說(shuō)明。
Flask涉及到兩個(gè)重要的類(lèi)——Flask和Blueprint[藍(lán)本] 類(lèi)。
flask的應(yīng)用程序需要Flask類(lèi)實(shí)例化才能運(yùn)行,網(wǎng)站的基本配置信息也包含在此類(lèi)中。
實(shí)例化如下:
from flask import Flask app = Flask(__name__)#__name__程序的文件名,通過(guò)此變量定位資源文件位置
配置如下:
app.config["CONFIGURATION"] = "CONFIGURATION"
Blueprint類(lèi)與Flask類(lèi)似,它能夠更好的組織Web應(yīng)用程序,并能延遲Flask類(lèi)實(shí)例的創(chuàng)建。
1. 路由和請(qǐng)求處理路由的存在是為了將Web服務(wù)的請(qǐng)求轉(zhuǎn)交給Flask程序?qū)嵗暮瘮?shù)處理,簡(jiǎn)單的說(shuō)處理URL和函數(shù)之間的關(guān)系稱(chēng)為路由。函數(shù)稱(chēng)為視圖函數(shù)。
Flask類(lèi)包含了route裝飾器,通過(guò)初始化Flask類(lèi)注冊(cè)視圖函數(shù)。
@app.route("/") def index(): return "Hellow World
"
當(dāng)訪問(wèn)網(wǎng)站根域名時(shí),會(huì)執(zhí)行index函數(shù),返回值的結(jié)果會(huì)在網(wǎng)頁(yè)中顯示。。
帶參數(shù)在很多時(shí)候用戶不同,使用的URL不同,帶參數(shù)的路由能夠很好的處理URL中變化的部分。如在網(wǎng)頁(yè)中顯示個(gè)人名字
@app.route("/user/") def user(name): return " Hello, {!r}
".format(name)
可指定的類(lèi)型有int,float,path(路徑標(biāo)識(shí))
@app.route("/", methods=["GET", "POST"]) def index(): pass
當(dāng)網(wǎng)頁(yè)需要處理表單等請(qǐng)求時(shí),需要添加methods,使得視圖函數(shù)能夠處理http請(qǐng)求。methods中的參數(shù)包括了Http協(xié)議中定義的5種動(dòng)作。
響應(yīng)處理from flask import make_request @app.route("/"): response = make_request("Cookie
") response.set_cookie("answer","42") return response
響應(yīng)處理中很重要的一部分是處理Http協(xié)議的狀態(tài)碼。Flask默認(rèn)狀態(tài)碼是200。而返回特殊狀態(tài)碼可在返回值中添加,代碼如下:
@app.route("/") def index(): return "“"?" + 鍵值對(duì)“ 形式Bad Request
", 400 #返回特殊狀態(tài)碼
? 后的鍵值對(duì)由flask提供request對(duì)象處理。假設(shè)URL為127.0.0.1:5000?page=1
from flask import request @app.route("/", methods=["GET"]) def index(): page = request.args.get("page", type=int)2. 異常處理
在瀏覽網(wǎng)頁(yè)時(shí),可能會(huì)遇到一些錯(cuò)誤,flask提供abort函數(shù)拋出錯(cuò)誤,而拋出的異常會(huì)直接返回給Web服務(wù)器。我們也可以自定義處理這些異常。代碼如下:
from flask import abort @app.route("/") def index(): abort(404) #拋出404異常 @app.errorhandler(404) def page_not_found(error): # 自定義處理異常 return "This page does not exist", 4043. 請(qǐng)求鉤子
請(qǐng)求鉤子是指在請(qǐng)求之前或之后所做的處理函數(shù)
函數(shù)名 | 功能 |
---|---|
before_first_request | 在處理第一個(gè)請(qǐng)求之前執(zhí)行 |
before_request | 每次請(qǐng)求之前執(zhí)行 |
after_request | 無(wú)異常,每次請(qǐng)求之后執(zhí)行 |
teardown_request | 即使異常,也在請(qǐng)求之后執(zhí)行 |
請(qǐng)求鉤子函數(shù)與視圖函數(shù)之間通過(guò)g變量共享數(shù)據(jù)。
問(wèn)題Q1:如何調(diào)試Web應(yīng)用程序?
Q2:如何評(píng)價(jià)Web應(yīng)用程序的性能?
Q3:Web應(yīng)用程序如何做單元測(cè)試?
《Flask Web 開(kāi)發(fā)》SegmentFault系列文章 - 作者只錄入了前七章內(nèi)容,未涉及實(shí)例開(kāi)發(fā)部分
《Flask Web 開(kāi)發(fā)》中文版 - 建議入手第二版
《Flask Web 開(kāi)發(fā)》作者Blog - 書(shū)中有任何疑問(wèn)可以在文章中搜索
Flask大型教程項(xiàng)目Blog
Flask API文檔
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37783.html
摘要:學(xué)習(xí)資源中文學(xué)習(xí)大本營(yíng)強(qiáng)烈推薦開(kāi)發(fā)從小白開(kāi)始學(xué)習(xí)資料推薦一些資源好文使用小結(jié)實(shí)例開(kāi)發(fā)博客常用命令打包包中的依賴(lài)包安裝依賴(lài)包擴(kuò)展為應(yīng)用提供編寫(xiě)腳本的功能??梢杂脕?lái)運(yùn)行一個(gè)開(kāi)發(fā)服務(wù)器,也可以與數(shù)據(jù)庫(kù)交互,方便開(kāi)發(fā)。 學(xué)習(xí)資源 Python 中文學(xué)習(xí)大本營(yíng)(Explore Flask強(qiáng)烈推薦) Flask 開(kāi)發(fā)從小白開(kāi)始 cnblog-Flask 學(xué)習(xí)資料 推薦一些Flask資源 Fl...
摘要:簡(jiǎn)介是一個(gè)輕量級(jí)的框架如果要學(xué)習(xí)開(kāi)發(fā)非常適合作為我們學(xué)習(xí)的起點(diǎn)通過(guò)接下來(lái)的這一些列的博客我們將學(xué)習(xí)如何利用以及其他工具搭建一個(gè)簡(jiǎn)單的網(wǎng)站開(kāi)發(fā)環(huán)境命令如下第一個(gè)首先我們創(chuàng)建一個(gè)文件夾并在其中新建一個(gè)文件接著我們打開(kāi)按照的示例 簡(jiǎn)介 Flask 是一個(gè)輕量級(jí)的 Web 框架, 如果要學(xué)習(xí) Web 開(kāi)發(fā), Flask 非常適合作為我們學(xué)習(xí)的起點(diǎn). 通過(guò)接下來(lái)的這一些列的博客, 我們將學(xué)習(xí)如何...
摘要:示例如下靜態(tài)路由使用動(dòng)態(tài)變量的路由未指定變量類(lèi)型使用動(dòng)態(tài)變量的路由指定變量類(lèi)型指定的路由變量,可以作為被裝飾的函數(shù)參數(shù)傳入進(jìn)來(lái)。 開(kāi)始決定認(rèn)真的在網(wǎng)上寫(xiě)一些東西,主要原因還是在于希望能提升學(xué)習(xí)效果。雖說(shuō)python寫(xiě)了有幾年,但是web后端框架的確沒(méi)怎么接觸過(guò),買(mǎi)了本狗書(shū)寥寥草草的過(guò)了一遍,發(fā)現(xiàn)很多東西還是理解不深,真的是好記性不如爛筆頭,知識(shí)也要從基礎(chǔ)開(kāi)始,退回來(lái)好好看看官方文檔,再...
摘要:和是最受歡迎的。虛擬環(huán)境將允許將項(xiàng)目依賴(lài)項(xiàng)與本地機(jī)器依賴(lài)項(xiàng)隔離開(kāi)來(lái)。文件將是項(xiàng)目中的主文件。運(yùn)行后,檢查本地主機(jī)。在中創(chuàng)建一個(gè)名為的文件夾,并創(chuàng)建一個(gè)名為的文件夾。部署創(chuàng)建帳戶為前端和全棧應(yīng)用程序提供免費(fèi)部署服務(wù)。 ...
閱讀 2551·2023-04-25 19:47
閱讀 3396·2019-08-29 17:18
閱讀 861·2019-08-29 15:26
閱讀 3367·2019-08-29 14:17
閱讀 1145·2019-08-26 13:49
閱讀 3346·2019-08-26 13:22
閱讀 3034·2019-08-26 10:44
閱讀 2702·2019-08-23 16:51