2.1 初始化:所有flasky程式都要建立乙個程式例項,web伺服器使用web伺服器閘道器介面把接受自客戶端的所有請求都轉交給這個flasky類物件處理。
from flask import flasky
在python中,_name_變數就是所需的值
2.2 路由和檢視函式
瀏覽器發請求到伺服器。伺服器發請求到flasky程式例項,程式例項儲存url到python函式的對映關係,即路由。
def index();
return 『』
例子即index()函式註冊為程式根位址的處理程式。當訪問部署的位址時,函式返回值即為響應,函式即為檢視函式。
def user(name):
return 『』 % name
尖括號為動態部分,預設字串,支援還有float和path,flasky將動態部分作為引數傳入函式。
2.3 啟動伺服器
run方法啟動flasky整合的開發web伺服器
if _name_ == 『_main_』:
這裡_name_ == 『_main_』是確保直接執行這個指令碼才啟動開發web伺服器;debug=true啟用除錯模式。
2.42.4.1 乙個完整的程式
from flask import flask
def index():
return ''
if __name__=='__main__':
使用python直譯器解釋
* running on (press ctrl+c to quit)
瀏覽器開啟即可hello world!
2.4.2 另乙個完整的包含動態路由的程式
#coding=utf8
from flask import flask
def index():
return ''
def user(name):
return '' %name
if __name__=='__main__':
使用python直譯器解釋
* running on (press ctrl+c to quit)
瀏覽器開啟為根目錄,顯示hello world!;瀏覽器開啟user/jorson為子目錄,顯示hello,jorson!
2.5.1 請求-響應迴圈
2.5.1.1 請求上下文(request\session)
flask從客戶端收到請求,讓檢視函式訪問請求物件。為了避免大量的可有可無的引數,使用上下文臨時把物件變為全域性可訪問。
from flask import request
def index():
user_agent = request.headers.get('user-agent')
return 'your browser is %s
' % user_agent
這裡把request當全域性變數,但實際上不可能是全域性變數。flask讓特定變數在乙個執行緒中全域性可訪問。
2.5.2 請求排程
檢視hello.py生成的對映:
(venv) c:\windows\system32\flasky>python
map([index>,
' (head, options, get) -> static>,
' (head, options, get) -> user>])
2.5.3 請求鉤子
flask提供註冊通用函式的功能,可在請求前後呼叫,請求鉤子使用修飾器實現:
before_first_request:註冊乙個函式,在處理第乙個請求之前執行
before_request:註冊乙個函式,在每次請求之前執行
after_request:註冊乙個函式,如果沒有未處理的異常丟擲,在每次請求之後執行
teardown_request:註冊乙個函式,即使有未處理的異常丟擲,也在每次請求之後執行
請求鉤子函式和檢視函式之間共享資料一般使用上下文全域性變數g,例如before_request處理程式可以從資料庫載入已登陸使用者,儲存在g.user中,隨後呼叫檢視函式再使用g.user獲取使用者。
2.5.4 響應
2.5.4.1 返回元組
http響應的很重要的部分是狀態碼,flask預設為200表明請求已成功處理。若使用其他數字**則可以作為第二個返回值
def index():
return '',400
2.5.4.2 返回物件
除了返回1,2,3個值組成的元組, flask還可以返回request物件。make_response()函式接受1,2或3個引數,並返回response物件。
from flask import make_response
def index():
response = make_response('')
response.set_cookie('answer','42')
return response
2.5.4.3 重定向
特殊響應型別,無頁面文件,只告訴瀏覽器乙個新位址用於載入新頁面。常用於web表單。重定向常使用302狀態碼,指向位址由location首部提供。重定向響應可以使用3個值形式的返回值生成,也可以在response物件中設定,也用於redirect()輔助函式:
from flask import redirect
def index():
return redirect('')
2.5.4.4 處理錯誤的響應
abort函式生成。
from flask import abort
def get_user(id):
user = load_user(id)
if not user:
abort(404)
return '' % user.name
注意:abort直接丟擲異常
2.6 flask擴充套件
flask支援大量擴充套件,包括python標準包和**庫。
2.6.1 flask-script支援命令列選項
flask-script是乙個flask擴充套件,為flask程式新增了乙個命令列解析器,自帶一組常用選項,支援自定義命令。
安裝flask-script:pip install flask-script
from flask import flask
from flask_script import manager
def index():
return ''
def user(name):
return '' % name
if __name__ == '__main__':
manager.run()
執行**可以使用一組基本命令列選項
shell:在程式上下文中啟動python shell會話,進行執行維護任務或測試、除錯
runserver:啟動web伺服器,除錯模式
--host:引數,告訴web伺服器在哪個網路介面上監聽來自客戶端的連線,預設監聽本地連線,使用下述命令來監聽公共網路介面的連線:
python hello.py runserver --host 0.0.0.0
微信小程式開發(二) 雲開發
1 概念 2 傳統小程式開發與雲開發的區別 簡單的呼叫乙個雲函式 求a b的和 獲取當前使用者的openid 小程式雲開發登入方式 使用者通過點選按鈕,從小程式獲取使用者的資訊,而小程式通過雲函式獲得使用者的資訊,雲函式給小程式端返回使用者的openid,小程式獲取到 使用者的資訊之後,將使用者的資...
Web應用程式開發 二
web應用程式開發 二 乙個host代表乙個web站點 1 虛擬目錄的根目錄 自己指定乙個檔案系統目錄是web站點的根目錄,在server.xml中在元素中間增加 2 虛擬目錄的子目錄 1 在server.xml中在元素中間增加 3 達成乙個war包,在server.xml檔案中配置 虛擬子目錄的名...
C語言程式開發例項(二)
例項008 判斷閏年 從鍵盤上輸入乙個表示年份的整數,判斷該年份是否是閏年,判斷後的結果顯示在螢幕上。1 計算閏年的方法用自然語言描述如下 如果某年能被4整除但不能被100整除,或者該年能被400整除則該年為閏年。在本例項中我們用如下表示式來表示上面這句話 year 4 0 year 100!0。除...