Flask 框架(一):核心特性與基礎配置

目錄

一、為什么選擇 Flask?

二、Flask 核心概念與初始化

2.1 程序實例初始化

2.2 運行配置:app.run () 參數詳解

2.3 應用配置:三種參數設置方式

1. 字典直接配置(簡單臨時場景)

2. 配置文件導入(生產級安全)

3. 類繼承配置(復雜項目首選)

三、路由與視圖:Flask 的核心交互邏輯

3.1 基礎路由定義

3.2 路由高級特性

動態參數傳遞

路由反向解析

四、請求與響應:數據交互基礎

4.1 獲取請求數據

4.2 構建響應內容

小結


在 Python Web 開發領域,Flask 以其輕量、靈活的特性占據了重要地位。對于追求極簡開發體驗或需要高度定制化的項目來說,Flask 無疑是絕佳選擇。本文將從 Flask 的核心特性出發,詳解其基礎配置與核心概念,幫助初學者快速入門。

一、為什么選擇 Flask?

Web 開發涉及網絡通信、數據庫交互、會話管理等眾多基礎工作,直接從零開發不僅效率低下,還容易引入 bug。使用 Web 框架的核心價值在于 “避免重復造輪子”—— 框架處理底層邏輯,開發者專注業務實現。

與 Django 等 “全棧框架” 相比,Flask 的特點尤為突出:

  • 輕量級:僅保留核心功能(路由、視圖、模板渲染),無強制依賴
  • 高可定制:通過第三方擴展實現功能擴展(如數據庫、表單驗證等)
  • 核心依賴:基于 Werkzeug(HTTP 工具集)和 Jinja2(模板引擎)構建,兼顧性能與靈活性

適合場景:小型應用、API 服務、快速原型開發,或需要深度定制架構的項目。

二、Flask 核心概念與初始化

2.1 程序實例初始化

Flask 應用的起點是創建Flask對象,其初始化參數決定了項目的基礎結構:

from flask import Flaskapp = Flask(import_name=__name__,  # 必傳,通常為__name__,決定靜態文件路徑static_url_path='/static',  # 靜態文件訪問URL前綴,默認'/static'static_folder='static',  # 靜態文件存儲目錄,默認'static'template_folder='templates'  # 模板文件存儲目錄,默認'templates'
)

參數說明

  • import_name:用于定位項目根目錄,傳入__name__即可滿足絕大多數場景。
  • 靜態文件訪問規則:默認通過http://域名/static/文件名訪問,修改static_url_pathstatic_folder后需對應調整路徑。

示例:若將靜態目錄改為assets,訪問路徑需改為/static/文件名static_url_path默認值),但實際文件存儲在assets文件夾中。

2.2 運行配置:app.run () 參數詳解

創建實例后,通過app.run()啟動服務,常用參數如下:

app.run(host="0.0.0.0",  # 允許外部訪問(默認僅本地127.0.0.1)port=5000,  # 端口號,默認5000debug=True  # 調試模式開關
)

其中,debug=True(調試模式)是開發階段的 “利器”,開啟后:

  • 代碼修改后自動重啟服務,無需手動重啟
  • 錯誤發生時,前端直接顯示詳細堆棧信息(生產環境必須關閉,避免泄露敏感信息

2.3 應用配置:三種參數設置方式

Flask 的配置參數(如數據庫地址、密鑰等)可通過多種方式設置,適用于不同場景:

1. 字典直接配置(簡單臨時場景)

直接通過app.config字典修改,適合快速測試:

app.config['DEBUG'] = True  # 開啟調試模式
app.config['SECRET_KEY'] = 'dev_key'  # 會話加密密鑰(開發環境臨時值)
2. 配置文件導入(生產級安全)

將配置寫入獨立文件(如config.py),通過from_pyfile導入,避免敏感信息硬編碼:

# config.py
DEBUG = False
SECRET_KEY = 'your_secure_key'
SQLALCHEMY_DATABASE_URI = 'mysql://user:pass@localhost/db'# 應用中導入
app.config.from_pyfile('config.py')
3. 類繼承配置(復雜項目首選)

通過類定義配置,支持繼承與環境區分(如開發 / 生產環境):

class BaseConfig:SECRET_KEY = 'shared_key'SQLALCHEMY_TRACK_MODIFICATIONS = Falseclass DevConfig(BaseConfig):DEBUG = TrueSQLALCHEMY_DATABASE_URI = 'mysql://root:dev_pass@localhost/dev_db'class ProdConfig(BaseConfig):DEBUG = FalseSQLALCHEMY_DATABASE_URI = 'mysql://user:prod_pass@localhost/prod_db'# 根據環境選擇配置
app.config.from_object(DevConfig)  # 開發環境
# app.config.from_object(ProdConfig)  # 生產環境

三、路由與視圖:Flask 的核心交互邏輯

路由與視圖是 Flask 處理用戶請求的核心機制:路由定義 URL 規則,視圖函數處理業務邏輯并返回響應

3.1 基礎路由定義

通過@app.route裝飾器定義路由,語法簡潔直觀:

@app.route('/')  # 根路徑
def index():return 'Hello, Flask!'  # 返回字符串響應

  • 指定 HTTP 方法:默認僅支持GET,通過methods參數擴展:

    @app.route('/login', methods=['GET', 'POST'])
    def login():if request.method == 'GET':return '登錄頁面'else:return '處理登錄請求'
    
  • 查看項目路由:通過flask routes命令或代碼遍歷查看所有路由:

    for rule in app.url_map.iter_rules():print(f"URL: {rule.rule}, 方法: {rule.methods}, 視圖: {rule.endpoint}")
    

3.2 路由高級特性

動態參數傳遞

支持在 URL 中嵌入參數(如用戶 ID),并指定類型(int/float/string):

@app.route('/user/<int:user_id>')  # 僅匹配整數ID
def user_detail(user_id):return f"用戶ID: {user_id}"  # 參數直接傳入視圖函數
路由反向解析

使用url_for根據視圖函數名生成 URL,避免硬編碼路徑(尤其適合動態路由):

from flask import url_for, redirect@app.route('/profile')
def profile():return '個人主頁'@app.route('/redirect-to-profile')
def redirect_demo():# 反向解析profile視圖的URL(此處為'/profile')profile_url = url_for('profile')return redirect(profile_url)  # 重定向到個人主頁

四、請求與響應:數據交互基礎

Flask 通過request對象獲取客戶端數據,通過多種方式返回響應,滿足不同場景需求。

4.1 獲取請求數據

request對象封裝了 HTTP 請求細節,需從flask導入:

from flask import request@app.route('/submit', methods=['GET', 'POST'])
def submit():# 獲取GET參數(?name=xxx&age=18)name = request.args.get('name', '匿名')  # 第二個參數為默認值# 獲取POST表單數據(Content-Type: application/x-www-form-urlencoded)if request.method == 'POST':email = request.form.get('email')# 獲取JSON數據(Content-Type: application/json)json_data = request.get_json()  # 解析JSON為字典return f"Hello, {name}!"

4.2 構建響應內容

Flask 支持多種響應類型,覆蓋常見 Web 場景:

  1. 字符串響應:直接返回文本(默認text/html類型)

    return '簡單文本'
    
  2. 模板渲染:通過render_template返回 HTML 頁面(需配合templates目錄):

    from flask import render_template@app.route('/page')
    def show_page():# 傳遞變量到模板(templates/page.html)return render_template('page.html', title='Flask頁面', content='歡迎訪問')
    
  3. JSON 響應:通過jsonify返回 JSON 數據(自動設置Content-Type:application/json):

    from flask import jsonify@app.route('/api/data')
    def api_data():return jsonify(code=200, message='success', data={'key': 'value'})
    
  4. 重定向:通過redirect跳轉到其他 URL:

    from flask import redirect
    return redirect('/login')  # 重定向到登錄頁
    return redirect(url_for('index'))  # 結合反向解析更靈活
    
  5. 自定義響應:通過make_response設置狀態碼、響應頭:

    from flask import make_response@app.route('/custom')
    def custom_response():resp = make_response('自定義響應')resp.status_code = 201  # 狀態碼(默認200)resp.headers['X-Custom-Header'] = 'flask'  # 自定義響應頭return resp
    

小結

本文介紹了 Flask 的核心特性、基礎配置、路由視圖與數據交互邏輯,覆蓋了搭建簡單 Web 應用的全部基礎。Flask 的設計哲學是 “簡約而不簡單”—— 看似輕量的框架,卻能通過擴展靈活支撐復雜項目。

下一篇將深入講解 Flask 的高級特性,包括會話管理、模板引擎、數據庫交互、表單處理等實戰必備技能,幫助你從 “能運行” 提升到 “能落地”。

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

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

相關文章

社交圈子系統開源社交源碼 / 小程序+H5+APP 多端互通的底層技術分析

伴隨社交產品向“圈子化”、“內容驅動”發展方向演進&#xff0c;打造一套支持小程序、H5、APP 互通的社交圈子系統&#xff0c;已經成為構建垂直社區的基礎架構能力要求。本文圍繞一套典型的多端社交興趣平臺&#xff08;即友貓社區平臺&#xff09;的設計實踐&#xff0c;對…

gitlab-runner配置問題記錄

引言 筆者曾通過2種方式部署過 gitlab-runner&#xff0c;在 gitlab 中使用這個 runner 拉起 ci job 的過程中或多或少遇到些問題&#xff0c;主要都是 job 中無法訪問宿主機的docker 等組件。本篇文檔主要記錄 gitlab-runner 安裝及相關配置。 二進制部署 gitlab-runner 部署 …

每日面試題10:令牌桶

令牌桶算法&#xff1a;優雅的流量控制藝術在現代分布式系統中&#xff0c;流量控制如同交通信號燈般重要——它既不能讓請求"堵死"系統&#xff0c;也不能放任流量"橫沖直撞"。令牌桶算法&#xff08;Token Bucket Algorithm&#xff09;正是這樣一種精妙…

【java】消息推送

文章目錄Java網頁消息推送解決方案 短輪詢、長輪詢、SSE、Websocket

STM32 | 有源蜂鳴器響,無源蜂鳴器播音樂

目錄 Overview 有源蜂鳴器 無源蜂鳴器 有源蜂鳴器控制 GPIO配置 控制程序 無源蜂鳴器控制 反轉GPIO控制 GPIO配置 控制接口 PWM控制 GPIO配置 控制函數 改變頻率播音樂 原理 1. 頻率決定音調 2. 占空比決定音量 GPIO初始化 結構體定義和音符頻率表 播放接口 …

第十四章 gin基礎

文章目錄Gin快速搭建一個web服務Gin數據交互JSON串內容規范Gin使用結構體返回數據給前端Gin配置POST類型的路由Gin獲取GET請求參數Gin獲取POST請求參數-form-data類型Gin獲取POST請求參數-JSON類型Gin獲取參數綁定至結構體Gin快速搭建一個web服務 下載包 \\新建一個文件&…

Baumer工業相機堡盟工業相機如何通過YoloV8的深度學習模型實現PCB的缺陷檢測(C#代碼,UI界面版)

Baumer工業相機堡盟工業相機如何通過YoloV8的深度學習模型實現PCB的缺陷檢測&#xff08;C#代碼&#xff0c;UI界面版&#xff09;工業相機使用YoloV8模型實現PCB的缺陷檢測工業相機實現YoloV8模型實現PCB的缺陷檢測的技術背景在相機SDK中獲取圖像轉換圖像的代碼分析工業相機圖…

【Vivado那些事兒】AMD-XILINX 7系列比特流加密

前提&#xff1a;加密有風險&#xff0c;操作需謹慎前言在許多項目中&#xff0c;經過漫長的等待&#xff0c;我們的 FPGA 設計終于可以投入現場部署了。前期的資金的投入及知識產權的保護&#xff0c;我們需要對現場部署的 FPGA 進行比特流保護以防止逆向工程和未經授權的重復…

RK3588 安卓adb操作

adb&#xff08;Android Debug Bridge&#xff09;是一個用于與安卓設備進行通信和控制的工具。adb可以通過USB或無線網絡連接安卓設備&#xff0c;執行各種命令&#xff0c;如安裝和卸載應用&#xff0c;傳輸文件&#xff0c;查看日志&#xff0c;運行shell命令等。adb是安卓開…

【華為機試】70. 爬樓梯

文章目錄70. 爬樓梯描述示例 1示例 2提示解題思路核心分析問題建模算法實現方法1&#xff1a;動態規劃&#xff08;標準解法&#xff09;方法2&#xff1a;空間優化動態規劃&#xff08;最優解&#xff09;方法3&#xff1a;遞歸 記憶化方法4&#xff1a;數學公式&#xff08;…

山東大學軟件學院面向對象期末復習

面向對象 文章目錄面向對象04 類封裝接口 抽象類05 消息&#xff0c;實例化&#xff0c;靜態變量方法消息動/靜態類型語言對象創建類及實例具有下面特征對象數組的創建靜態數據成員構造函數06_0 繼承繼承是向下傳遞的JAVA為什么不支持多重繼承繼承的形式特殊化繼承替換原則規范…

讓 Windows 用上 macOS 的系統下載與保姆級使用教程

模擬蘋果桌面軟件下載&#xff1a;https://xpan.com.cn/s/8NFAGT 還記得 Windows 11剛發布時&#xff0c;很多人就說“果里果氣"的&#xff0c;但界面確實做的漂亮。 不知道現在有多少小伙伴正用著macOS&#xff0c;不過我敢確定&#xff0c;喜歡macOS的人絕對不少&#…

嵌入式硬件篇---繼電器

繼電器是一種通過小電流控制大電流的電磁開關&#xff0c;廣泛應用于自動化控制、電力系統和電子設備中。以下從工作原理、應用場景和電路特點三個方面詳細介紹&#xff1a;一、工作原理繼電器本質是電磁控制的機械式開關&#xff0c;核心部件包括&#xff1a;線圈&#xff08;…

鴻蒙網絡編程系列58-倉頡版TLS數字證書查看及驗簽示例

1. TLS數字證書驗簽簡介 數字證書的簽名驗證是網絡編程中一個重要的功能&#xff0c;它保證了數字證書是由可信任的簽發方簽署的&#xff0c;在此基礎上&#xff0c;我們才可以信任該證書&#xff0c;進而信任基于該證書建立的安全通道&#xff0c;所以說&#xff0c;數字證書…

【React Native】安裝配置 Expo Router

過去開發React Native&#xff0c;所使用的路由都是React Navigation。但是這個東西使用起來非常困難&#xff0c;配置無比繁瑣。Expo&#xff0c;為了簡化操作&#xff0c;就基于React Navigation開發了Expo Router。 Expo Router用起來就要簡單的多了&#xff0c;配置也相對…

美國VPS服務器Linux內核參數調優的實踐與驗證

美國vps服務器Linux內核參數調優的實踐與驗證在云計算和虛擬化技術日益普及的今天&#xff0c;美國VPS服務器因其穩定的網絡環境和優越的性價比&#xff0c;成為眾多企業和開發者的首選。Linux內核參數的默認配置往往無法充分發揮VPS的性能潛力。本文將深入探討美國VPS服務器上…

在Vscode中使用Kimi K2模型:實踐指南,三分鐘生成個小游戲

Kimi K2是一款基于多專家&#xff08;MoE&#xff09;架構的強大代碼與代理能力基礎模型。本文將通過在VS Code及其擴展Cline和RooCode中的實際應用&#xff0c;詳細說明如何使用Kimi K2-0711-preview模型。不得不說kimi這次的K2模型就是強大&#xff0c;在vscode中配置使用體驗…

基于SpringBoot+Uniapp球場預約小程序(騰訊地圖API、Echarts圖形化分析、二維碼識別)

“ &#x1f388;系統亮點&#xff1a;騰訊地圖API、Echarts圖形化分析、二維碼識別”01系統開發工具與環境搭建前后端分離架構 項目架構&#xff1a;B/S架構 運行環境&#xff1a;win10/win11、jdk17前端&#xff1a; 技術&#xff1a;框架Vue.js&#xff1b;UI庫&#xff1a;…

windows + phpstorm 2024 + phpstudy 8 + php7.3 + thinkphp6 配置xdebug調試

windows phpstorm 2024 phpstudy 8 php7.3 thinkphp6 配置xdebug調試 下載配置phpstudyPhp.ini配置phpstorm配置xdebug運行一會就停了配置虛擬機 0localhost_90.conf 配置php.ini配置下載 在下面地址下載合適的xdebug 放到對應的php https://xdebug.org/wizard 配置phpst…

python的pywebview庫結合Flask和waitress開發桌面應用程序簡介

pywebview的用途與特點 用途 pywebview是一個輕量級Python庫&#xff0c;用于創建桌面應用程序&#xff08;GUI&#xff09;。它通過嵌入Web瀏覽器組件&#xff08;如Windows的Edge/IE、macOS的WebKit、Linux的GTK WebKit&#xff09;&#xff0c;允許開發者使用HTML/CSS/Java…