flask基础开发知识学习
之前做了一些LLM的demo,接口用flask写的,但是涉及到后端的一些业务就感觉逻辑写的很乱,代码变成屎山,于是借助官方文档和GPT迅速补了一些知识,总结一下一个很小的模板
于是决定边学边重构之前的代码…
文章目录
- 代码结构
- 补基础知识
- 一些总结
- session
- 1. Web会话:
- 2. 数据库会话:
代码结构
- 用我上一篇blog写的方法来打印下项目目录
|---项目名|---.env|---app|---models|---user.py|---__init__.py|---routes|---auth_routes.py|---__init__.py|---services|---auth_services.py|---__init__.py|---utils|---__init__.py|---config.py|---run.py|---README.md
.env: 用于存储配置
app: 主应用文件夹。
models: 存放数据模型。
routes: 定义应用路由。
services: 实现业务逻辑的服务层。
config.py: 加载和存储配置信息。
run.py: 应用的入口点。
-
run.pyfrom app import app from app.routes import register_routes from flask_cors import CORSCORS(app)register_routes(app)if __name__ == '__main__':app.run(debug=True, port=9700) -
config.py就是用load_dotenv从.env文件中读取变量,然后后面别的文件好引入 -
app\__init__.pyfrom flask import Flask # 导入 Flask 模块 from flask_sqlalchemy import SQLAlchemy # 导入 SQLAlchemy 模块 from config import DB_CONFIG,SECRET_KEY # 导入数据库配置 from flask_login import LoginManager # 导入登录管理器app = Flask(__name__) # 创建 Flask 应用对象 app.config['SECRET_KEY'] = SECRET_KEY app.config['SQLALCHEMY_DATABASE_URI'] = f"mysql+mysqlconnector://{DB_CONFIG['mysql_user']}:{DB_CONFIG['mysql_password']}@{DB_CONFIG['mysql_host']}/{DB_CONFIG['mysql_database']}" # 配置数据库连接,使用 MySQL 数据库,连接信息从配置文件中获取db = SQLAlchemy(app) # 创建 SQLAlchemy 对象,它是一个全局变量,可以在其他文件中使用login_manager = LoginManager() # 创建登录管理器对象 login_manager.init_app(app) # 初始化登录管理器,将它绑定到 Flask 应用对象上 login_manager.login_view = 'auth.login_route' # 设置登录页面的路由 -
app\models\user.py# models/user.py from flask_login import UserMixin # 导入 UserMixin 类, 用于实现用户认证 from app import dbclass User(db.Model, UserMixin):__tablename__ = 'users'id = db.Column(db.Integer, primary_key=True, autoincrement=True)username = db.Column(db.String(50), unique=True, nullable=False)password = db.Column(db.String(255), nullable=False)def __repr__(self):return f"<User id={self.id}, username={self.username}>" -
app\routes\__init__.pyfrom .auth_routes import *def register_routes(app):# 注册认证相关的路由app.register_blueprint(auth_routes.auth_blueprint, url_prefix='/auth') -
app\routes\auth_routes.pyfrom flask import Blueprint, request, jsonify from app.services.auth_services import login, register, get_files, delete_file auth_blueprint = Blueprint('auth', __name__)@auth_blueprint.route('/Login', methods=['POST']) def login_route():"""处理用户登录请求。"""return login(request.json.get('username'), request.json.get('password'))@auth_blueprint.route('/Register', methods=['POST']) def register_route():"""处理用户注册请求。"""return register(request.json.get('username'), request.json.get('password')) -
app\services\auth_services.pyfrom werkzeug.security import generate_password_hash, check_password_hash from flask_login import current_user, login_user from flask import jsonify from app import db # 导入数据库实例 from app.models.user import Userdef login(username, password):user = User.query.filter_by(username=username).first()if user and check_password_hash(user.password, password):login_user(user)return "True"else:return "False"def register(username, password):user = User.query.filter_by(username=username).first()if user:return "False" # 已存在的用户名hashed_password = generate_password_hash(password)new_user = User(username=username, password=hashed_password)db.session.add(new_user)db.session.commit()return "True"
补基础知识
-
SQLAlchemy: 为 Flask 提供的一个 ORM(Object Relational Mapping)工具,可以使你以 OOP 的方式操作数据库。
-
Flask-Login: 一个为 Flask 提供的用户会话管理工具。
-
Werkzeug: Flask 使用的 WSGI 工具集,用于密码哈希和验证等功能。
-
Blueprint: 在 Flask 中,蓝图(Blueprint)是一个可组织和重用的应用或者应用子模块。
-
. 项目结构规范:
- 使用具有明确名称的文件夹来分隔不同的功能模块(如models、routes和services)。
- 在每个文件夹内部,通过
__init__.py来引入需要的模块或功能,使其结构清晰。 - 单独的配置文件 (
config.py) 和环境变量文件 (.env) 使得配置集中和易于管理。
-
路由规范:
- 使用蓝图来组织路由,使其模块化并易于维护。
- 路由的命名应反映其功能,如
login_route、register_route。
-
服务层规范:
- 把业务逻辑和操作放在 services 文件夹中,保持路由层的纯净。
- 每个函数应该有清晰的职责,如
login和register。
-
. 模型规范:
- 在 models 文件夹中定义数据模型。
- 使用 SQLAlchemy 提供的功能来定义和操作数据模型。
-
安全规范:
- 使用
werkzeug.security提供的函数来进行密码哈希,避免明文密码存储。 - 使用 Flask-Login 来管理用户会话。
- 使用
一些总结
- 真的难蚌,重构代码的时候,引入了blueprint之后,我的登陆和注册接口前面多了个 /auth路径,然后和之前的前端代码对接的时候,控制台一直显示跨域不成功,我以为是CORS的问题,然后调了一早上+一中午…结果用apifox测试的时候,我把接口路径写对了,写了auth,接口测试成功,我才反应过来…
session
-
之前services那里用的代码是

然后gpt建议我改成session

-
seesion 这个概念确实很多地方都碰到了,但之前没有仔细去了解
以下是GPT的回答
- web的session和数据库的session示例代码如下
当然可以,让我们通过Python代码示例来详细了解上述的“会话”概念。
1. Web会话:
用Flask内置的session对象来处理Web会话:
from flask import Flask, session, redirect, url_for, requestapp = Flask(__name__)
app.secret_key = 'supersecretkey' # 用于加密session@app.route('/')
def index():if 'username' in session:return 'Logged in as ' + session['username']return 'You are not logged in'@app.route('/login', methods=['POST'])
def login():session['username'] = request.form['username']return redirect(url_for('index'))@app.route('/logout')
def logout():session.pop('username', None)return redirect(url_for('index'))if __name__ == '__main__':app.run()
当用户登录时,我们在会话中存储他们的用户名,然后可以在应用的其他部分检索该信息。
2. 数据库会话:
用SQLAlchemy库在Python中与数据库交互:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmakerBase = declarative_base()
engine = create_engine('sqlite:///:memory:') # 创建一个内存数据库class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String)Base.metadata.create_all(engine)Session = sessionmaker(bind=engine) # 创建会话类# 创建一个数据库会话实例
db_session = Session()# 添加新用户
new_user = User(name='John Doe')
db_session.add(new_user)
db_session.commit()# 查询用户
user = db_session.query(User).filter_by(name='John Doe').first()
print(user.name)
在这里,db_session 是与数据库的交互会话,可以通过它进行查询、添加、更新或删除操作。
相关文章:
flask基础开发知识学习
之前做了一些LLM的demo,接口用flask写的,但是涉及到后端的一些业务就感觉逻辑写的很乱,代码变成屎山,于是借助官方文档和GPT迅速补了一些知识,总结一下一个很小的模板 于是决定边学边重构之前的代码… 文章目录 代码结…...
内网和热点同时连接使用配置
解决如标题问题 查看当前永久路由信息 route print截图保存(重要) 截图保存(重要)查出来的永久路由,以防配置不成功时回退,回退方法就是下面的“添加永久路由” 删除当前的路由 0.0.0.0 是上面查出的网络地址 route delete 0.0.0.0内网IP信息 添加永久…...
C语言 形参、实参
定义 形参 形式上的参数,没有确定的值 实参 实际存在的,已经确定的参数,常量,变量,表达式,都是实参 区别 实参的值不随形参的变化而变化 在C语言中,数据传送是单向的,即只能把实…...
linux入门到精通-第四章-gcc编译器
目录 参考gcc概述gcc的工作流程 参考 gcc编译器 gcc概述 编辑器vi、记事本)是指我用它来写程序的 (编辑码),而我们写的代码语句,电脑是不懂的,我们需要把它转成电脑能懂的语句,编译器就是这样的转化工具。就是说,我…...
HCIP静态路由综合实验
题目: 步骤: 第一步:搭建上图所示拓扑; 第二步:为路由器接口配置IP地址; R1: [R1]display current-configuration intinterface GigabitEthernet0/0/0ip address 192.168.1.1 255.255.255.252 interfa…...
nginx前端配置(新)
基础配置 server {listen 80;server_name your-frontend-domain.com;# 根目录为前端网页文件所在目录root /path/to/your/frontend/files;# 默认文档(例如 index.html)index index.html;location / {try_files $uri $uri/ /index.html; #try_files 指…...
js,jquery,vue设置html标签隐藏不显示
前端 <p id"myElement"> </p>使用js将idmyElemnt的标签隐藏 使用 style.display 属性: 通过设置 style.display 属性为 "none",可以隐藏标签。 var element document.getElementById("myElement");element…...
口袋参谋:如何实时监控对手数据?
在如此激烈的淘宝天猫上开店,如何才能获取对手的数据呢? 俗话说的好,知己知彼百战百胜,那么这句话同样也适用于淘宝天猫上。 只有掌握对手推广策略以及数据,我们才有机会反超,因此做好竞品监控是运营店…...
Q-learning如何与ABC等一些元启发式算法能够结合在一起?
1、出现的问题 Q-learning能和元启发式算法(如ABC、PSO、GA、SSA等)结合在一起,实现工作流调度问题? Q-learning和ABC (Artificial Bee Colony) 等元启发式算法可以结合在一起以解决特定类型的问题。Q-learning是一种强化学习算法…...
mysql 过滤多列重复的值(保留其中一条),对单列或者多列重复的值去重
建立测试数据表 CREATE TABLE test (id int(11) NOT NULL AUTO_INCREMENT,account varchar(255) DEFAULT NULL,password varchar(255) DEFAULT NULL,deviceId varchar(255) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT11 DEFAULT CHARSETutf8mb4;INSERT INT…...
面向红队的自动化引擎工具
gogo 介绍 面向红队的、高度可控的可拓展的自动化引擎。特征如下: 自由的端口配置 支持主动/主动指纹识别 关键信息提取,如标题、证书以及自定义提取信息的正则 支持nuclei poc,poc目录:https://chainreactors.github.io/wiki/…...
Python库学习(十):Matplotlib绘画库
1. 介绍 Matplotlib 是一个用于绘制图表和可视化数据的 Python 库。它提供了丰富的绘图工具,可以用于生成各种静态、交互式和动画图表。Matplotlib 是数据科学、机器学习和科学计算领域中最流行的绘图库之一。 1.1 关键特性 以下是 Matplotlib 的一些关键特性&…...
coverity工具 代码审计
第39篇:Coverity代码审计/代码扫描工具的使用教程_希潭实验室ABC123的博客-CSDN博客...
女鹅冬天的第一件羽绒服,当然要时尚经典的
90白鸭绒,高密度充绒量和蓬松度 让这件羽绒服更加饱满更有型 三防工艺,立领连帽设计 下摆抽绳,帽子上的魔术贴设计 无一不将保暖落实在实处 宽松版型立体感很强,对身材的包容性也是非常不错...
智慧渔业方案:AI渔政视频智能监管平台助力水域禁渔执法
一、方案背景 国内有很多水库及河流设立了禁渔期,加强渔政执法监管对保障国家渔业权益、维护渔业生产秩序、保护渔民群众生命财产安全、推进水域生态文明建设具有重要意义。目前,部分地区的监管手段信息化水平低下,存在人员少、职责多、任务…...
LXC、Docker、 Kubernetes 容器以及Hypervisor的区别
LXC、Docker、 Kubernetes 容器以及Hypervisor的区别 SaaS: Software-as-a-Service(软件即服务) PaaS: Platform-as-a-Service(平台即服务) IaaS: Infrastructure-as-a-Service(基础设施即服务) 1、Docke…...
电子杂志制作不求人:简单易用的工具推荐
如果你想要制作一份精美的电子杂志,但是又不想花费太多的时间和金钱,也不想求及朋友帮忙制作,那么可以试试这个网站制作电子杂志,展现出的效果跟专业级设计师的效果没什么区别哦 赶快收藏吧-------FLBOOK在线制作电子杂志平台&a…...
Excel冻结窗格
1、冻结表格首行 点击菜单栏中的“视图”,选择“窗口”选项卡中的“冻结窗格”下的小三角,再选择“冻结首行”; 2.冻结表格首列 点击菜单栏中的“视图”,选择“窗口”选项卡中的“冻结窗格”下的小三角,再选择“冻结…...
Flink自定义sink并支持insert overwrite 功能
前言 自定义flink sink,批模式下,有insert overwrite 需求或需要启动任务或任务完成后时,只执行一次某些操作时,则可参考此文章 组件: flink: 1.15 参考文档:https://nightlies.apache.org/flink/flink-docs-release-1.15/docs/dev/table/sourcessinks/ 分析 inser…...
CSS Vue/RN 背景使用opacity,文字在背景上显示
Vue <div class"training_project_tip"> <div class"tip">展示的文字</div> </div> .training_project_tip { font-size: 12px; font-weight: 400; text-align: left; color: #ffffff; margin-top: 8px; position: relative; dis…...
基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
