Flask藍圖:模塊化開發的利器

藍圖
為什么要使用藍圖
  1. 模塊化組織:將應用分解為可重用的模塊(組件)。每個藍圖封裝了相關的視圖、靜態文件、模板等。

  2. 按功能劃分:將大型應用按功能模塊劃分(例如:用戶認證、博客、管理后臺),每個功能一個藍圖。

  3. 路由分組:將相關聯的路由組合在一起,形成邏輯單元,避免所有路由都堆積在主應用文件中。

  4. 動態注冊:藍圖可以先定義后注冊,在應用初始化時再注冊到應用實例上,適合工廠模式。

  5. 代碼復用:同一個藍圖可以在多個Flask應用中使用,實現代碼復用。

  6. URL前綴管理:注冊藍圖時可設置統一URL前綴(如所有用戶相關路由都以/user開頭)。

  7. 獨立模板/靜態文件:每個藍圖可以有自己的模板目錄和靜態文件目錄。

  8. 中間件作用域:藍圖可以有自己的請求鉤子(before_request, after_request等),只對自身注冊的路由生效。

  9. 解決視圖命名沖突:不同藍圖可以有相同命名的視圖函數(通過藍圖名.函數名區分)。

開始使用
  • 基礎項目結構

    simple_flask_app/
    ├── app.py ? ? ? ?  # 主應用文件
    ├── blueprints/
    │ ? ├── main.py ? ? # 主藍圖
    │ ? └── user.py ? ? # 用戶藍圖
    ├── templates/      # 模板文件
    │ ? ├── home.html ? ? # 主藍圖頁面
    │ ? └── users.html ? ? # 用戶頁面
  • 創建app.py文件作為項目主入口文件

    from flask import Flask
    from blueprints.main import main_bp
    from blueprints.user import user_bp
    ?
    # 創建Flask應用
    app = Flask(__name__)
    ?
    # 注冊藍圖
    app.register_blueprint(main_bp, url_prefix='/') ? ? ? ?# 主藍圖使用根路徑
    app.register_blueprint(user_bp, url_prefix='/users') ? ?# 用戶藍圖使用/users前綴
    ?
    # 運行應用
    if __name__ == '__main__':app.run(debug=True, port=5000)

創建藍圖
  • 在blueprints文件夾中,創建main.py和user.py文件,用于不同模塊的藍圖路由

  • main.py

  • from flask import Blueprint, render_template
    ?
    # 創建主藍圖
    '''第一個參數:'main' (藍圖名稱)這是藍圖的標識名,必須是唯一的字符串,用于:在應用中識別這個特定的藍圖在 url_for() 函數中引用該藍圖的端點在應用的其他部分訪問這個藍圖
    '''
    main_bp = Blueprint('main', __name__)
    ?
    ?
    # 主藍圖的路由
    @main_bp.route('/')
    def home():return render_template('home.html')
    ?
    ?
    @main_bp.route('/about')
    def about():return "<h1>關于我們</h1><p>這是關于我們的頁面</p>"
    ?
    ?
    @main_bp.route('/contact')
    def contact():return "<h1>聯系我們</h1><p>電話: 123-456-7890</p>"
    ?

  • user.py

  • from flask import Blueprint, render_template
    ?
    # 創建用戶藍圖
    user_bp = Blueprint('user', __name__)
    ?
    ?
    # 用戶藍圖的路由
    @user_bp.route('/')
    def user_home():return render_template('users.html')
    ?
    ?
    @user_bp.route('/profile')
    def profile():return "<h1>用戶資料</h1><p>這是用戶的個人資料頁面</p>"
    ?
    ?
    @user_bp.route('/dashboard')
    def dashboard():return "<h1>控制面板</h1><p>用戶控制面板內容</p>"
    ?
創建視圖頁面
  • 在templates中,創建home.html文件,用于主藍圖的顯示和跳轉效果的演示

  • 下述代碼中{{user.xxx}}或者{{main.xxx}}前綴名稱是在創建藍圖的時候設置的,main_bp = Blueprint('main', __name__)

  • home.html頁面

  • <!DOCTYPE html>
    <html>
    <head><title>首頁</title><style>body {font-family: Arial, sans-serif;margin: 40px;}nav {background: #f0f0f0;padding: 10px;margin-bottom: 20px;}nav a {margin-right: 15px;text-decoration: none;color: #333;}</style>
    </head>
    <body><nav><a href="{{ url_for('main.home') }}">首頁</a><a href="{{ url_for('main.about') }}">關于</a><a href="{{ url_for('main.contact') }}">聯系</a><a href="{{ url_for('user.user_home') }}">用戶主頁</a><a href="{{ url_for('user.profile') }}">用戶資料</a></nav>
    ?<h1>歡迎來到主頁</h1><p>這是一個使用 Flask 藍圖的簡單示例。</p>
    ?<h2>項目結構</h2><ul><li>主藍圖處理網站主要頁面</li><li>用戶藍圖處理所有用戶相關頁面</li><li>藍圖使用URL前綴進行分組</li></ul>
    </body>
    </html>

  • users.html頁面

  • <!DOCTYPE html>
    <html>
    <head><title>用戶主頁</title><style>body {font-family: Arial, sans-serif;margin: 40px;}nav {background: #e0f7fa;padding: 10px;margin-bottom: 20px;}nav a {margin-right: 15px;text-decoration: none;color: #00796b;}.user-section {border-left: 4px solid #00796b;padding-left: 15px;margin-top: 20px;}</style>
    </head>
    <body><nav><a href="{{ url_for('main.home') }}">返回首頁</a><a href="{{ url_for('user.user_home') }}">用戶主頁</a><a href="{{ url_for('user.profile') }}">用戶資料</a><a href="{{ url_for('user.dashboard') }}">控制面板</a></nav>
    ?<h1>用戶主頁</h1><p>這是用戶藍圖的首頁。</p>
    ?<div class="user-section"><h2>用戶藍圖功能</h2><p>所有用戶相關的功能都在此藍圖中實現:</p><ul><li>用戶資料管理</li><li>控制面板</li><li>用戶設置(待添加)</li></ul></div>
    </body>
    </html>

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

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

相關文章

設計模式詳解

1.創建類型1.1 簡單工廠startuml抽象產品接口 interface Product { Operation(): string } 具體產品A class ConcreteProductA { Operation(): string } 具體產品B class ConcreteProductB { Operation(): string } 工廠類 class Factory { CreateProduct(type: string): Produ…

前端查漏補缺

插槽默認、具名&#xff08;多個插槽&#xff09;、作用域&#xff08;接收子組件數據&#xff09;//具名 <div class"container"><header><slot name"header"></slot></header><main><slot></slot></…

網絡協議UDP、TCP

一、網絡協議 UDPUDP用戶數據報協議&#xff1a;傳輸層網絡編程模型B/S模型&#xff1a;browser/server&#xff08;瀏覽器/服務器&#xff09;客戶端是通用的客戶端&#xff08;瀏覽器&#xff09;一般只做服務器開發客戶端要加載的數據均來自服務器C/S模型&#xff1a;client…

STM32 TIM_SelectInputTrigger()函數

一、函數功能與定位?TIM_SelectInputTrigger()是STM32定時器外設的關鍵配置函數&#xff0c;用于設置從模式定時器的觸發源&#xff08;Trigger Source&#xff09;?。其核心作用是將定時器的內部事件或外部信號映射為觸發信號&#xff08;TRGI&#xff09;&#xff0c;進而控…

Lecture 6 Kernels, Triton 課程筆記

本講座&#xff1a;基準測試/分析 編寫內核 總結 編程模型&#xff08;PyTorch、Triton、PTX&#xff09;與硬件之間的差距 > 性能奧秘 理解擴展的基準測試 用于理解 PyTorch 函數內部結構的分析&#xff08;用內核觸底&#xff09; 看 PTX 匯編&#xff0c;了解 CUDA 內核…

Spring Boot 整合網易163郵箱發送郵件實現找回密碼功能

在開發用戶系統時&#xff0c;發送郵件是一項常見需求&#xff0c;例如用戶忘記密碼時&#xff0c;通過郵箱發送驗證碼來驗證身份并重置密碼。本文將結合 Spring Boot 和 163 郵箱&#xff0c;演示如何實現郵件發送功能。 一、前提條件 普通用戶的 163 郵箱可以在 Spring Boot…

如何在mac玩windows游戲?3個工具推薦,不用換電腦!

Mac電腦雖然很流暢&#xff0c;但它也存在局限性&#xff0c;其中一點游戲玩家應該深有體會&#xff0c;那就是無法直接玩Windows專屬游戲&#xff0c;只能對著琳瑯滿目的游戲望眼欲穿。別急&#xff0c;我有辦法讓你在mac玩windows游戲&#xff0c;下面就來分享我的經驗。一、…

自回歸(Auto-Regressive, AR),自回歸圖像生成過程

根據論文中“**T2I Generation via Next-Token Prediction**”一節&#xff0c;自回歸&#xff08;Auto-Regressive, AR&#xff09;文本到圖像&#xff08;T2I&#xff09;模型的圖像生成過程可分為三個主要步驟&#xff0c;其原理和損失函數如下&#xff1a;---### &#x1f…

在mysql中,modify ,change ,rename to的作用是什么

在 MySQL 中&#xff0c;MODIFY、CHANGE 和 RENAME TO 都是 ALTER TABLE 語句的一部分&#xff0c;用于修改表的結構&#xff0c;但它們的作用和使用場景有所不同。1. MODIFY作用&#xff1a;用于修改表中現有列的定義&#xff0c;但不能修改列名。你可以使用 MODIFY 來更改列的…

【JVM】JVM的內存結構是怎樣的?

JVM的內存結構是Java程序運行時內存管理的核心&#xff0c;不同區域有明確的職責。 一、整體劃分 包括兩大部分&#xff0c;分為線程私有區域(隨線程創建/銷毀&#xff0c;無需垃圾回收)和線程共享區域(所有線程共用&#xff0c;需要垃圾回收管理)。 線程私有區域&#xff1a;程…

青少年軟件編程(python五級)等級考試試卷-客觀題(2023年12月)

更多內容和歷年真題請查看網站&#xff1a;【試卷中心 -----> 電子學會 ----> 機器人技術 ----> 五級】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 青少年軟件編程&#xff08;python五級&#xff09;等級考試試卷-客觀題&#xff08;2023年12月&#xff0…

網絡編程-創建TCP協議服務器

int socket(int domain, int type, int protocol);頭文件&#xff1a; #include <sys/socket.h>#include <netinet/in.h> #include <netinet/ip.h>int skt_tcpfd;int domain;skt_tcpfdsocket(AF_INET,SOCK_STREAM,0);int bind(int sockfd, const struct soc…

ruoyi框架角色分配用戶

分配用戶&#xff0c;不要將當前正在登錄的用戶綁定。否則&#xff0c;在加入當前用戶之后&#xff0c;取消或者添加其他用戶時會被注銷當前登錄。

Java Stream常見函數與應用案例

1. Java Stream核心概念與基礎函數 1.1 Stream API的設計哲學與核心特性 Java Stream API的設計哲學源于函數式編程范式&#xff0c;其核心特性體現在數據處理模式的轉變上。與傳統集合操作相比&#xff0c;Stream API采用聲明式編程風格&#xff0c;支持鏈式調用&#xff0c;顯…

【Canvas與徽章】中國制造金色玻璃光徽章

【成圖】【代碼】<!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>中國制造金色玻璃光徽章 Draft1</title><style type"tex…

終結系統裸奔:Debian老舊版本安全加固終極指南

核心警示:Debian 8與10已結束官方支持,暴露于0day漏洞風險中。本文提供的加固方案僅為遷移前的臨時防護措施,非長久之計。 一、老舊Debian系統的致命隱患 支持狀態: Debian 8(Jessie):2018年終止安全更新 Debian 10(Buster):2024年7月結束主流支持 風險清單: 無補…

Ape.Volo項目源碼學習(1:源碼下載及運行)

Ape.Volo項目是基于 .Net 8 、SqlSugar、Vue2.x、RBAC、前后端分離開箱則用的中后臺快速開發框架&#xff0c;其使用Async/Await異步編程&#xff0c;支持CodeFirst模式、RabbitMQ/RedisMQ消息隊列、CORS 跨域配置、數據庫操作&#xff08;讀寫分離、多庫、分表&#xff09;、支…

2-4.Python 編碼基礎 - 流程控制(判斷語句、循環語句、break 語句與 continue 語句)

一、判斷語句 1、if 語句 &#xff08;1&#xff09;基本格式 if 【判斷條件】:【滿足條件時執行的代碼塊】&#xff08;2&#xff09;演示 number 10if number > 0:print("這個數是正數")# 輸出結果這個數是正數2、if - else 語句 &#xff08;1&#xff09;基本…

大模型自我進化框架SE-Agent:開啟軟件工程自動化新時代

一、引言&#xff1a;當大模型學會“自我進化” 在軟件開發領域&#xff0c;傳統模式下人類工程師面對復雜任務時&#xff0c;往往需要經歷反復調試、多輪迭代才能產出高質量代碼。而隨著大語言模型&#xff08;LLM&#xff09;的興起&#xff0c;一種名為**SE-Agent&#xff…

UE官方文檔學習 C++ TAarry 查詢(四)多種查詢方式

一.IndexofByKey 返回索引通過值&#xff0c;返回來查找鍵。二IndexOfByPredicate通過定義二元謂詞&#xff0c;來判定是否有符合謂詞判定的元素。符合條件True的&#xff0c;才返回Index。這里所謂Lamda,函數就是 把函數當作參數輸入&#xff0c;里面的參數值傳遞前加個[]。這…