1.Flask: Flask是一個基於Python開發並且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,對於Werkzeug本質是Socket服務端,其用於接收http請求並對請求進行預處理,然後觸發Flask框架,開發人員基於Flask框架提供的功能對請求進行相應的處理,並返 ...
1.Flask:
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
from werkzeug.wrappers import Request, Response @Request.application def hello(request): return Response('Hello World!') if __name__ == '__main__': from werkzeug.serving import run_simple run_simple('localhost', 4000, hello) werkzeugView Code
2. 虛擬環境
安裝: pip3 install virtualenv
# 創建虛擬環境
virtualenv env1
# 進入虛擬環境
Scripts/activate
# 退出虛擬環境
Scripts/deactivate
3.flask框架
簡介:輕量級框架
Django:無socket、中間件、路由系統、視圖(CBV,FBV)、 模板、ORM、cookie、Session、Admin、Form、緩存、 信號、序列化....
Flask:無socket、中間件(擴展)、路由系統、視圖(CBV)、第三方模板(jinja2)、cookie、Session弱爆了
a. 什麼是wsgi?
Web服務網管介面,協議。
b. Flask依賴一個實現了WSGI協議的模塊:werkzeug
4.基本使用:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
練習:
from flask import Flask,render_template,request,redirect,session app = Flask(__name__) app.secret_key = "sdsfdsgdfgdfgfh" def wrapper(func): def inner(*args,**kwargs): if not session.get("user_info"): return redirect("/login") ret = func(*args,**kwargs) return ret return inner @app.route("/login",methods=["GET","POST"]) 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",**{"msg":"用戶名或密碼錯誤"}) return render_template("login.html",msg="用戶名或者密碼錯誤") @app.route("/index",methods=["GET","POST"]) @wrapper def index(): # if not session.get("user_info"): # return redirect("/login") return render_template("index.html") if __name__ == '__main__': app.run(debug=True)
保存session的數據存到了瀏覽器上,
- 優點:減輕了服務端的壓力
- 缺點:不安全
4.路由系統:
- @app.route('/post/<path:path>')
- @app.route('/login', methods=['GET', 'POST'])