记录flask下的坑

在使用Flask与Blueprint结合时,如果模板文件重名,程序会优先使用主程序的模板。此外,将LoginManager实例与`user_loader`装饰器分开初始化会导致错误。解决方法是将两者放在同一个文件(如`__init__.py`)中初始化。在配置过程中注意避免此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

render_template其实很智能了,平常的情况下是没问题的,但是和blueprint结合后,就带来了坑。

先说说描述问题吧。如果你的flask用了blueprint,然后在你的templates不管设置成什么名字,只要蓝图下的html模板文件和主templates下

的html模板文件重名,那么程序会使用主程序下的模板了!!!

比如下面的代码就会只请求主程序的

@app.route('/', methods=['Get'])
def index():
    return render_template('index.html')
@bp.route('/', methods=['Get'])
def index():
    return render_template('index.html')

、flask-login 用户管理

Login-Manager 实例创建好之后,并在工厂函数__init__.pfy文件中初始化:login_manager.init__app(app).

而Login-Manager.user_loader()装饰器放在了models.py数据库模型中,导致出现

No user_loader has been installed for this LoginManager. Add one with the 'LoginManager.user_loader' decorator这样的错误,后来将login-manager实例和装饰器放在一起后(__init__.py)中之后,解决问题

login_manager.init_app(app)
 
 
from app.models import User
from app.models import load_user
@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))


二、蓝本创建完成并在工厂函数__init__.py中注册后,运行项目出现404 NOT FOUND错误,原因是先注册了auth下的蓝本,而不是先注册的main下的蓝本,因为跟路由
@main.route('/')
def index():
     return render_template('index.html',title='欢迎您')
<think>嗯,用户想用Flask和pymysql构建一个工业缺陷检测系统。首先,我需要确定这个系统的基本组成部分。通常,这样的系统需要用户上传图片,然后后台处理这些图片,检测是否有缺陷,再存储结果到数据库。所以,我应该考虑如何设计数据库表结构,处理文件上传,以及如何集成缺陷检测模型。 接下来,用户可能不太熟悉Flask和pymysql的具体操作,所以需要分步骤指导。首先,安装必要的库,比如Flask、pymysql,可能还需要用到Pillow处理图像,以及深度学习框架如TensorFlow或PyTorch,但用户没有明确提到模型部分,可能只需要框架部分,所以暂时先不深入模型实现。 数据库设计方面,可能需要两个表,一个存储用户信息,另一个存储检测记录。用户表需要用户名和密码,检测记录表需要关联用户ID、图片路径、检测结果和时间戳。不过用户可能只需要核心功能,所以可能先简化,只保留检测记录表,用户认证可以后续扩展。 然后,设置Flask应用结构,包括初始化app,配置数据库连接参数,比如主机、用户名、密码、数据库名。接着,创建数据库连接和游标,可能需要用上下文管理器处理连接,避免资源泄露。 关于路由,需要处理上传图片的POST请求,上传的文件保存到服务器,然后将信息存入数据库。检测结果可以暂时模拟,比如随机返回是否有缺陷,或者调用一个简单的模型。但用户可能希望看到如何集成检测功能,所以可能需要提到如何加载模型并进行推理。 文件上传部分,要确保上传目录存在,限制允许的文件类型,比如图片格式。处理上传时,生成唯一文件名防止冲突,保存文件到指定路径。然后将文件路径、检测结果、时间戳存入数据库。 前端部分需要简单的HTML表单,让用户选择文件上传,并显示结果。可能需要使用Jinja2模板来渲染结果页面,显示检测记录。 可能遇到的:数据库连接没有正确关闭,导致资源耗尽;文件上传的安全问题,比如验证文件类型和大小;检测模型的高性能要求,可能需要异步处理,但用户可能暂时不需要,所以先同步处理。 测试时,用户可能需要用curl或Postman测试API,或者写简单的HTML表单。需要提醒用户安装所有依赖库,创建数据库和表结构,并确保数据库连接参数正确。 最后,扩展部分可以考虑用户认证、异步任务、模型部署、前端优化等,但用户目前可能需要基础框架,所以先提供核心代码示例,再建议可能的优化方向。</think>以下是一个基于 Flask + PyMySQL 的工业缺陷检测系统基础框架设计思路和示例代码,主要包含数据库设计、核心API实现和简单的前端交互: --- ### **1. 系统架构设计** ``` 工业缺陷检测系统 ├── 前端 (HTML/CSS/JS) # 用户上传图片/查看结果 ├── Flask后端 # 处理请求、逻辑控制 ├── 深度学习模型 # 执行缺陷检测算法(可替换) └── MySQL数据库 # 存储用户、检测记录、缺陷数据 ``` --- ### **2. 数据库设计 (pymysql)** ```sql -- 用户表(可选) CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE NOT NULL, password VARCHAR(100) NOT NULL ); -- 检测记录表(核心) CREATE TABLE defect_records ( id INT PRIMARY KEY AUTO_INCREMENT, user_id INT, -- 如果需要用户关联 image_path VARCHAR(255) NOT NULL, -- 上传图片存储路径 defect_type VARCHAR(50), -- 缺陷类型 confidence FLOAT, -- 检测置信度 is_defective BOOLEAN DEFAULT FALSE,-- 是否缺陷 detection_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users(id) ); ``` --- ### **3. Flask核心代码示例** ```python from flask import Flask, render_template, request, redirect, url_for import pymysql import os from datetime import datetime app = Flask(__name__) app.config['UPLOAD_FOLDER'] = 'static/uploads/' app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg'} # 数据库配置 db_config = { 'host': 'localhost', 'user': 'your_username', 'password': 'your_password', 'db': 'defect_detection', 'charset': 'utf8mb4', 'cursorclass': pymysql.cursors.DictCursor } def get_db_connection(): return pymysql.connect(**db_config) # 模拟缺陷检测函数(替换为实际模型) def detect_defect(image_path): # 此处应调用实际AI模型,返回检测结果 return { 'is_defective': True, 'defect_type': '划痕', 'confidence': 0.92 } @app.route('/') def index(): return render_template('upload.html') @app.route('/upload', methods=['POST']) def upload_file(): if 'file' not in request.files: return redirect(request.url) file = request.files['file'] if file.filename == '': return redirect(request.url) if file and allowed_file(file.filename): # 保存上传文件 filename = datetime.now().strftime("%Y%m%d%H%M%S") + "_" + file.filename save_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(save_path) # 执行缺陷检测 result = detect_defect(save_path) # 存储到数据库 connection = get_db_connection() try: with connection.cursor() as cursor: sql = """ INSERT INTO defect_records (image_path, defect_type, confidence, is_defective) VALUES (%s, %s, %s, %s) """ cursor.execute(sql, ( save_path, result['defect_type'], result['confidence'], result['is_defective'] )) connection.commit() finally: connection.close() return render_template('result.html', image_path=save_path, result=result) return redirect(request.url) def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS'] if __name__ == '__main__': os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True) app.run(debug=True) ``` --- ### **4. 前端示例 (templates/upload.html)** ```html <!DOCTYPE html> <html> <head> <title>工业缺陷检测</title> </head> <body> <h1>上传待检测图片</h1> <form method="post" enctype="multipart/form-data" action="/upload"> <input type="file" name="file" accept="image/*" required> <input type="submit" value="开始检测"> </form> </body> </html> ``` --- ### **5. 运行准备** 1. 安装依赖: ```bash pip install flask pymysql pillow ``` 2. 创建MySQL数据库和表结构 3. 配置`db_config`中的数据库连接信息 4. 创建`static/uploads/`目录存放上传图片 --- ### **6. 扩展方向建议** 1. **模型集成**:替换`detect_defect()`函数为实际模型(如YOLO、Faster R-CNN) 2. **异步处理**:使用Celery处理耗时检测任务 3. **用户认证**:增加注册/登录功能(使用Flask-Login) 4. **可视化增强**:通过Echarts展示检测统计图表 5. **REST API**:提供JSON接口供其他系统调用 6. **安全优化**:限制文件大小、类型校验、防SQL注入 需要根据具体工业场景调整缺陷类型判断逻辑和模型选型。实际工业部署还需要考虑: - 高并发处理 - 模型服务化部署(TensorFlow Serving等) - 硬件加速(GPU推理) - 日志监控系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值