Flask的第一個程式——hello world
阿新 • • 發佈:2018-11-10
一個簡單的Flask程式
步驟: 1.匯入Flask 2.建立Flask應用例項 3.定義檢視函式並繫結URL 4.啟動伺服器 # 匯入Flask(從falsk包中匯入Flask類) from flask import Flask 建立Flask類的物件:Flask類原始碼規定此處必須要由一個引數:import_name,其餘的都有預設值,因此必須要傳入引數,但是為什麼要傳入__name__? #同時原始碼規定這個引數必須要是字串.__name__在這個檔案中就是'__main__',但是不能是python中已有的標準模組名. # 傳入__name__的原因:用來確定程式例項所在的路徑,方便訪問預設資料夾static,同時對於靜態請求的訪問和處理更方便. app = Flask(__name__) # endpoint:就是指檢視函式名的字串形式 # 定義路由的url地址:括號裡必須要由引數(第一個引數是Rule),同時必須要是字串形式,還要是用/開頭.methods可以修改請求方式,但是需要是列表格式。可以放多種請求方式。 @app.route('/' , methods=['POST']) def hello(): return 'hello world',404 # 啟動伺服器 # __name__表示當前模組名.如果是在自身模組中,就是__main__如果成為是被匯入檔案的時候,表示的就是檔名 if __name__ == '__main__': # 檢視路由對映:具有的url地址和試圖函式名的關係 print(app.url_map) app.run(debug=True) #debug調式模式:幫助定位錯誤資訊,同時可以自動跟蹤程式碼變化。 控制檯輸出結果為: Map([<Rule '/' (OPTIONS, GET, HEAD) -> hello>, <Rule '/static/<filename>' (OPTIONS, GET, HEAD) -> static>]) Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) Map和Rule分別是類,Map就是指路由對映,用列表儲存,第二個引數/,表示的就是裝飾器儲存的Rule規則,接下來的引數代表請求方法,最後一個引數代表檢視函式名的字串形式,就表示斷點(endpoint)。 注意return返回的hello world,不是僅僅只反映回的這個字串,而是一系列的響應報文。 預設的埠號是5000:在原始碼內有定義。 補充: 1.如果定義了兩個同樣的檢視函式,即檢視函式名重名,會導致無法執行程式。 2.如果定義了不同的試圖函式名,但是url路徑是一樣的,這個結果是可以執行,但是瀏覽器頁面的返回結果是取決於第一個檢視函式的返回值,這取決於Map的容器型別是列表,是按照順序查詢的,先找到就可以停止了。因此url地址是可以重複的。 3.不同的http請求方法是對應不同的操作,GET查詢,POST插入,PUT修改,DELETE刪除。 4.注意return的返回值可以是其他的資料型別嗎?還是隻能是字串形式? 字典型別:會報錯誤,500伺服器錯誤,啟動debug除錯之後,顯示字典型別錯誤。字典屬於python資料型別,瀏覽器無法識別,同時列表也是不可以。但是元組形式是可以的,但是需要是(str,int)第一個引數就是返回的字串數值。第二個數字以狀態碼的形式返回。json也是可以返回的。 5.我們可以不使用裝飾器定義路由url地址嗎? 答案自然是肯定的,我們可以檢視route的原始碼,發現其實內部實現的功能程式碼是: self.add_url_rule(rule,endpoint,f,**options) return f 實現裝飾器功能程式碼: app.add_url_rule('/' ,'hello' ,hello) 前後hello代表的含義不一樣,第一個是但會的端點(試圖函式名的字串形式),第二個代表試圖函式名,注意不能加() 6.程式碼在啟動後存在路由對映存在一個預設的路由對映,會有一個靜態的static路由對映。是flask自己實現的,方便靜態路徑訪問。 7.return同樣可以在後面返回狀態碼:404,在這個過程中,即使是瀏覽器不存在狀態嗎,也是可以返回的。只不過顯示UNKNOWN,這個功能可以用來實現前後端的資料互動。
相關配置引數
debug=True 就屬於一個配置資訊 載入配置檔案有三種實現方式: 1.載入配置物件 (config是flask的內建配置物件) 前提:需要在當前路徑下有一個名字為config.py的檔案,裡面定義了一個Config的類,其中定義 debug=True from config import Config app.config.from_object(Config) 2.載入配置檔案 前提,有個config。ini的檔案嗎,裡面定義了debug=True app.config.from_pyfile('config.ini') 3.載入環境變數 app.config.from_envvar(‘SET’) 此時更改環境變數,在其中新增一個SET,對應的是有debug除錯的檔案。 注意 :重點掌握第一種,因為其是定義一個類,擴充套件性很強,可以將其Config設定為基本配置類。 #基本配之類: class Config: DEBUG = None #開發模式配置 class DevelopmentConfig(Config): DEBUG = True #生產模式配置 class ProductionConfig(Config): DEBUG = False (debug除錯模式一般只在開發模式使用) 然後定義一個字典對映: config_dict = { 'dev':DevelopmentConfig, 'pro’: ProductionConfig } 然後在開發檔案中倒入這個字典,然後在家在配置檔案中使用字典config['div']來決定使用什麼配置檔案。
重定向(redirect/url_for)
1. # 匯入flask內建函式redirect from flask import Flask,redirect # 重定向:重新發送網路請求 app = Flask(__name__) @app.route('/') def hello(): # 重定向到百度 #當專案的路徑url或者是檔案發生變化時,可以使用重定向。 return redirect('http://www.baidu.com') if __name__ == '__main__': app.run() 我們同樣是訪問根路徑,此時跳轉到百度頁面,同時注意瀏覽器的狀態碼為302.同時redirect的引數可以用變數來傳入。 **2. url_for方式** # 匯入flask內建函式redirect from flask import Flask,url_for app = Flask(__name__) @app.route('/') def index(): # 重定向到百度 # 當專案的路徑url或者是檔案發生變化的時候,可以使用 return redirect('http://www.baidu.com') @app.route('/for') def demo_url_for(): return redirect(url_for(index)) if __name__ == '__main__': app.run() 注意url_for裡面的引數是endpoint(端點),而redirect接收的引數就是具體的地址。相比而言,重定向是使用url更方便,會使程式碼更靈活。