Flask學習筆記

txmmy發表於2024-03-18

Flask 構成

1.路由(Routing):Flask 使用路由來定義 URL 和對應的處理函式。透過裝飾器 @app.route(),可以將一個 URL 對映到相應的處理函式上,從而實現請求的路由和處理。

2.檢視函式(View Functions):檢視函式是 Flask 中處理請求的核心元件,它接收請求並返回響應。檢視函式通常被裝飾器繫結到特定的 URL 路由上。

3.請求上下文(Request Context):Flask 在處理請求時會建立一個請求上下文,其中包含了請求的資訊,例如請求的方法、URL 引數、表單資料等。檢視函式可以透過 request 物件來訪問請求上下文中的資料。

4.響應物件(Response Object):檢視函式需要返回一個響應物件,用於向客戶端返回資料。Flask 提供了 make_response() 函式和 Response 類來構造響應物件,也可以直接返回字串、模板渲染結果等。

5.模板引擎(Template Engine):Flask 預設使用 Jinja2 模板引擎來渲染 HTML 頁面。模板引擎允許開發者在模板中嵌入動態內容,從而將資料和檢視分離,使頁面更加靈活和易於維護。

6.上下文全域性變數(Context Globals):Flask 提供了一些上下文全域性變數,例如 current_app 和 g,可以在檢視函式中使用。current_app 表示當前應用的例項,g 是一個全域性變數字典,可以在同一請求中共享資料。

7.擴充套件(Extensions):Flask 的功能可以透過擴充套件來增強,例如資料庫支援、表單驗證、使用者認證等。Flask 社群提供了大量的擴充套件,使開發者能夠更方便地新增功能。

8.藍圖(Blueprint):藍圖是一種將 Flask 應用分割為小模組的方式,可以將相關的路由和檢視函式組織在一個藍圖中,使應用更加結構化和易於管理。

優勢

1.簡單易用:Flask 的設計理念是保持簡單和直觀,它的 API 非常易於學習和使用,使得開發者可以快速上手開發 Web 應用。

2.輕量級:Flask 是一個微型框架,提供了一些基本的功能,沒有過多的依賴,因此載入速度快,適合構建小型和中小型的 Web 應用。

3.靈活可擴充套件:儘管 Flask 是輕量級的,但它允許開發者根據需要選擇和新增擴充套件,以增加更多功能,例如資料庫支援、表單驗證、使用者認證等。

4.RESTful 支援:Flask 提供了良好的支援來構建 RESTful 風格的 API,使開發者可以輕鬆地構建基於 Web 的服務端應用。

5.Jinja2 模板引擎:Flask 使用 Jinja2 模板引擎來渲染 HTML 頁面,使頁面構建更加靈活和易於維護。
(什麼是Jinja:模板引擎)

6.開放性和活躍社群:Flask 是一個開源專案,有一個活躍的社群,擁有大量的第三方庫和擴充套件可供選擇,幫助開發者更快地構建功能豐富的 Web 應用。

劣勢

1.功能有限:Flask 是一個微型框架,相對於一些全功能的 Web 框架,它提供的功能相對較少。對於複雜的大型 Web 應用,可能需要結合一些擴充套件或其他庫來滿足需求。

2.缺少內建功能:由於 Flask 是一個輕量級框架,它並不包含一些高階的功能,例如資料庫遷移、使用者認證等。這些功能需要使用擴充套件或手動實現。

3.依賴於擴充套件:為了增加功能,開發者需要依賴一些擴充套件,而不是直接內建在框架中。這在一定程度上增加了應用的複雜性,需要管理更多的依賴關係。

4.相對較小的社群:雖然 Flask 有一個活躍的社群,但相對於一些大型框架,其社群規模可能較小,這可能會影響到獲取支援和解決問題的速度。

總體來說,Flask 是一個非常優秀和受歡迎的 Web 框架,它的簡單性和靈活性使得它適用於快速開發小型和中小型的 Web 應用和 API。但對於複雜的大型 Web 應用,可能需要權衡其功能限制並結合其他工具來滿足需求。

出處:https://www.cnblogs.com/xiaoqingSister/p/17605659.html

1.flask-restful

2.不用restful

(1)返回json

from flask import Flask, jsonify
from datetime import datetime

app = Flask(__name__)

@app.route('/time')
def get_time():
    now = datetime.now()
    return jsonify({'time': now.strftime('%Y-%m-%d %H:%M:%S')})

if __name__ == '__main__':
    app.run(debug=True)

(2)接收get

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/user')
def get_user():
    name = request.args.get('name')
    age = request.args.get('age')
    response_data = {'name': name, 'age': age}
    return jsonify(response_data)

if __name__ == '__main__':
    app.run()


postman測試結果:

(3)接收post

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/user', methods=['POST'])
def create_user():
    name = request.form.get('name')
    age = request.form.get('age')
    response_data = {'name': name, 'age': age}
    return jsonify(response_data)

if __name__ == '__main__':
    app.run()

(4)接受get和post

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'GET':
        name = request.args.get('name')
        age = request.args.get('age')
        data = {'name': name, 'age': age}
        return jsonify(data)
    elif request.method == 'POST':
        name = request.json.get('name')
        age = request.json.get('age')
        data = {'name': name, 'age': age}
        return jsonify(data)

if __name__ == '__main__':
    app.run(debug=True)


(5)接收JSON

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/user', methods=['POST'])
def create_user():
    request_data = request.get_json()
    name = request_data.get('name')
    age = request_data.get('age')
    response_data = {'name': name, 'age': age}
    return jsonify(response_data)

if __name__ == '__main__':
    app.run()


3.request.json和request.get_json()區別

出處:https://blog.csdn.net/qq233325332/article/details/129078525
https://www.cnblogs.com/Owen-ET/p/16551514.html

相關文章