《Flasky Web開發二》程式的基本結構

2021-08-21 12:09:40 字數 3535 閱讀 5205

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。除...