Python web框架 Flask的基本使用

2021-09-26 10:23:41 字數 4767 閱讀 3179

flask是乙個基於python開發並且依賴jinja2模板和werkzeug wsgi服務的乙個微型框架,對於werkzeug本質是socket服務端,其用於接收http請求並對請求進行預處理,然後觸發flask框架,開發人員基於flask框架提供的功能對請求進行相應的處理,並返回給使用者,如果要返回給使用者複雜的內容時,需要借助jinja2模板來實現對模板的處理,即:將模板和資料進行渲染,將渲染後的字串返回給使用者瀏覽器。

「微」(micro) 並不表示你需要把整個 web 應用塞進單個 python 檔案(雖然確實可以 ),也不意味著 flask 在功能上有所欠缺。微框架中的「微」意味著 flask 旨在保持核心簡單而易於擴充套件。flask 不會替你做出太多決策——比如使用何種資料庫。而那些 flask 所選擇的——比如使用何種模板引擎——則很容易替換。除此之外的一切都由可由你掌握。如此,flask 可以與您珠聯璧合。

預設情況下,flask 不包含資料庫抽象層、表單驗證,或是其它任何已有多種庫可以勝任的功能。然而,flask 支援用擴充套件來給應用新增這些功能,如同是 flask 本身實現的一樣。眾多的擴充套件提供了資料庫整合、表單驗證、上傳處理、各種各樣的開放認證技術等功能。flask 也許是「微小」的,但它已準備好在需求繁雜的生產環境中投入使用。

pip3 install flask
#flask依賴乙個實現wsgi協議的模組:werkzeug

def hello(request):

return response('hello world!')

if __name__ == '__main__':

from werkzeug.serving import run_******

run_******('localhost', 4000, hello)

ask依賴wsgi,實現wsgi模組:wsgiref,werkzeug,uwsgi

與django的簡單比較

django:無socket,依賴第三方模組wsgi,中介軟體,路由系統(cbv,fbv),檢視函式,orm。cookie,session,admin,form,快取,訊號,序列化。。

flask:無socket,中介軟體(需要擴充套件),路由系統,檢視(cbv)、第三方模組(依賴jinja2),cookie,session弱爆了

from flask import flask

def hello_world():

return 'hello world!'

if __name__ == '__main__':

1.例項化flask物件時,可選的引數

# 但是flask中還有其他引數,以下是可填的引數,及其預設值

def __init__(self, import_name, static_path=none, static_url_path=none,

static_folder='static', template_folder='templates',

instance_path=none, instance_relative_config=false,

root_path=none):

template_folder:模板所在資料夾的名字

在return render_template時會將上面兩個進行拼接,找到對應的模板位址

static_folder:靜態檔案所在檔案的名字,預設是static,可以不用填

如:在根目錄下建立目錄,templates和static,則return render_template時,可以找到裡面的模板頁面;如在static資料夾裡存放11.png,在引用該時,靜態檔案位址為:/******/11.png

instance_path和instance_relative_config是配合來用的、

繫結路由關係的兩種方式

#方式一

def index():

return 'index'

#方式二

def index():

return "index"

self.add_url_rule(rule='/index.html', endpoint="index", view_func=index, methods=["get","post"]) #endpoint是別名

or

新增路由關係的本質:將url和檢視函式封裝成乙個rule物件,新增到flask的url_map欄位中

2.flask中裝飾器應用

from flask import flask,render_template,request,redirect,session

''''''

def inner(*args,**kwargs):

if not session.get("user_info"):

return redirect("/login")

ret = func(*args,**kwargs)

return ret

return inner

def login():

if request.method=="get":

return render_template("login.html")

else:

# print(request.values) #這個裡面什麼都有,相當於body

username = request.form.get("username")

password = request.form.get("password")

if username=="haiyan" and password=="123":

session["user_info"] = username

# session.pop("user_info") #刪除session

return redirect("/index")

else:

# return render_template("login.html",**)

return render_template("login.html",msg="使用者名稱或者密碼錯誤")

def index():

# if not session.get("user_info"):

# return redirect("/login")

return render_template("index.html")

if __name__ == '__main__':

debug = true 是指進入除錯模式,伺服器會在 我們的**修改後, 自動重新載入,有錯誤的話會提醒,每次修改**後就不需要再手動重啟

1.獲取請求資料,及相應

- request

- request.form #post請求的資料

- request.args #get請求的資料,不是完全意義上的字典,通過.to_dict可以轉換成字典

- request.querystring #get請求,bytes形式的

- response

- return render_tempalte()

- return redirect()

- return ""

v = make_response(返回值) #可以把返回的值包在了這個函式裡面,然後再通過.set_cookie繫結cookie等

- session

- 存在瀏覽器上,並且是加密的

- 依賴於:secret_key

2.flask中獲取url後面的引數(from urllib.parse import urlencode,quote,unquote)

get請求:

url為: 

from urllib.parse import urlencode,quote,unquote

def login():

if request.method == 'get':

s1 = request.args

s2 = request.args.to_dict()

s3 = urlencode(s1)

s4 = urlencode(s2)

s5 = unquote(s3)

s6 = unquote(s4)

s7 = quote("胡衝")

print('s1',s1)

print('s2',s2)

print('s3',s3)

print('s4',s4)

print('s5',s5)

print('s6',s6)

print('s7',s7)

return render_template('login.html')

#############結果如下####################

s1 immutablemultidict([('name', "'胡衝'"), ('nid', '2')])

s2 s3 name=%27%e8%83%a1%e5%86%b2%27&nid=2

s4 name=%27%e8%83%a1%e5%86%b2%27&nid=2

s5 name='胡衝'&nid=2

s6 name='胡衝'&nid=2

s7 %e8%83%a1%e5%86%b2

python web開發框架

django python web應用開發框架 django 應該是最出名的python框架,gae甚至erlang都有框架受它影響。django是走大而全的方向,它最出名的是其全自動化的管理後台 只需要使用起orm,做簡單的物件定義,它就能自動生成資料庫結構 以及全功能的管理後台。diesel 基...

python web框架 推薦

flask 很輕,花很少的成本就能夠開發乙個簡單的 非常適合初學者學習。學會以後,可以考慮學習外掛程式的使用,用 sqlalchemy flask sqlalchemy 來對你的資料庫進行控制。django全能型框架 但是不建議初學者學習,因為要學習的東西太多了,一下子難以吸收會失去興趣。當然,dj...

Python Web開發框架

python中的web框架 flask例程 可重用成熟,穩健 可擴充套件性良好 提高開發速度 web框架中的概念 大包大攬的django 優點 完美文件。全套解決方案 cache,session,orm 強大的url路由配置 自助管理後台 缺點 系統緊耦合 自帶的orm不夠強大 template比較...