Flask Python Web框架(一)
阿新 • • 發佈:2018-11-25
一、框架的定義
1、框架是一個為了解決開放性問題而存在的一種程式結構,其本身提供了一些最基本的功能,使用 者只需要在其基礎上搭建自己的操作就可以了。 2、框架模式 1、MTV M:Models,模型層,主要負責資料庫建模 T:Templates,模板層,用於處理使用者的顯示內容,如html V:Views,檢視,處理與使用者打交道的內容(請求和響應) 2、MVC M:Models,模型層,主要負責資料庫建模 V:View,檢視,處理使用者的顯示內容 C:Controler,控制器,用於與使用者互動的部分內容(請求和響應)
二、Flask框架
Flask框架是一種輕量級的 Python Web 框架。Flask基於python並且依賴於Jinja2模板引擎 和Werkzeug WSGI服務的一個微型框架。 WSGI:Web Server Gateway Interface(WEB服務網管介面) 1、Flask框架採用MTV的框架模式 2、安裝Flask 檢視已安裝的Flask版本: 在python互動模式中:import flask; flask.__version__; 安裝Flask:sudo pip3 install flask; 3、路由 客戶端傳送請求給web伺服器,web伺服器再將請求傳送給Flask程式例項 Flask程式例項需要知道每個url請求所對應的執行程式碼是誰。所以程式中必須要建立一個 url請求地址到python執行函式的一個對映。處理url和函式之間的關係的程式就是路由。 4、 在Flask中,路由是通過@app.route裝飾器表示。 路由的基本表示 @app.route('/') def index(): return "xxx" 基本帶參的路由 @app.route('/show/<name>') def show(name): name表示的是從位址列上傳來的資料 return "xxx" 帶多個引數的路由 http://localhost:5000/show/laowang/36 @app.route('/show/<name>/<age>') def show(name,age): return "xxx" 指定引數型別的路由 @app.route('/show/<name>/<int:age>') def show(name,age): name:字串 age:整數 5、多個URL的路由匹配 為多個訪問地址匹配同一個檢視處理函式 @app.route('/地址1') @app.route('/地址2') ... def index(): return "xxx" 6、路由中設定HTTP請求方法 Flask路由也允許設定對應的請求方法(post/get),只有將匹配上請求方法的路徑才能交給 對應的檢視處理函式去處理。所有的路由,預設只接受get請求。 @app.route('/xxx/xxx',methods=['GET','POST']) def xxx: pass ** methods可以是GET,可以是POST ,也可以二者同時接收,函式中可以用if語句判斷之後處 理相對應的請求響應 7、URL的反向解析 正向解析:程式自動解析,根據@app.route()中的訪問路徑,來匹配處理函式 反向解析:通過檢視處理函式的名稱自動生成對應的訪問路徑 在Flask中要實現反向解析則需要使用: url_for(funname,args) funname:要生成地址的函式名 args:該地址中需要的引數
三、模板 - Templates
1、模板: 在Flask中就是允許響應給使用者看的網頁 在模板中,允許包含“佔位變數”來表示動態的內容 模板最終也會被解析成字串再響應給客戶端,這一過程通常稱為“渲染”。 Flask中的模板是依賴於 Jinja2 模板系統 2、模板設定 預設情況下,Flask會在程式資料夾中的 templates 的子資料夾中搜索模板 預設情況下,需要手動建立templates 3、模板的渲染 作用:在檢視中,將模板檔案(xx.html) 渲染成字串之後,再響應給客戶端瀏覽器 函式:render_template('xxx.html') return render_template('xxx.html') 4、模板中的語法(重難點) 1、變數:是一種特殊的佔位符,告訴模板引擎該位置的值是從渲染模板時的資料中獲取出來的 在檢視中: @app.route('/') def index(): return render_template('xxx.html',變數1=值1,變數2=值2,...) 在模板中: {{變數名}} <h1>{{name}}</h1> 2、過濾器:過濾器是允許在變數輸出前改變變數的值 語法:{{變數|過濾器}} Jinja2 模板中常見過濾器: 過濾器名 說明 capitalize 首字元變大寫,其他變小寫 lower 將值轉換為小寫 upper 將值轉換為大寫 title 將值中的每個單詞首字元變大寫 trim 去掉值兩邊的空格 3、標籤:每個標籤標示的是不同點伺服器端的功能 常用的標籤 if 標籤 (1)基本if結構 {% if 條件 %} {% endif %} (2)if ... else ...結構 {% if 條件 %} 滿足條件時要執行的程式碼 {% else %} 不滿足條件時執行的程式碼 {% endif %} (3)if ... elif ... elif ... else {% if 條件1 %} 滿足條件1時要執行的程式碼 {% elif 條件2 %} 滿足條件2時要執行的程式碼 {% elif 條件3 %} 滿足條件3時要執行的程式碼 {% else %} 不滿足以上所有條件時要執行的程式碼 {% endif %} for標籤 {% for 變數 in 元組|列表|字典 %} {% endfor %} 在Jinja2模板的迴圈中,支援內部變數 - loop loop作用:記載當前迴圈中的一些相關資訊 loop常用屬性: 1、index 用法:loop.index 作用:記錄當前迴圈的次數,從 1 開始記錄 2、index0 用法:loop.index0 作用:同上,從0開始記錄 3、first 用法:loop.first 作用:值為True,則表示當前迴圈是第一次迴圈 4、last 用法:loop.last 作用:值為True,則表示當前迴圈是最後一次迴圈 macro 標籤(巨集) 1、作用:相當於是在模板中宣告函式 2、語法:使用 {% macro %} 宣告巨集 {% macro 名稱(引數列表) %} xxx xxx {% endmacro %} 3、在獨立的檔案中宣告巨集 建立macro.html模板檔案 作用:定義專案中要用到的所有的巨集 在使用的網頁中,匯入macro.html {% import 'macro.html' as macros %} 4、include 標籤 將其他的模板檔案包含到當前的模板檔案中 語法:{% include 'xxx.html' %} 5、靜態檔案處理 1、什麼是靜態檔案? 在Flask中不能與伺服器動態互動的檔案都是今天檔案 如:圖片,css檔案,js檔案,音訊檔案,... <img src="images/a.jpg"> <link rel="" href ="css/a.css"> <script src =""></script> <video src=""></video> <audio src=""></audio> 2、靜態檔案的處理 1、所有的靜態檔案必須放在名為static的目錄中 static目錄要放在專案的根目錄處 FlaskDemo02 templates static 2、所有的靜態檔案必須通過/static/路徑去訪問 /static/images/a.jpg