共計 3506 個字符,預計需要花費 9 分鐘才能閱讀完成。
這篇文章主要講解了“Python 的 flask 相關知識點有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“Python 的 flask 相關知識點有哪些”吧!
一、flask
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 也許是“微小”的,但它已準備好在需求繁雜的生產環境中投入使用。
d、視頻講解
二、安裝
a、安裝:pip3 install flask
視頻講解
三、虛擬環境
a、安裝: pip3 install virtualenv
b、# 創建虛擬環境 virtualenv env1
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
六、基本使用
from flask import Flask
# 實例化 Flask 對象
app = Flask(__name__)
# 生成路由關系,并把關系保存到某個地方,app 對象的 url_map 字段中
@app.route(/xxxx) # @decorator
def index():
return Index
# def index():
# return Index
# app.add_url_rule(/xxx , n1 , index)
if __name__ == __main__ :
# 啟動程序,監聽用戶請求
# 一旦請求到來,執行 app.__call__方法
# 封裝用戶請求
# 進行路由匹配
app.run()
a、保存 session 的數據存到了瀏覽器上,– 優點:減輕了服務端的壓力 – 缺點:不安全
b、路由系統:
@app.route(/post/path:path) @app.route(/login , methods=[ GET , POST]) @app.route(/user/ username) @app.route(/post/int:post_id) @app.route(/post/float:post_id)
七、路由系統 a、- 可傳入參數
@app.route(/user/ username)
@qpp.route(/post/ int:post_id ,methods=[ GET , POST],endpoint= fff )
b、反向生成 URL:url_for
c、擴展 Flask 的路由系統,讓它支持正則:
from flask import Flask,url_for
app = Flask(__name__)
# 定義轉換的類
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
自定義 URL 匹配正則表達式
def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex
def to_python(self, value):
路由匹配時,匹配成功后傳遞給視圖函數中參數的值
:param value:
:return:
return int(value)
def to_url(self, value):
使用 url_for 反向生成 URL 時,傳遞的參數經過該方法處理,返回的值用于生成 URL 中的參數
:param value:
:return:
val = super(RegexConverter, self).to_url(value)
return val
# 添加到 converts 中
app.url_map.converters[xxx] = RegexConverter
# 進行使用
@app.route(/index/ xxx( \d+):nid ,endpoint= xx )
def index(nid):
url_for(xx ,nid=123)
return Index
if __name__ == __main__ :
app.run()
八、請求響應
from flask import Flask
from flask import request
from flask import render_template
from flask import redirect
from flask import make_response
app = Flask(__name__)
@app.route(/login.html , methods=[ GET , POST])
def login():
# 請求相關信息
# request.method
# request.args
# request.form
# request.values
# request.cookies
# request.headers
# request.path
# request.full_path
# request.script_root
# request.url
# request.base_url
# request.url_root
# request.host_url
# request.host
# request.files
# obj = request.files[the_file_name]
# obj.save(/var/www/uploads/ + secure_filename(f.filename))
# 響應相關信息
# return 字符串
# return render_template(html 模板路徑 ,**{})
# return redirect(/index.html)
# response = make_response(render_template( index.html))
# response 是 flask.wrappers.Response 類型
# response.delete_cookie(key)
# response.set_cookie(key , value)
# response.headers[X-Something] = A value
# return response