一、Flask應用
1、介紹
-
定義
Flask:是一個使用Python編寫的輕量級web應用框架。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。
-
特點
良好的文檔、豐富的插件、包含開發服務器和調試器、集成支持單元測試、RESTful請求調度、支持安全cookies、基于Unicode。
-
用處
Python可以直接用flask啟動一個web服務頁面。
2、flask基本框架
(在python的venv虛擬環境運行)
from flask import Flask #啟動flask模塊,創建一個Flask類
app = Flask(__name__) #__name__系統變量,指的是py文件的文件名(相當于反序列化中的魔術方法)@app.route('/') #路由,相當與路徑
def lin1():return "sb"if __name__=='__main__': #只能被python直接運行,不能作為組件或模塊被調用app.run()
運行
運行后發現需要去瀏覽器查看(由于是127.0.0.1所以只能在虛擬機上的瀏覽器查看,沒法在主機查看)
?要在本機上運行,需要改變運行的host
from flask import Flask #啟動flask模塊,創建一個Flask類
app = Flask(__name__)@app.route('/lin1') #將路徑指向lin1
def lin1():return "sb"
@app.route('/lin2')
def lin2():return "2b"if __name__=='__main__':app.run(debug=True,host="172.16.17.29",port=6000)#debug=True:改完文件的配置可以自動生效(建議只在學習中開啟,實戰有漏洞,導致命令執行)#host="172.16.17.29",port=6666:將網址改為172.16.17.29端口改為80使得能在本機上運行
運行
?可以看到訪問的地址改變了,且debug已啟動(PIN碼為562-864-305)
訪問lin1
訪問lin2
?3、flask變量規則
構建動態url
from flask import Flask
app = Flask(__name__)@app.route('/lin1/<name>')
def lin1(name): #傳入字符型參數namereturn "sb %s" % name@app.route('/lin2/<int:yourid>')
def lin2(yourid): #傳入整數型參數youridreturn "id %d" % yourid@app.route('/lin2/<int:yourmoneny>')
def lin2(yourmoneny): #傳入浮點型參數yourmonenyreturn "id %.2f" % yourmoneny if __name__=='__main__':app.run(debug=True,host="172.16.17.29",port=6000)
效果:
?
4、flask的http方法
擴展:
方法 用法 POST 用于向指定資源提交數據進行處理請求,例如提交表單或上傳文件。數據被包含在請求體中,可能導致新的資源建立或原有資源修改。 GET 請求指定的頁面信息,并返回實體內容。 HEAD 類似于GET,只不過返回的響應中沒有具體的內容,僅傳輸狀態行和標題部分,用于獲取報頭信息。 PUT 從客戶端向服務器傳送的數據取代指定的內容,即向指定的位置上傳最新的內容。 DELETE 請求服務器刪除Request-URL所標識的資源。
簡單的登入界面
新創建一個templates文件夾,在里面放入一個html文件
<html><body><form action = "http://172.16.17.29:6000/login" method = "post"><p>Your Name</p><p><input type = "text" name = "name"></p><p><input type = "submit" value = "submit"></p></form></body>
</html>
開始構造flask框架
from flask import Flask,request,redirect,url_for,render_template
import requests
app = Flask(__name__)@app.route('/') #登錄頁面(‘/’)
def index():return render_template("index.html")
#render_template:根據傳入的參數和變量,替換模板文件中的占位符,并返回最終的 HTML 內容給客戶端。@app.route('/user/<name>') #用戶頁面(‘/user/’)
def user(name):return "hello %s" % name@app.route('/login',methods = ['GET','POST']) #可以用POST方法也可以用GET方法
def login():if request.method == 'POST':user = request.form['name'] #request.form['name']:獲取表單數據return redirect(url_for('user',name = user)) #redirect:重定向到/user/<name>else:user = request.args.get('name','')return redirect(url_for('user',name = user))if __name__ == '__main__':app.run(debug=True,host="172.16.17.29",port = 6000)
運行
POST
GET
結果