Flask入門及如何反向解析url
前言:
flask 輕量級框架 WEB框架
AJAX 在web中完成非同步請求和響應
DJango 重量級的web框架
Python Web
1.靜態網頁和動態網頁
1.靜態網頁:無法與伺服器做動態互動的網頁
2.動態網頁:可以和伺服器做動態互動的網頁
2.web與伺服器
1.web:網頁(html,css,js)
2.伺服器
能夠給使用者提供服務的機器就稱為伺服器
1.硬體與軟體
硬體:一臺主機
軟體:一個能夠接收使用者請求並響應的程式
1.APACHE
2.TOMCAT
3.IIS(internet information service)
4.Nginx
2.作用:
1.儲存web上的資訊
2.能夠處理使用者的請求(request)並給出響應(response)
3.執行伺服器端程式
4.具備一定的安全功能
3.框架
1.什麼是框架
框架實際是一個為了解決某一開放性問題而存在的一種程式結構
框架本身提供了一些基本的功能
我們只需要在基礎的功能上搭建自己的操作就可以了.
2.python web框架
1.flask-輕量級
2.webpy-輕量級
3.tornado-非同步框架
4.Django-重量級框架
3.框架模式
1.MTV
M:Models:模型層,主要負責資料庫建模
T:Templates:模板,用來處理使用者的顯示內容 如:html
V:Views,檢視,處理與使用者打交道的內容(請求和響應)
2.MVC
M:Models:模型層,主要負責資料庫建模
V:Views,檢視處理使用者的顯示內容
C:Controller,控制器,用於與使用者互動的部分內容(請求和響應)
4.Flask框架
1.什麼是Flask框架
Flask是一個基於Python並且依賴於jinja2模板引擎和Werkzeug WSGI服務的一個微型框架
WSGI:WEB SERVER GATEWAY INTERFACE(WEB服務網管埠)
Flask是採用MTV的框架模式
2.安裝Flask
1.檢視已安裝的Flask版本
在python的互動模式中:
1.import flask
沒報錯:已經安裝Flask,可以繼續檢視版本
2.flask _version_
檢視已安裝的版本
2.安裝Flask
sudo pip3 install flask
3.Flask初始化詳情
見程式碼....
from flask import Falsk
app = Flask(__name__)
@app.route("/")
def index():
return "hello"
if __name__ == "__main__":
# app執行falsk的應用(啟動flask的服務),預設在本機開啟的埠是5000,port = 5555,
# 在制定埠啟動程式端
# debug = True 將啟動模式更改為除錯模式(開發環境中推薦寫Ture,生產環境中必須改為False)
app.run(debug=True)
5.Flask -路由(route)
1.什麼是路由
客戶端傳送請求給web伺服器,web伺服器再將請求傳送給Flask程式例項
程式例項需要知道每一個url請求地址,到python執行函式的一個對映.
處理url和函式之間的關係的程式就是"路由"
2.路由的體現
在flsak中,路由是通過@app.route 裝飾器來表示的
1.路由的基本表示
@app.route('/')
def index():
return "xxx"
#localhost:5000/admin/lodin
@app.route('/admin/login')
def admain_login():
return "xxx"
2.帶引數的路由
路由中可以攜帶引數表示不同的資料
http://localhost:5000/show/laowang
http://localhost:5000/show/wangwc
http://localhost:5000/show/laowang.gebi
1.基本帶參路由
@app.route('/show/<name>')
def show(name):
name:表示的就是從位址列上傳遞過來的資料
return 'xxx'
2.帶多個路徑的路由
http://localhost:5000/show/laowang/36
@app.route("/show/<name>/<age>")
def show(name,age):
return "xxx"
3.指定引數型別的路由
@app.route("/show/<name>/<int:age>")
def show(name,age):
name:字串
age:整數
int:型別轉換器
flask中支援的型別轉換器:
型別轉換器 作用
預設 字串,不能有斜槓("/")
int: 整型
float: 浮點型
path: 字串,可以有斜槓('/')
3.多個URL的路由匹配
為多個訪問地址匹配同一個檢視處理函式
@app.route('/地址1')
@app.route('/地址2')
...
def index():
return "xxx"
4.路由中設定http的請求方法
flask路由也允許設定對應的請求方法(post/get),只有將匹配上請求方法的路徑才能交給對應的檢視處理函式去處理
所有的路由,預設只接受get請求
@app.route("/xxx/xxx",methods=["POST"])
def xxx:
pass
@app.route("/xxx/xxx",methods=["GET","POST"])
def xxx:
#該函式既能接受get請求也能接受post請求
pass
5.URL的反向解析
正向解析:
程式自動解析,根據@app.route()中的訪問路徑,來匹配處理函式
反向解析:
通過檢視處理函式的名稱自動生成對應的訪問路徑
在flask 中實現反向解析的話要使用:
url_for(funName,args)
funName:要生成的地址的函式名
args:該地址中需要的引數
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/index')
def index():
return "<h1>這是首頁</h1>"
@app.route('/admin/login/form/show/<name>')
def show(name):
return "引數的值為:%s" % name
@app.route('/url')
def url():
#通過index()解析出對應的訪問路徑
url_index = url_for('index')
print("index():"+url_index)
#通過show(name)解析出對應的訪問路徑
url_show = url_for('show',name='wangwc')
print("show(name):"+url_show)
return "<a href='%s'>訪問show(name)</a>" % url_show
if __name__ == "__main__":
app.run(debug=True)