Flask + Pear Admin Layui 快速開發管理后臺

框架介紹

Flask 就不用過多介紹了, Pear Admin Layui 是基于 Layui 的一套管理后臺前端開源模板, 主打一個開箱即用, 對于不喜歡 React/Vue 等這些還需要大量學習成本的前端開發者來說, 可以說是相當友好了.
項目官網: https://gitee.com/pear-admin/pear-admin-layui
項目的作者其實也提供了 Flask 集成的項目 Pear Admin Flask, 其中包含了相當豐富的功能, 涵蓋了用戶, 權限, 角色, 日志等管理的場景, 如果是進行大型復雜項目開發, 可以考慮基于此項目直接二次開發. 不過對于一些小型的簡單項目, 其實用不到這么復雜的功能, 反而是直接基于純前端的模板自己用 Flask 搓更靈活.

本文假設你已經精通使用 Flask 開發 Hello World 應用的流程, 主要介紹基于 Pear Admin Layui 純前端模板, 使用 Flask 實現模板所需的主要路由, 開發一個簡單的博客管理后臺的過程.

項目已在 Gitee 開源: https://gitee.com/lpwm/pear-blog

另外, 由于 Pear Admin 官網目前還沒修好, 可以自行 Clone 官網的 倉庫 (兩年多沒更新了, 后來新增的一些功能沒有介紹), 或者訪問:
臨時官網文檔
自建鏡像站

項目準備

使用 uv 進行項目的管理. 如果你還沒有體驗過 uv 的強大, 快速入門見前文 使用 uv 管理 Python 項目

# 初始化項目
uv init pear-blog && cd pear-blog# 添加依賴 (會自動創建 .venv 文件夾)
uv add flask# 查看依賴樹, 均是各個輪子最新的版本
uv tree -d 1
Resolved 17 packages in 1ms
pear-blog v0.1.0
└── flask v3.1.0# 初始化 Flask 文件夾結構
mkdir {templates,static,views}

此時項目的主體框架就準備好了, 把 uv 初始化的 main.py 改一下名字 app.py. 完成后的項目文件夾內張這樣子:

./
├── .git/
├── .venv/
├── static/
├── templates/
├── views/
├── .gitignore
├── .python-version
├── LICENSE
├── README.md
├── app.py
├── pyproject.toml
└── uv.lock

接下來整合 Pear Admin Layui 模板, 首先下載壓縮包, 本文使用版本為 4.0.5
https://gitee.com/pear-admin/pear-admin-layui/archive/refs/tags/4.0.5.zip

解壓后將 admin/css, component, config 三個文件夾復制到 Flask 項目的 static 靜態文件夾中. 刪除 config/pear.config.json 我們后面使用 yml 格式的配置文件(能注釋更方便). 完成后的 static 文件夾里面現在張這樣:

static/
├── component/
│   ├── layui/
│   └── pear/
├── config/
│   └── pear.config.yml
└── css/├── admin.css├── admin.dark.css├── other/├── reset.css└── variables.css

至此, 項目基本準備工作已經就緒, 后面我們還會繼續用到 Pear Admin Layui 解壓后的 HTML 模板, 不過就是挑著來了, 用到哪個就復制到 Flask 項目的 templates 文件夾中.

Pear Admin 框架必備路由

鑒于你已經精通使用 Flask 開發 Hello World 應用的流程, 這里就不再贅述基礎的 Flask 開發過程, 主要整理 Pear Admin 框架需要用到的幾個路由需要返回的響應數據格式, 同時還需要注意調整前端框架中的配置文件以及 HTML 模板中對應資源的引用路徑.

首先來看框架配置文件 /static/config/pear.config.yml, 需要修改下面幾處設置:

## 網站配置
logo: ## 網站圖標, 替換成靜態文件對應的路徑image: "/static/images/logo.png"
menu: ## 菜單數據, 替換為路由data: "/admin/menu"## 默認選中的菜單項select: "1"
## 視圖內容配置
tab: ## 首頁index: id: "1" ## 標識 ID , 建議與菜單項中的 ID 一致href: "/admin/home" ## 頁面地址, 替換為路由title: "首頁" ## 標題
header:## 站內消息,通過 false 設置關閉message: "/admin/message"

修改首頁模板中對靜態資源引用的路徑:

<html>
<head><title>Pear Admin 4.0</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><link rel="stylesheet" href="{{ url_for('static', filename='component/pear/css/pear.css') }}" /><link rel="stylesheet" href="{{ url_for('static', filename='css/admin.css') }}" /><link rel="stylesheet" href="{{ url_for('static', filename='css/admin.dark.css') }}" /><link rel="stylesheet" href="{{ url_for('static', filename='css/variables.css') }}" /><link rel="stylesheet" href="{{ url_for('static', filename='css/reset.css') }}" />
</head><body><!-- 依 賴 腳 本 --><script src="{{ url_for('static', filename='component/layui/layui.js') }}"></script><script src="{{ url_for('static', filename='component/pear/pear.js') }}"></script><script>layui.use(['admin', 'jquery', 'popup'], function () {var admin = layui.admin;var popup = layui.popup;var $ = layui.jquery;// yml | json | apiadmin.setConfigurationPath("{{ url_for('static', filename='config/pear.config.yml') }}");</script>
</body>
</html>

創建一個單獨的 Blueprint admin.py 用于為 Pear Admin 提供配置中所需的數據, 數據格式可以直接從 Pear Admin 解壓后的 admin/data 文件夾中找到作為參考.

from flask import Blueprint, jsonify, render_templatebp = Blueprint("admin", __name__, url_prefix="/admin")@bp.get("/")
def index_get():return render_template("admin/index.html")@bp.get("/menu")
def menu_get():data = [{"id": 1,  # 菜單數據的唯一標識"title": "首頁",  # 界面中所顯示的菜單標題"icon": "layui-icon layui-icon-console",  # 顯示圖標"type": 1,  # 0=目錄, 1=菜單"href": "/admin",  # 菜單類型下訪問的頁面},{"id": 2,"title": "文章管理","icon": "layui-icon layui-icon-list","type": 0,"children": [{"id": 21,"title": "添加文章","icon": "layui-icon layui-icon-addition","type": 1,"openType": "_iframe",  # 當 type 為 1 時,openType 生效,_iframe 正常打開 _blank 新建瀏覽器標簽頁"href": "/admin/article/add",},{"id": 22,"title": "數據分析","icon": "layui-icon layui-icon-console","type": 1,"openType": "_iframe","href": "/admin/article/analysis",},],},{"id": 3,"title": "外部鏈接","icon": "layui-icon layui-icon-chrome","type": 1,"openType": "_blank","href": "https://layui.dev",},]return jsonify(data)@bp.get("/message")
def message_get():data = {"code": 200,"data": [{"id": 1,"title": "通知","children": [{"id": 11,"avatar": "https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png","title": "你收到了 14 份新周報","context": "這是消息內容。","form": "就眠儀式","time": "剛剛",}],}],}return jsonify(data)@bp.get("/home")
def home_get():return "<h1>Home</h1>"@bp.get("/article/add")
def article_add_get():return "<h1>添加文章</h1>"@bp.get("/article/analysis")
def article_analysis_get():return "<h1>數據分析</h1>"

效果演示

至此, 一個基本的管理后臺框架就搭建好了, 效果:

在這里插入圖片描述
后續要做的就是在這個框架基礎上創建具體的頁面內容啦, 是不是 So easy! 😁

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

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

相關文章

git push

在 git push 命令中&#xff0c;分支名稱的順序和含義非常重要。其基本格式如下&#xff1a; git push <remote> <local_branch>:<remote_branch>各部分解釋 <remote>&#xff1a;遠程倉庫的名稱&#xff08;如 origin&#xff09;。<local_branc…

wordpress 利用 All-in-One WP Migration全站轉移

導出導入站點 在插件中查詢 All-in-One WP Migration備份并導出全站數據 導入 注意事項&#xff1a; 1.導入部分限制50MB 寶塔解決方案&#xff0c;其他類似&#xff0c;修改php.ini配置文件即可 2. 全站轉移需要修改域名 3. 大文件版本&#xff0c;大于1G的可以參考我的…

藍橋杯補題

方法技巧&#xff1a; 1.進行循環暴力騙分&#xff0c;然后每一層的初始進行判斷&#xff0c;如果已經不滿足題意了&#xff0c;那么久直接continue&#xff0c;后面的循環就不用浪費時間了。我們可以把題目所給的等式&#xff0c;比如說有四個未知量&#xff0c;那么我們可以用…

MySQL:鎖

按粒度分類 全局鎖 含義&#xff1a;全局鎖會鎖定整個數據庫實例&#xff0c;在其生效期間&#xff0c;其他事務無法對數據庫進行任何讀寫操作。常用于數據遷移、數據備份場景。 表級鎖 表鎖&#xff1a;是對整張表進行鎖定的機制。實現邏輯簡單&#xff0c;加鎖和釋放鎖速…

數字政府政務服務領域智能化應用解決方案

數字政府政務服務領域智能化應用 解決方案 一、方案背景 在數字經濟蓬勃發展的當下&#xff0c;數字化轉型已成為政府提升治理能力、優化公共服務、增強競爭力的關鍵路徑。黨的十九屆四中全會明確提出 “推進數字政府建設”&#xff0c;這為政府的數字化轉型指明了方向。 隨…

03--Deepseek服務器部署與cjson解析

一、ollama部署deepseek模型 1、Ollama 是一個開源的本地大語言模型運行框架&#xff0c;專為在本地機器上便捷部署和運行大型語言模型&#xff08;LLM&#xff09;而設計。 Ollama 教程&#xff1a;從 0 到 1 全面指南 教程【全文兩萬字保姆級詳細講解】 -CSDN博客 1.下載o…

棧(算法)

在 C 里&#xff0c;棧是一種遵循后進先出&#xff08;LIFO&#xff09;原則的數據結構。下面從多個方面為你介紹 C 棧&#xff1a; 1. 使用標準庫中的std::stack C 標準庫提供了std::stack容器適配器&#xff0c;能方便地實現棧的功能。以下是簡單示例&#xff1a; cpp #in…

UniApp 頁面布局自定義頭部導航

動態計算頭部高度與內容偏移量&#xff1a;實現 UniApp 頁面布局的精準適配 在移動端應用開發中&#xff0c;頁面布局的精準適配是一個關鍵問題。尤其是在 UniApp 中&#xff0c;不同設備的屏幕尺寸、狀態欄高度以及頭部布局的差異&#xff0c;可能導致頁面內容錯位或顯示不全…

verilog學習--1、語言要素

先看一個例子 /*This is first Verilog progaram*/ timescale 1ns/1ns module HalfAdder(A,B,Sum,Carry);input A,B;output Sum, Carry; /**/assign #2 SumA^B;assign #5 CarryA&B&#xff1b; endmodule; Verilog以module為單位編寫&#xff0c;每個文件一個module&#…

AC 自動機 洛谷P3808 P3796 P5357

洛谷P3808 #include <bits/stdc.h> using namespace std; const int maxn 1e6 5; int ch[maxn][30], fa[maxn], End[maxn]; int cnt 0 , n; int get_num(char c){return c - a;} void build(string s){int cur 0, len s.length();for(int i 0; i < len; i){int…

C++藍橋杯實訓篇(二)

片頭 嗨咯~小伙伴們&#xff01;今天我們來一起學習算法和貪心思維&#xff0c;準備好了嗎&#xff1f;咱們開始咯&#xff01; 第1題 數位排序 對于這道題&#xff0c;我們需要自己寫一個排序算法&#xff0c;也就是自定義排序&#xff0c;按照數位從小到大進行排序。 舉一…

redisson常用加鎖方式

RLock lock redissonClient.getLock("lock:order:" order);和redissonDistributedLocker.tryLock("lock:order:" order&#xff0c; TimeUnit.SECONDS, RedisLockKey.DEFAULT_WAIT_TIME, RedisLockKey.DEFAULT_HOLD_TIME);這兩種加鎖方式的區別如下&…

Go 微服務框架 | 路由實現

文章目錄 不用框架實現web接口實現簡單的路由實現分組路由支持不同的請求方式支持同一個路徑的不同請求方式前綴樹應用前綴樹完善路由代碼 不用框架實現web接口 // blog main.go 文件 package mainimport ("fmt""log""net/http" )func main() {…

zabbix中通過模板實現自動發現對tcp端口批量監控

主要為了解決監控大量端口&#xff0c;避免繁瑣的重復操作監控項和觸發器 諸位~ 僅供參考哈 自動發現監控參考地址: https://blog.csdn.net/qq_37510195/article/details/130893655 模板 首先創建一個模板 自定義名稱和群組 創建自動發現規則 模板——自動發現——創建發現規則…

Mysql備忘記錄

1、簡介 Mysql操作經常忘記命令&#xff0c;本文將持續記錄Mysql一些常用操作。 2、常見問題 2.1、忘記密碼 # 1、首先停止Mysql服務 systemctl stop mysqld # windows 從任務管理器里面停 # 2、更改配置文件 my.cnf (windows是 ini文件) vim /etc/my.cnf 在[mysqld]下面添…

【藍橋杯】15屆JAVA研究生組F回文字符串

一、思路 1.這題去年考的時候想的是使用全排列進行嘗試&#xff0c;實際不用這么麻煩&#xff0c;只用找到第一個和最后一個非特殊字符串的位置&#xff0c;然后分別向內檢查是否對稱&#xff0c;向外檢查是否對稱直到左指針小于0(可以通過添加使其對稱) 2.至于如何找到第一個…

X 進制減法

題目鏈接&#xff1a; 思路&#xff1a; X進制數321怎么轉換為十進制數為65&#xff1f;如下圖&#xff1a; ①題目要求我們求 A - B 的最小值&#xff0c;對第 i 位&#xff0c;要求 A[i] - B[i] 的最小值&#xff0c;當進制越小的時候差值越小&#xff0c;但進制要比 max&…

java線程安全-單例模式-線程通信

首先看看單例模式的寫法 首先我們先來回顧一下餓漢式單例模式&#xff1a; class Singleton{private static Singleton singletonnew Singleton();private Singleton(){}public static Singleton getInstrance(){return singleton;} } public class Test{public static void …

大數據技術之SPARK

Spark Core 什么是 RDD 代碼中是一個抽象類&#xff0c;它代表一個彈性的、不可變、可分區、里面的元素可并行計算的集合 彈性 存儲的彈性&#xff1a;內存與磁盤的自動切換&#xff1b; 容錯的彈性&#xff1a;數據丟失可以自動恢復&#xff1b; 計算的彈性&#xff1a;…

Go 語言范圍 (Range)

Go 語言范圍 (Range) Go 語言是一種靜態強類型、編譯型、并發型編程語言&#xff0c;由 Google 開發。它的簡潔性和高效性使其成為眾多開發者的首選。在 Go 語言中&#xff0c;range 是一個非常有用的關鍵字&#xff0c;用于遍歷數組、切片、字符串以及通道&#xff08;channe…