本篇文章給大家分享的是有關(guān)如何理解Python全棧中的Flask,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
專注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)建平免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
前言
Python Web框架里比較有名當(dāng)屬Django,Django功能全面,它提供一站式解決方案,集成了MVT(Model-View-Template)和ORM,以及后臺管理。但是缺點也很明顯,它偏重。就像是一個裝潢好的房子,它提供好了你要用的東西,直接拿來用就可以。
Flask相對于Django而言是輕量級的Web框架。和Django不同,F(xiàn)lask輕巧、簡潔,通過定制第三方擴展來實現(xiàn)具體功能。
可定制性,通過擴展增加其功能,這是Flask最重要的特點。Flask的兩個主要核心應(yīng)用是Werkzeug和模板引擎Jinja。
WSGI
Web Server Gateway Interface(Web服務(wù)器網(wǎng)關(guān)接口,WSGI)已被用作Python Web應(yīng)用程序開發(fā)的標(biāo)準(zhǔn)。 WSGI是Web服務(wù)器和Web應(yīng)用程序之間通用接口的規(guī)范。
Werkzeug
它是一個WSGI工具包,它實現(xiàn)了請求,響應(yīng)對象和實用函數(shù)。這使得能夠在其上構(gòu)建web框架。 Flask框架使用Werkzeug作為其基礎(chǔ)之一。
jinja2
jinja2是Python的一個流行的模板引擎。Web模板系統(tǒng)將模板與特定數(shù)據(jù)源組合以呈現(xiàn)動態(tài)網(wǎng)頁。
Flask通常被稱為微框架。 它旨在保持應(yīng)用程序的核心簡單且可擴展。Flask沒有用于數(shù)據(jù)庫處理的內(nèi)置抽象層,也沒有形成驗證支持。相反,F(xiàn)lask支持?jǐn)U展以向應(yīng)用程序添加此類功能。一些受歡迎的Flask擴展將在本教程后續(xù)章節(jié)進行討論。
Flask
Flask擴展包:
Flask-SQLalchemy:操作數(shù)據(jù)庫
Flask-migrate:管理遷移數(shù)據(jù)庫
Flask-Mail:郵件
Flask-WTF:表單
Flask-script:插入腳本
Flask-Login:認(rèn)證用戶狀態(tài)
Flask-RESTful:開發(fā)REST API的工具
Flask-Bootstrap:集成前端Twitter Bootstrap框架
Flask-Moment:本地化日期和時間
新建flask項目:

運行如下:

必須在項目中導(dǎo)入Flask模塊。 Flask類的一個對象是我們的WSGI應(yīng)用程序。
Flask構(gòu)造函數(shù)使用當(dāng)前模塊(__name __)的名稱作為參數(shù)。
以下是實例化一個Flask對象可填的參數(shù),及其默認(rèn)值:
template_folder:模板所在文件夾的名字, 默認(rèn)就是templates
root_path:可以不用填,會自動找到,當(dāng)前執(zhí)行文件,所在目錄地址在return render_template時會將上面兩個進行拼接,找到對應(yīng)的模板地址
static_folder:靜態(tài)文件所在文件的名字,默認(rèn)是static,可以不用填
static_url_path:靜態(tài)文件的地址前綴,寫成什么,訪問靜態(tài)文件時,就要在前面加上這個
instance_path和instance_relative_config是配合來用的、這兩個參數(shù)是用來找配置文件的,當(dāng)用app.config.from_pyfile('settings.py')這種方式導(dǎo)入配置文件的時候會用到
instance_relative_config:默認(rèn)為False,當(dāng)設(shè)置為True時,from_pyfile會從instance_path指定的地址下查找文件。
instsnce_path:指定from_pyfile查詢文件的路徑,不設(shè)置時,默認(rèn)尋找和app.run()的執(zhí)行文件同級目錄下的instance文件夾,如果配置了instance_path(注意需要是絕對路徑),就會從指定的地址下里面的文件
Flask類的route()函數(shù)是一個裝飾器,它告訴應(yīng)用程序哪個URL應(yīng)該調(diào)用相關(guān)的函數(shù)。
app.route(rule, options)
rule 參數(shù)表示與該函數(shù)的URL綁定。
options 是要轉(zhuǎn)發(fā)給基礎(chǔ)Rule對象的參數(shù)列表。
在上面的示例中,'/ ' URL與hello_world()函數(shù)綁定。因此,當(dāng)在瀏覽器中打開web服務(wù)器的主頁時,將呈現(xiàn)該函數(shù)的輸出。
application對象的add_url_rule()函數(shù)也可用于將URL與函數(shù)綁定,如下:
def hello_world(): return ‘hello world’ app.add_url_rule(‘/’, ‘hello’,hello_world)
最后,F(xiàn)lask類的run()方法在本地開發(fā)服務(wù)器上運行應(yīng)用程序。
app.run(host, port, debug, options)
host:監(jiān)聽的主機名
post:監(jiān)聽的主機端口,默認(rèn)5000
debug:調(diào)試模式,默認(rèn)false,設(shè)置為frue則顯示調(diào)試信息
options:要轉(zhuǎn)發(fā)到底層的werkzeng服務(wù)器
給路由傳參示例:
from flask importFlask
app = Flask(__name__)
@app.route('/id/<int:idn>')def hello_world(idn):
return 'HelloWorld! %d' %idn
if __name__ == '__main__':
app.run()路由傳遞的參數(shù)默認(rèn)當(dāng)做string處理,這里指定int,還支持float,path,尖括號中冒號后面的內(nèi)容是動態(tài)的。
返回狀態(tài)碼示例:

abort函數(shù):
如果在視圖函數(shù)執(zhí)行過程中,出現(xiàn)了異常錯誤,我們可以使用abort函數(shù)立即終止視圖函數(shù)的執(zhí)行。通過abort函數(shù),可以向前端返回一個http標(biāo)準(zhǔn)中存在的錯誤狀態(tài)碼,表示出現(xiàn)的錯誤信息。
使用abort拋出一個http標(biāo)準(zhǔn)中不存在的自定義的狀態(tài)碼,沒有實際意義。如果abort函數(shù)被觸發(fā),其后面的語句將不會執(zhí)行。其類似于python中raise。
from flask importFlask,abort
app = Flask(__name__)
@app.route('/id/<int:idn>')def hello_world(idn):
abort(403)
return 'HelloWorld! %d' %idn, 888
if __name__ == '__main__':
app.run()在Flask中通過裝飾器來實現(xiàn)捕獲異常,errorhandler()接收的參數(shù)為異常狀態(tài)碼。視圖函數(shù)的參數(shù),返回的是錯誤信息。
重定向redirect示例:
from flask importFlask,redirect
app = Flask(__name__)
@app.route('/')def hello_world():
return redirect('https://www.baidu.com')
if __name__ == '__main__':
app.run()效果如下:

這里再介紹一下url_for(),url_for()函數(shù)對于動態(tài)構(gòu)建特定函數(shù)的URL非常有用。該函數(shù)接受函數(shù)的名稱作為第一個參數(shù),以及一個或多個關(guān)鍵字參數(shù),每個參數(shù)對應(yīng)于URL的變量部分。
如下:
@app.route('/user/<name>')def hello_user(name):
if name=='admin':
return redirect(url_for('hello_admin'))
else:
return redirect(url_for('hello_guest',guest =name))HTTP方法:
Http協(xié)議是萬維網(wǎng)中數(shù)據(jù)通信的基礎(chǔ)。在該協(xié)議中定義了從指定URL檢索數(shù)據(jù)的不同方法。
方法介紹:
GET:以未加密的形式將數(shù)據(jù)發(fā)送到服務(wù)器獲取響應(yīng)內(nèi)容
POST: 用于將HTML表單數(shù)據(jù)上傳到服務(wù)器
PUT:用上傳的內(nèi)容替換目標(biāo)資源的數(shù)據(jù)
DELETE:刪除由URL給出的目標(biāo)資源的數(shù)據(jù)
HEAD: 和GET方法相同,但沒響應(yīng)體
默認(rèn)情況下,F(xiàn)lask路由響應(yīng)GET請求。但是,可以通過為route()裝飾器提供方法參數(shù)來更改此首選項。
為了演示在URL路由中使用POST方法,首先讓我們創(chuàng)建一個HTML表單,并使用POST方法將表單數(shù)據(jù)發(fā)送到URL。
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action = "http://localhost:5000/login"method = "post"> <p>Enter Name:</p> <p><input type = "text" name = "nm"/></p> <p><input type = "submit" value = "submit"/></p> </form> </body> </html>
loginok.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>hello {
{ name }}</h2>
</body>
</html>WC_public_flask.py
from flask importFlask, render_template, request
app = Flask(__name__, template_folder='templates')
@app.route('/')def login():
return render_template('login.html')
@app.route('/login',methods = ['POST', 'GET'])def loginok():
if request.method== 'POST':
user = request.form['nm']
return render_template('loginok.html',name =user)
else:
user = request.args.get('nm')
return render_template('loginok.html',name =user)
if __name__ == '__main__':
app.run(debug = True)以上就是如何理解Python全棧中的Flask,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站欄目:如何理解Python全棧中的Flask
轉(zhuǎn)載來源:http://www.chinadenli.net/article42/piioec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站營銷、網(wǎng)站導(dǎo)航、定制開發(fā)、網(wǎng)站建設(shè)、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)