FLASK項目快速構建

Flask 項目構建

exts.py

# flask_sqlalchemy
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail
from flask_caching import Cache
from flask_wtf import CSRFProtect
from flask_avatars import Avatars
from flask_jwt_extended import JWTManager
from flask_cors import CORSdb = SQLAlchemy()
mail = Mail()
cache = Cache()
csrf = CSRFProtect()
avatars = Avatars()
jwt = JWTManager()
cors = CORS()from gevent import pywsgifrom geventwebsocket.handler import WebSocketHandlerserver = pywsgi.WSGIServer(('0.0.0.0', 8099), app, handler_class=WebSocketHandler)server.serve_forever()

config.py


import os#===============================================================================
# 基礎路由配置
#===============================================================================
BASE_DIR = os.path.dirname(os.path.abspath(__file__))#===============================================================================
# 隨機密鑰
#===============================================================================
SECRET_KEY = "dfasdfsdflasdjfl"#===============================================================================
# msyql 數據庫配置
#===============================================================================
from utils.configUtils import get_section_dictcfg_msyql = get_section_dict(file_path=os.path.join(BASE_DIR,"config.ini"),section="mysql"
)DB_URI = 'mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8mb4' % (cfg_msyql.get("user","root"),cfg_msyql.get("password","123456"),cfg_msyql.get("host","localhost"),cfg_msyql.get("port","3306"),cfg_msyql.get("database","employee_face_recognition_and_behavior_detection"),)SQLALCHEMY_DATABASE_URI = DB_URI#===============================================================================
# redis 數據庫配置
#===============================================================================
import redis
cfg_redis = get_section_dict(file_path=os.path.join(BASE_DIR,"config.ini"),section="redis"
)redis_con = redis.Redis(host=cfg_redis.get("host","localhost"), port=cfg_redis.get("port",6379), db=cfg_redis.get("db",1), decode_responses=cfg_redis.get("decode_responses",False)
)cfg_flask = get_section_dict(file_path=os.path.join(BASE_DIR,"config.ini"),section="flask"
)

apps包中的__init__.py

from flask import Flask
from flask_migrate import Migrate
import config
import pymysql
from exts import db,login_manager,cors
import redis# ===========================================================================
# 這里需要將自定義模型導入到這里
# from apps.models.employee import Employee,Attendance
# from apps.models.user import Userdef create_app(config_class=config):app = Flask(__name__)app.config.from_object(config_class)# 初始化擴展db.init_app(app)migrate = Migrate(app, db)cors.init_app(app=app,resources={r"/api/*": {"origins": "*"}},supports_credentials=True)login_manager.init_app(app)login_manager.login_view = 'api.login'# @login_manager.user_loader# def load_user(user_id: str):#     return User.query.get(int(user_id))# 藍圖注冊# from app.routes.main import main_bp# from app.routes.api import api_bp# app.register_blueprint(main_bp)# app.register_blueprint(api_bp,url_prefix='/api')# 創建數據庫表 - 在設置了URI后才創建with app.app_context():db.create_all()pymysql.install_as_MySQLdb()return app 

main.py

from apps import create_appapp = create_app()if __name__ == '__main__':app.run(debug=True)

config.ini

[mysql]
# 連接數據庫基本參數
host        = localhost
port        = 3306
user        = root
password    = 123456
database    = databaseName
charset     = utf8mb4# 可選:連接池/超時配置
connect_timeout = 10
pool_size       = 5[redis]
host             = localhost
port             = 6379
db               = 1
decode_responses = False[flask]
APP_NAME = 'flask_app'

utils.configUtils.py

import configparser
from typing import Dict
from typing import Dict, Any
import configparser
import re,random
from app.models.employee import BehaviorTypeEnum,Behavior
from datetime import datetime,timedelta
import pytzdef get_section_dict(file_path: str,section: str,encoding: str = 'utf-8'
) -> Dict[str, Any]:"""從指定的 ini 文件中讀取一個區塊,將該區塊的 key/value 封裝為字典返回,并自動將字符串形式的布爾值、整數和浮點數轉換為相應的 Python 類型。:param file_path: ini 文件路徑:param section: 要讀取的區塊名稱:param encoding: 文件編碼,默認為 'utf-8':return: 區塊鍵值對字典,value 類型可能為 str, int, float, 或 bool:raises KeyError: 如果指定區塊在文件中不存在"""config = configparser.ConfigParser()config.optionxform = str  # 保持 key 的大小寫config.read(file_path, encoding=encoding)if section not in config:raise KeyError(f"Section '{section}' not found in '{file_path}'.")raw = config[section]parsed: Dict[str, Any] = {}for key, value in raw.items():v = value.strip()low = v.lower()# 布爾類型if low in ('true', 'yes', 'on'):parsed_val: Any = Trueelif low in ('false', 'no', 'off'):parsed_val = False# 整數elif re.fullmatch(r'-?\d+', v):parsed_val = int(v)# 浮點數elif re.fullmatch(r'-?\d+\.\d+', v):parsed_val = float(v)# 其余保持字符串else:parsed_val = vparsed[key] = parsed_valreturn parsed

utils.restful.py

# Restful API
from flask import jsonifyclass HttpCode(object):# 響應正常ok = 200# 沒有登陸錯誤unloginerror = 401# 沒有權限錯誤permissionerror = 403# 客戶端參數錯誤paramserror = 400# 服務器錯誤servererror = 500def _restful_result(code, message, data):return jsonify({"message": message or "", "data": data or {}, "code": code})def ok(message=None, data=None):return _restful_result(code=HttpCode.ok, message=message, data=data)def unlogin_error(message="沒有登錄!"):return _restful_result(code=HttpCode.unloginerror, message=message, data=None)def permission_error(message="沒有權限訪問!"):return _restful_result(code=HttpCode.paramserror, message=message, data=None)def params_error(message="參數錯誤!"):return _restful_result(code=HttpCode.paramserror, message=message, data=None)def server_error(message="服務器開小差啦!"):return _restful_result(code=HttpCode.servererror, message=message or '服務器內部錯誤', data=None)

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

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

相關文章

數據結構--2:ArrayList與順序表

1.順序表的創建 2.常見操作 3.遍歷 4.擴容機制 5.例子1.順序表的創建在集合框架中,ArrayList是?個普通的類,實現了List接口,具體框架圖如下:2.常見操作代碼…

【Kubesphere】K8s容器無法訪問內網xx網絡問題

問題遇到的現象和發生背景 Kubesphere中運行的一個容器,可以ping通我們公司內網網段172.16.XX.XX,但是在容器內無法ping通192.168.5.XX,但是我在宿主機是可以ping通192.168.5.XX,這個192.168.5.XX是通過xx設備接進來的&#xff0c…

【開發語言】Groovy語言:Java生態中的動態力量

博客目錄一、Groovy 的誕生與發展二、核心特性深度解析1. 與 Java 的無縫集成2. 動態類型與可選靜態類型3. 強大的集合操作三、Groovy 在實際開發中的應用場景1. 構建自動化(Gradle)2. 測試開發(Spock 框架)3. 腳本任務自動化四、…

Obsidian 1.9.10升級

概述 Obsidian發布了更新版本1.9.10,是一次比較大的升級,尤其是增加了一些以前沒有的核心插件,尤其是重磅的數據庫功能。雖然可能還是比較初期,但是這意味著OB還是往更好的方向進化了。 本文以一些目前的視頻教程加自己的實際上手…

內容審計技術

一、 內容審計需求背景1.網絡安全法要求明確責任人:制定內部安全管理制度和操作規程,落實安全保護責任。監測、記錄并保留日志:采取監測、記錄網絡運行狀態、網絡安全事件的技術措施,并按照規定留存相關網絡日志不少于六個月。采取…

反序列化漏洞

php反序列化 1.什么是序列化和反序列化 office word是程序 doc/docx是數據 保存word文件:程序--保存(序列化)-->數據文件 打開word文件:程序--加載數據文件-->還原(反序列化) 游戲存檔:角色等級,任務,人物坐…

Lecture 4 Mixture of experts課程筆記

什么是MoE?用(多個)大型前饋網絡和一個選擇器層取代大型前饋網絡。你可以在不影響浮點運算次數的情況下增加專家數量。 MoE受歡迎的原因 相同的浮點運算次數,更多的參數表現更好訓練混合專家模型(MoEs)速度更快訓練混…

微服務架構的演進:從 Spring Cloud Netflix 到云原生新生態

過去十年,Spring Cloud 憑借 Netflix 全家桶(Eureka、Ribbon、Hystrix、Zuul 等)幾乎成為 Java 微服務的事實標準。但隨著這些核心組件逐步停止更新或進入維護模式,微服務架構正經歷一場深刻的演進。新的微服務架構更加注重 云原生兼容性、社區活躍度、企業級穩定性和低運維…

網絡流量分析——基礎知識

文章目錄所需技能和知識TCP/IP 堆棧和 OSI 模型基本網絡概念常用端口和協議IP 數據包和子層的概念協議傳輸封裝環境與設備常見的流量分析工具BPF 語法執行網絡流量分析NTA工作流程NTA工作流程網絡 - 第 1-4 層OSI / TCP-IP 模型尋址機制MAC地址IP 尋址IPv4IPv6IPv6 尋址類型IPv…

ansible playbook 實戰案例roles | 實現基于 IHS 的 AWStats 訪問監控系統

文章目錄一、核心功能描述二、roles內容2.1 文件結構2.2 主配置文件2.3 tasks文件內容三、files文件內容四、關鍵價值免費個人運維知識庫,歡迎您的訂閱:literator_ray.flowus.cn 一、核心功能描述 這個 Ansible Role 的核心功能是:?實現 ?…

DELL服務器 R系列 IPMI的配置

1、iDRAC功能默認都是關閉,需要在BIOS面啟用,首先重啟計算機,按F2然后進入BIOS,選擇iDRAC Setting進行iDRAC配置 2、重置一下idrac卡-重置才能恢復默認密碼 3、進入iDRAC Setting之后,選擇設置網絡Network 4、啟用iDRA…

模式組合應用-橋接模式(一)

寫在前面Hello,我是易元,這篇文章是我學習設計模式時的筆記和心得體會。如果其中有錯誤,歡迎大家留言指正!文章為設計模式間的組合使用,涉及代碼較多,個人覺得熟能生巧,希望自己能從中學習到新的…

【clion】visual studio的sln轉cmakelist并使用clion構建32位

我想在linux上運行,所以先轉為cmake工程 例如可以把exe mfc 部分不構建,這樣ubuntu就不用移植。 先轉cmakelist,而后clion完成win32的構建,與vs構建對比,驗證腳本正確性。 Vcxproj2CMake https://github.com/gns333/Vcxproj2CMake cmakeconverter https://github.com/pave…

MySQL之分區功能

序言 隨著業務發展,我們維護的項目數據庫中的數據可能會越來越大,那么單張表的數據變多后,接口查詢效率可能會變慢,那我們就直接照抄大廠常見的分庫分表嗎?—— 當然不是的,分庫分表不是萬能的。 分庫分表…

java_spring boot 中使用 log4j2 及 自定義layout設置示例

1. log4j2對比 原始Logback 優勢 對于 Spring Boot 3.x,Logback 是默認日志框架,但在高并發、異步日志場景下,Log4j2 通常表現更優。當業務百萬級用戶、微服務、日志量大時: ? 1. Logback(默認 Spring Boot 集成&am…

記錄Webapi Excel 導出

文章目錄1、helper2、control3、前端 axios記錄webapi excel 導出File示例.NET8.0 NPOI2.731、helper using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System.Data; using System.IO; /// <summary> /// 導出EXCEL /// </summary> public class Exce…

VPS服務器安全審計方案:從風險評估到防護實施

隨著云計算技術的快速發展&#xff0c;VPS服務器已成為企業信息化建設的重要基礎設施。隨之而來的安全威脅也日益增多&#xff0c;如何通過專業的安全審計方案保障VPS服務器的穩定運行成為關鍵課題。本文將系統闡述從漏洞掃描到應急響應的全周期安全審計實施策略&#xff0c;幫…

libmicrohttpd 入門

libmicrohttpd 是一個小型的 C 庫&#xff0c;用于在項目中嵌入 HTTP 服務器功能。它設計簡單、輕量級&#xff0c;適合需要 HTTP 接口但不想要大型 Web 服務器開銷的應用程序。 安裝 libmicrohttpd Linux 系統 在基于 Debian/Ubuntu 的系統上&#xff1a; bash sudo apt-…

【網絡】使用 DNAT 進行負載均衡時,若未配置配套的 SNAT,回包失敗

【網絡】iptables 1 概念 【網絡】iptables 2 查看規則 【網絡】使用 DNAT 進行負載均衡時&#xff0c;若未配置配套的 SNAT&#xff0c;回包失敗 【網絡】回包路由原理 使用 DNAT 進行負載均衡時&#xff0c;若未配置配套的 SNAT&#xff0c;后端服務器將直接回包給客戶端&am…

深入解析GCC:從編譯原理到嵌入式底層實戰

繼續更新編譯器底層系列&#xff01;&#xff01;&#xff01;硬核C語言的屠龍之術&#xff1a;從GCC到匯編的底層征途&#xff08;一&#xff09;總綱&#xff1a; 恭喜你&#xff0c;決定踏上這條通往嵌入式大佬的硬核之路。這條路的起點&#xff0c;不是C語言的語法書&#…