Flask 輕量級WEB框架
靜態網頁:
不能與服務器交互的網頁都是靜態網頁
動態網頁:
能夠與服務器進行交互的網頁
WEB:瀏覽器 網頁(前端三劍客)
服務器:
能夠給用戶提供服務的機器就是服務器
硬件來說就是一臺主機
還要配備一個能夠接受用戶請求並給出響應用程序
APACHE
TOMCAT
IIS(Internet Information Service)
Nginx(Python用的較多)
作用:
存儲WEB所需要的信息
所有的服務器都能夠處理用戶請求(request)並作出回應(response)
能夠執行服務器端的程序
具備一定的安全性功能
框架:
是一種為了解決開放性問題而存在的一種結構
框架本身也提供了一些基本功能,
我們只需要在自己的基礎功能上搭建屬於自己的操作即可
Python的WEB框架:
Flask
Django
Tornado
Webpy
Flask框架:
什麼是Flask?
Flask是一個基於Python並且依賴於jinja2模板引擎和
werkzeug WSGI(Web server Gateway Interface)
外部服務網關接口 服務的一個微型框架
Flask的框架模式:
Python的框架基本都是MTV的
M:Models 模型層
負責數據庫建模 與數據庫打交道
T:Templates 模板層
用於處理用戶顯示的網頁內容
V:Views:視圖層
用於處理與用戶交互的部分 處理用戶的請求並給出
響應內容的一段邏輯程序
而其他語言框架基本都是MVC:
M:Models 模型層
同上
V:Wiews 視圖層
視圖層 用處處理用戶顯示的內容的 等同於MTV的 T
C:Controller:控制器
處理用戶的請求與響應等同於MTV的 V
安裝:
在線安裝
sudo pip3 install flask
離線安裝:
9個依賴包 裝到吐血身亡~ 還是算了~~
Pycharm安裝:
pip3可以下載安裝包:
pip3 download 包名
驗證安裝:
import flask
版本信息:flask.__version__
安裝好以後初始化項目:
打開終端
Paris@Python:~$ mkdir Flask
Paris@Python:~$ cd Flask/
Paris@Python:~/Flask$ mkdir FlaskProject
Paris@Python:~/Flask$ cd FlaskProject/
Paris@Python:~/Flask/FlaskProject$ touch run.py
Paris@Python:~/Flask/FlaskProject$ mkdir templates
創建好文件後用Pycharm打開
運行應用
from flask import Flask
app = Flask(__name__)
# 將主程序構建為 Flask應用命名為app
# 以便於處理用戶request 給出response
@app.route("/")
def index():
return "這是首頁 Hello World!"
# 配置路由
# 通過應用裝飾器函數來構建視圖函數 視圖函數必須有return
# /表示網站的首頁 根路徑
if __name__ == "__main__":
app.run(debug=True, port=8888)
# 運行app應用 並開啟調試模式
# 默認端口為5000 自定義端口為8888 可以省略
一個Flask框架就搭建好了
Flask路由(route):
什麼是路由?
客戶端發送給WEB服務器 WEB服務器再將請求發送給Flask程序實例
程序實例需要知道每個url請求要運行哪些代碼,所以需要建立一個
url 到 python 函數的映射,處理url和函數之間的關係的程序就是
路由在Flask中,路由是通過 @app.route 裝飾器來表示的
路由:
@app.route('/login')
def login():
return '這是登錄頁面'
@app.route('/register')
def register():
return '這是註冊頁面'
基本參數的路由:
# 定義帶一個參數的路由
@app.route('/show1/<name>')
def show1(name):
return "姓名為:%s
" % name
/<name>
多參數路由:
# 定義帶兩個參數的路由 參數可以更多
@app.route('/show2/<name>/') /<name>
def show2(name,age):
return "姓名為:%s,年齡為:%s" % (name,age)
指定參數數據類型路由:
# 定義帶兩個參數的路由,其中,age參數指定為整數
@app.route('/show3/<name>/') /<name>
def show3(name,age):
# age : 為 整型,並非 字符串
return "傳遞進來的參數是name:%s,age:%d" % (name,age)
Flask中所有支持的類型轉換器:
類型轉換器指定類型 表示age參數是一個整數 數據類型
不寫 默認字符串類型 不能有“/” 代表一個路徑
int: 整型
float:浮點型
path: 字符串型 可以有斜槓
@app.route("/show/<name>/") /<name>
@app.route("/show/<name>//<score>") /<name>
@app.route("show/<file>")
/<file>/<score>
多URL的路由匹配:
在一個視圖函數上可以添加多個裝飾器來指定rul路由的匹配規則
一個視圖處理函數中設置多個url路由規則
# 多 URL 路由匹配 可以一直網上寫~
@app.route('/')
@app.route('/index')
@app.route('/<page>')
@app.route('/index/<page>')
def index(page=None):
if page is None:
page = 1
return "當前頁數為:%d" % page
/<page>/<page>
路由設置HTTP請求方法
路由規則允許設置對應的請求方法
只有將匹配上請求方法路徑交給視圖函數處理去執行
@app.route('/post',methods=['POST','GET'])
def post():
return '這是post請求方式進來的'
只有POST請求方式允許訪問 localhost:5000/post
URL 的解析
正向解析:
程序自動解析 根據@app.route() 裝飾器中的訪問路徑來處理函數
反向解析:
通過視圖處理函數的名稱自動生成視圖處理函數的訪問路徑
Flask中提供了url_for(fun, ...)函數 用於反向解析
參數:
fun:指向函數名稱(通過app.route()裝飾後的函數)
後續:對應要構建的url上的變量
@app.route('/url')
def url_views():
# 將 login() 反向解析訪問地址
logUrl = url_for('login')
resp = " "
return resp
# 將 show2(name,age) 反向解析訪問地址
url = url_for('show2',name = 'Paris',age = 18)
print(url)
resp = " " 直接解析為超鏈接
return resp
特殊:
url_for("static", filename="style.css")
靜態文件反向解析
模板:
什麼是模板?
還是一個包含響應文本的文件 通常也是HTMl文件
該文件中可以包含“佔位變量” 來表示動態的內容
具體值 只有在請求中才能獲取 "佔位變量"最後會被真實的值替換
模板最終也會被解析成響應的字符串 這一過程也稱為"渲染"
Flask實際上是使用 Jinja2 強大的模板引擎
模板的設置:
默認情況下 Flask會在程序文件夾中的 templates 子文件夾中自動尋找模板
需要收動創建 templates 子文件夾 裡面放HTML文件
渲染模板:
在視圖函數中 通過 return render_tepmlate() 將模板渲染成字符串再響應給客戶端
render_template("xxx.html", arg1=value1, ...):
參數1:
xxx.html 要渲染給客戶端的HTML模板文件
參數2~n:
可以省略 要傳遞給模板動態顯示的變量佔位符
返回值:
字符串
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
str = render_template('index.html')
print(str)
return str
if __name__ == '__main__':
app.run(debug=True,port=5555)
送書了!送書了!送書了!查看置頂圖文,想要的書都是你的!
更多資訊,盡在雲棲科技快訊~
來科技快訊看新聞鴨~
快點關注我認識我愛上我啊~~~
閱讀更多 企業上雲那些事 的文章