當前位置:
首頁 > 知識 > python:web框架Falsk知識點總結

python:web框架Falsk知識點總結

Falsk

a、Flask是一個基於Python開發並且依賴jinja2模板和Werkzeug WSGI服務的一個微型框架,對於Werkzeug本質是Socket服務端,其用於接收http請求並對請求進行預處理,然後觸發Flask框架,開發人員基於Flask框架提供的功能對請求進行相應的處理,並返回給用戶,如果要返回給用戶複雜的內容時,需要藉助jinja2模板來實現對模板的處理,即:將模板和數據進行渲染,將渲染後的字元串返回給用戶瀏覽器

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

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

二、安裝

a、安裝:pip3 install flask

三、虛擬環境

a、安裝: pip3 install virtualenv

b、# 創建虛擬環境virtualenvenv1

c、# 進入虛擬環境Scripts/activate

d、# 退出虛擬環境Scripts/deactivate

四、flask框架

a、簡介:輕量級框架

Django:無socket、中間件、路由系統、視圖(CBV,FBV)、 模板、ORM、cookie、Session、Admin、Form、緩存、信號、序列化....

Flask:無socket、中間件(擴展)、路由系統、視圖(CBV)、第三方模板(jinja2)、cookie、Session弱爆了

b、什麼是wsgi?

Web服務網管介面,協議。

c、Flask依賴一個實現了WSGI協議的模塊:werkzeug

五、flask

a、 -依賴於wsgi模塊:wsgiref,werkzeug,wsgi

b、 -實例化Flask對象

-靜態文件前綴 /xxx

-靜態文件目錄

-模板路徑

c、添加路由關係

-將 Rule(url和視圖函數)添加到Flask對象的url_map欄位中

-兩種添加路由的方式

d、request

-request.form

-request.args

六、基本使用

a、保存session的數據存到了瀏覽器上,

 - 優點:減輕了服務端的壓力

 - 缺點:不安全

b、路由系統:

@app.route("/post/

")

@app.route("/login", methods=["GET", "POST"])

@app.route("/user/")

@app.route("/post/")

@app.route("/post/")

七、路由系統

a、-可傳入參數

@app.route("/user/")

@qpp.route("/post/",methods=["GET","POST"],endpoint="fff")

b、反向生成URL:url_for

c、擴展Flask的路由系統,讓它支持正則:

八、請求響應

a、在django中用make_safe而在Flask中用make_response

九、模板語言

a、模板的使用

Flask使用的是Jinja2模板,所以其語法和Django無差別

b、自定義模板方法

Flask中自定義模板方法的方式和Bottle相似,創建一個函數並通過參數的形式傳入render_template,

十、session

a、 -session是否還有其他方法?

-它與字典方法相同

b、-session超時時間如何設置:

c、除請求對象之外,還有一個 session 對象。它允許你在不同請求間存儲特定用戶的信息。它是在 Cookies 的基礎上實現的,並且對 Cookies 進行密鑰簽名要使用會話,你需要設置一個密鑰。

d、

設置:session["username"] = "xxx"

刪除:session.pop("username", None)

十一、閃現(flash)

a、session從在在服務端的一個字典中,session保存的數據取一次,它還是會有。而flash是基於session創建的,flash支持在裡面放值,只要在裡面取值它就會沒有。閃現就是

b、在session的基礎上,把它的值真實的放在session上,當去它的時候不僅把它的值取走,還把session的東西去掉。

十二、藍圖

a、藍圖用於為應用提供目錄劃分

藍圖URL前綴:xxx = Blueprint("account", __name__,url_prefix="/xxx")

藍圖子域名:xxx = Blueprint("account", __name__,subdomain="admin")

# 前提需要給配置SERVER_NAME: app.config["SERVER_NAME"] = "wupeiqi.com:5000"

# 訪問時:admin.wupeiqi.com:5000/login.html

十三、DBUtils

a、DBUtils是Python的一個用於實現資料庫連接池的模塊。

b、連接池的三種模式:

(1)、第一種模式:

它的缺點:每一次請求反覆創建資料庫的鏈接,鏈接的次數太多

(2)、第二種模式:

它的缺點:不能支持並發

(3)、第三種模式:

它是基於DBUtils實現資料庫連接池

-為每個線程創建一個鏈接,該線程關閉時,不是真正的關閉,本線程再次調用時,還是使用的最開始的創建的鏈接,知道線程終止,資料庫鏈接才關閉

-創建一個連接池(10個鏈接),為所有線程提供鏈接,使用時來進行獲取,使用完畢時,再次放回到連接池。

c、DBUtils的應用:

十四、session

a、session和cookie的原理和區別:

cookie是保存在瀏覽器上的鍵值對

session是存在服務端的鍵值對(服務端的session就是一個大字典,字典中是隨機字元串)(session與request原理相同)(session原理跟上下文也有關係)

session依賴於cookie存在

b、session流程

十五、session源碼解析

a、先執行Flask的__call__方法 ,調用出來wsgi_app,它先做request的上下文做完,請求剛進來到push中,它先處理request將請求相關的數據,然後添加到了local中,

b、 緊接著處理session(將RequestContext對象(request,session)添加到local中),request(將request信息封裝到Request(environ)對象並複製給requestContext 對 象),然後獲取cookie中的隨機字元串,檢驗是否有,沒有就生成。根據隨機字元串,獲取服務端session保存的值。把session放到內存中,

c、 執行wsgi_app方法下面的視圖函數。執行完視圖函數返回到full_dispatch_requesthong ,觸發只執行一次的裝飾器中(觸發Flask信號),

d、 執行完這個裝飾器,緊接著執行下面的特殊的裝飾器,如果這些特殊裝飾器沒有返回值,那麼rv=None,如果有返回值,頁面時就顯示這個返回值,

e、如果沒有返回值,觸發執行那個視圖函數,拿返回值。請求執行完返回後,調用finalize_request,對它的返回值進行封裝。

十六、Flask和Django的區別

a、請求相關的數據

-Django:參數

-Flask: 基於Local,LocalStark對象

b、多個請求進來會不會混淆

-單線程

-多線程

-協程

解決: from greenlet import getcurrent as get_ident

十七、Flask信號

a、Flask框架中的信號基於blinker

b、安裝:pip3 install blinker

c、十個信號

d、flask信號本生自己沒有,用的是別人的,並且這些信號通過裝飾器全部可以代替了的,但是Django裡面有些特殊的

就是那些model操作根本沒有裝飾器,就是同過內置的信號來完成的

十八、django內置的信號

十九、Wtform

a、WTForms是一個支持多個web框架的form組件,主要用於對用戶請求數據進行驗證。

b、安裝:pip3 install wtform

c、用途:

1、用戶登錄註冊

當用戶登錄時候,需要對用戶提交的用戶名和密碼進行多種格式校驗。如:

用戶不能為空;用戶長度必須大於6;

密碼不能為空;密碼長度必須大於12;密碼必須包含 字母、數字、特殊字元等(自定義正則);

二十、SQLALchemy

a、介紹

SQLALchemy是一個基於Python實現的ORM框架。該框架是建立在DB API之上,使用關係對象映射進行資料庫操作

簡言之便就是:將類和對象轉換成SQL,然後使用數據API執行SQL並獲取執行的結果

b、安裝:pip3 install SQLALchemy

c、組成部分

d、SQLALcheam本省無法操作資料庫,其必須來pymysql等第三方插件,Dialect用於數據API的交流,根據配置文件的不同

調用不同的資料庫API,從而實現對資料庫的操作

作者:孟慶健

源自:https://www.cnblogs.com/mengqingjian/p/8452898.html


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 python 的精彩文章:

用Python破解鬥地主殘局
Python成長日記-初識裝飾器

TAG:python |