Flask 框架全面詳解

Flask 是一個輕量級的 Python Web 框架,以其簡潔、靈活和易擴展的特性廣受歡迎。接下來我將從多個維度詳細介紹 Flask 框架。

1. Flask 核心特性

微框架設計

  • 輕量級:核心功能精簡,只包含基本組件
  • 可擴展:通過擴展添加所需功能
  • 無強制約束:不強制使用特定數據庫或模板引擎

主要組件

  • 路由系統:URL 到 Python 函數的映射
    點擊了解詳情
  • 模板引擎:Jinja2 集成
    詳情點擊這里了解jinja2
  • 開發服務器:內置開發用 Web 服務器
  • 調試工具:交互式調試器和重載器
  • 單元測試支持:提供測試客戶端

2. Flask 應用結構

最小應用示例

from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return 'Hello, World!'if __name__ == '__main__':app.run()

典型項目結構

/myflaskapp/static       # 靜態文件(CSS, JS, 圖片)/templates    # 模板文件/venv         # 虛擬環境(可選)app.py        # 主應用文件config.py     # 配置文件requirements.txt # 依賴列表

3. 路由系統詳解

基本路由

@app.route('/')
def index():return 'Home Page'@app.route('/about')
def about():return 'About Page'

動態路由

@app.route('/user/<username>')
def show_user(username):return f'User: {username}'@app.route('/post/<int:post_id>')
def show_post(post_id):return f'Post #{post_id}'

HTTP 方法處理

@app.route('/login', methods=['GET', 'POST'])
def login():if request.method == 'POST':return do_login()else:return show_login_form()

4. 請求與響應處理

請求對象

from flask import request@app.route('/search')
def search():query = request.args.get('q', '')  # GET參數return f'Searching for: {query}'

響應控制

from flask import make_response@app.route('/custom')
def custom_response():response = make_response('Custom Response')response.headers['X-Custom-Header'] = 'Value'response.status_code = 201return response

重定向與錯誤

from flask import redirect, abort@app.route('/old')
def old_page():return redirect('/new')@app.route('/admin')
def admin():abort(401)  # 未授權訪問

5. 模板系統 (Jinja2)

基本模板使用

from flask import render_template@app.route('/hello/<name>')
def hello(name):return render_template('hello.html', name=name)

模板文件示例 (hello.html)

<!doctype html>
<html>
<head><title>Hello</title></head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

模板特性

  • 變量插值{{ variable }}
  • 控制結構{% if %}, {% for %}
  • 模板繼承{% extends "base.html" %}
  • 宏定義{% macro render_comment(comment) %}

6. 數據庫集成

Flask-SQLAlchemy 示例

from flask_sqlalchemy import SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)class User(db.Model):id = db.Column(db.Integer, primary_key=True)username = db.Column(db.String(20), unique=True, nullable=False)@app.route('/users')
def users():users = User.query.all()return render_template('users.html', users=users)

7. 用戶會話與認證

基本會話管理

from flask import sessionapp.secret_key = 'your-secret-key'@app.route('/login', methods=['POST'])
def login():session['username'] = request.form['username']return redirect('/')@app.route('/logout')
def logout():session.pop('username', None)return redirect('/')

Flask-Login 擴展

from flask_login import LoginManager, UserMixin, login_userlogin_manager = LoginManager(app)class User(UserMixin, db.Model):# 用戶模型定義@login_manager.user_loader
def load_user(user_id):return User.query.get(int(user_id))@app.route('/login')
def login():user = User.query.first()login_user(user)return 'Logged in'

8. 配置管理

配置方式

# 直接設置
app.config['DEBUG'] = True# 從對象加載
app.config.from_object('configmodule.ConfigClass')# 從文件加載
app.config.from_pyfile('config.py')# 從環境變量加載
app.config.from_envvar('APP_CONFIG_FILE')

常用配置項

DEBUG = True  # 調試模式
SECRET_KEY = 'your-secret-key'  # 會話加密
SQLALCHEMY_DATABASE_URI = 'sqlite:///site.db'  # 數據庫URI

9. 藍圖(Blueprints) - 模塊化應用

創建藍圖

# admin/__init__.py
from flask import Blueprintbp = Blueprint('admin', __name__, url_prefix='/admin')@bp.route('/')
def admin_index():return 'Admin Page'

注冊藍圖

from admin import bp as admin_bp
app.register_blueprint(admin_bp)

10. 擴展生態系統

Flask 的強大之處在于其豐富的擴展生態系統:

  • 數據庫:Flask-SQLAlchemy, Flask-MongoEngine
  • 表單處理:Flask-WTF
  • 用戶認證:Flask-Login, Flask-Security
  • REST API:Flask-RESTful, Flask-RESTx
  • 測試:Flask-Testing
  • 部署:Flask-SocketIO, Flask-Caching

11. 部署選項

開發服務器

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

生產部署選項

  • WSGI 服務器:Gunicorn, uWSGI
  • 反向代理:Nginx, Apache
  • 平臺服務:Heroku, AWS, Google App Engine

12. 最佳實踐

  1. 應用工廠模式
def create_app(config=None):app = Flask(__name__)app.config.from_object(config or Config)# 初始化擴展db.init_app(app)# 注冊藍圖app.register_blueprint(main_bp)return app
  1. 使用環境變量管理配置
import os
app.config['SECRET_KEY'] = os.environ.get('SECRET_KEY') or 'dev-key'
  1. 錯誤處理
@app.errorhandler(404)
def not_found(error):return render_template('404.html'), 404

總結

Flask 是一個靈活而強大的微框架,它:

  • 提供核心的 Web 開發功能而不強加約束
  • 通過擴展可以輕松添加所需功能
  • 適合從小型應用到大型復雜項目的各種規模
  • 強調代碼的可讀性和簡潔性

無論是構建簡單的 REST API 還是復雜的 Web 應用程序,Flask 都是一個優秀的選擇。它的學習曲線平緩,但隨著對框架理解的深入,你可以逐步構建出高度定制化的解決方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91790.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91790.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91790.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

概率 多維隨機變量與分布

一、二維1、二維隨機變量及其分布假設E是隨機試驗&#xff0c;Ω是樣本空間&#xff0c;X、Y是Ω的兩個變量&#xff1b;(X,Y)就叫做二維隨機變量或二維隨機向量。X、Y來自同一個樣本空間。聯合分布函數 F(x,y)P(X≤x,Y≤y)&#xff0c;即F(x,y)表示求(x,y)左下方的面積。 F(x,…

Spring AI MCP:解鎖大模型應用開發新姿勢

一、AI 浪潮下的新利器 ——Spring AI MCP 登場在當今數字化時代&#xff0c;人工智能&#xff08;AI&#xff09;無疑是最耀眼的技術明星&#xff0c;正以前所未有的速度滲透到各個領域&#xff0c;深刻改變著我們的生活和工作方式。從智能語音助手到圖像識別技術&#xff0c;…

ThinkPHP5x,struts2等框架靶場復現

ThinkphpThinkphp5x遠程命令執行及getshell首先我們先找一個環境&#xff0c;或者自己搭建一個環境fofa&#xff1a;body"ThinkPHP V5"搭建&#xff1a;vulhub/thinkphp/5-rcedocker-compose up -d然后去訪問我們的環境遠程命令執行/?sindex/think\app/invokefuncti…

Hyperliquid:揭秘高性能區塊鏈共識引擎HyperBFT

大家好&#xff0c;今天我們一起探討Hyperliquid這個高性能區塊鏈項目以及它背后的共識引擎。Hyperliquid能在擁擠的去中心化交易賽道&#xff08;DEX&#xff09;中脫穎而出&#xff0c;很大程度上要歸功于其高效的共識機制——HyperBFT。 為了徹底搞懂HyperBFT&#xff0c;我…

大模型開發框架LangChain之構建知識庫

1.前言 為了避免 llm正確的廢話和幻覺&#xff0c;知識庫可以說是現在開發 agent的必備了。同時&#xff0c;作為 rag中的 r&#xff0c;知識庫召回的成功率會極大的影響 llm的最終回復效果。一般&#xff0c;會把知識庫召回的內容作為背景知識給到 llm&#xff0c;并在 prompt…

NPM打包時,報reason: getaddrinfo ENOTFOUND registry.nlark.com

先說解決方法&#xff1a;將 package-lock.json 文件中的 registry.nlark.com 改為 registry.npmmirror.com現象&#xff1a;npm ERR! code ENOTFOUND npm ERR! syscall getaddrinfo npm ERR! errno ENOTFOUND npm ERR! network request to https://registry.nlark.com/url-too…

python內置庫os與sys的區別是什么?分別能實現什么功能?

Python 的 os 和 sys 是兩個功能截然不同但都非常重要的內置庫&#xff0c;它們分別服務于不同的交互場景&#xff1a;前者專注于與操作系統交互&#xff0c;后者專注于與 Python 解釋器本身交互。以下是詳細解析&#xff1a; 一、os 庫&#xff1a;操作系統交互接口 os 庫&…

【云計算】云主機的親和性策略(一):快樂旅行團

《云主機的親和性策略》系列&#xff0c;共包含以下文章&#xff1a; 1?? 云主機的親和性策略&#xff08;一&#xff09;&#xff1a;快樂旅行團2?? 云主機的親和性策略&#xff08;二&#xff09;&#xff1a;集群節點組3?? 云主機的親和性策略&#xff08;三&#xf…

USRP捕獲手機/路由器數據傳輸信號波形(下)

目錄&#xff1a; USRP捕獲手機/路由器數據傳輸信號波形&#xff08;上&#xff09; USRP捕獲手機/路由器數據傳輸信號波形&#xff08;中&#xff09; USRP捕獲手機/路由器數據傳輸信號波形&#xff08;下&#xff09; 四、路由器MIMO-OFDM系統 本文深入分析采集手機與路由…

位運算在權限授權中的應用及Vue3實踐

在現代前端應用中&#xff0c;權限管理是一個至關重要的功能模塊。隨著應用復雜度的提示功能&#xff0c;權限細粒度越來越精細&#xff0c;如何高效地管理和判斷權限成為前端開發的一大挑戰。位運算作為一種高效的運算方式&#xff0c;在權限管理領域有著獨特的優勢。本文將詳…

面試實戰,問題二十二,Java JDK 17 有哪些新特性,怎么回答

Java JDK 17 新特性面試回答指南 作為一名Java開發者&#xff0c;了解JDK 17的新特性是面試中的關鍵點。JDK 17&#xff08;Java SE 17&#xff09;于2021年9月發布&#xff0c;是一個長期支持&#xff08;LTS&#xff09;版本&#xff0c;引入了多項改進以提升開發效率、安全性…

【MySQL安全】什么是SQL注入,怎么避免這種攻擊:前端防護、后端orm框架、數據庫白名單

基本概念SQL注入是OWASP Top 10安全風險之一&#xff0c;它利用了應用程序對用戶輸入數據的不當處理。當應用程序直接將用戶輸入拼接到SQL查詢中而沒有進行適當的過濾或轉義時&#xff0c;就可能發生SQL注入攻擊。攻擊原理假設有一個登錄表單的SQL查詢&#xff1a;SELECT * FRO…

pyqt5顯示任務欄菜單并隱藏主窗口,環境pyqt5+vscode

環境 pyqt5vscode 環境搭建見 https://blog.csdn.net/huiaifen/article/details/125175261 新建一個QMainWindow 1 在VSCode的資源管理器中&#xff0c;右鍵選擇 PYQT:New Form&#xff0c;打開Qt Designer2 在打開的窗口中選 “Main Window”&#xff0c;然后選“創建”3 直接…

SpringBoot項目數據脫敏(自定義注解)

文章目錄前言一.配置1.脫敏類型枚舉&#xff1a;DesensitizeType2.注解&#xff1a;Desensitize3.序列化類&#xff1a;DesensitizeJsonSerializer4.工具類&#xff1a;DesensitizeUtil二、測試&#xff1a;DesensitizeTest三、效果展示總結前言 在互聯網應用中&#xff0c;用戶…

PSO-TCN-BiLSTM-MATT粒子群優化算法優化時間卷積神經網絡-雙向長短期記憶神經網絡融合多頭注意力機制多特征分類預測/故障診斷Matlab實現

基本介紹 1.Matlab實現PSO-TCN-BiLSTM-MATT粒子群算法優化時間卷積神經網絡-雙向長短期記憶神經網絡融合多頭注意力機制多特征分類預測&#xff0c;PSO-TCN-BiLSTM-Multihead-Attention&#xff1b; 多頭自注意力層 (Multihead-Self-Attention)&#xff1a;Multihead-Self-Atte…

第一篇:Linux 運維入門:虛擬機部署與基礎環境配置

目錄 一、準備工作與環境規劃 二、虛擬機網絡配置 1、虛擬網絡編輯器設置 2、系統網絡配置 3、主機名配置 三、Hosts 文件與 SSH 免密配置 配置 hosts 文件編輯/etc/hosts文件實現主機名解析&#xff1a; 分發 hosts 文件到其他節點 SSH 免密登錄配置在 zhangsan101 上…

(一)全棧(react配置/https支持/useState多組件傳遞/表單提交/React Query/axois封裝/Router)

文章目錄 項目地址 一、基礎配置 1.1 支持https 1. 安裝所需要的包 2. 配置 1.2 常用 1. 字符串拼接 二、組件 2.1 useState組件傳遞 1. App里初始化useState 2. useState和方法的傳遞 3. 接收傳遞來的狀態和方法 2.2 表單提交 1. 表單組件處理用戶輸入數據 2. App傳來的submit…

【abc417】E - A Path in A Dictionary

Problem StatementYou are given a simple connected undirected graph G with N vertices and M edges. The vertices of G are numbered vertex 1, vertex 2, …, vertex N, and the i-th (1≤i≤M) edge connects vertices Ui? and Vi?.Find the lexicographically smalle…

linux火焰圖

火焰圖簡介火焰圖是一種性能分析的可視化工具&#xff0c;它將CPU的調用棧&#xff08;Call Stack&#xff09;信息以矩形火焰的形式展現出來。Y軸&#xff1a;代表調用棧的深度&#xff08;函數A調用了函數B&#xff0c;B就疊在A上面&#xff09;。X軸&#xff1a;代表CPU的抽…

解剖 .NET 經典:從 Component 到 BackgroundWorker

1?? 背景與定位在 .NET Framework 2.0 時代&#xff0c;微軟引入了 BackgroundWorker 來解決 WinForm/WPF 場景下“耗時操作阻塞 UI 線程”的問題&#xff1b;而 Component 早在 1.0 就已存在&#xff0c;是所有可視化/非可視化設計器的“基類”。理解這兩者的源碼與機制&…