仓库:MuZiCul/RFID_Flask(原创)· 语言:Python (Flask) · 定位:RFID 驱动的入库/出库/库存/库位全流程管理
基于 Flask 的 Web 库存管理解决方案:用 RFID 技术追踪库存流动,实时管理入库、出库、库存水平与库位信息,支持用户管理、邮件告警与定时任务。
app.py)app.config['SCHEDULER_TIMEZONE'] = 'Asia/Shanghai' # 时区显式指定(定时任务必须用)
db.init_app(app)
migrate = Migrate(app, db)
redis_client.init_app(app)
scheduler = APScheduler()
scheduler.init_app(app)
app.register_blueprint(user_bp)
app.register_blueprint(general_bp)
app.register_blueprint(inventory_bp)
app.config['UPLOAD_PATH'] = os.path.join(os.path.dirname(__file__), 'file')
scheduler.start()
三个蓝图:user_bp(用户/权限)、general_bp(通用)、inventory_bp(库存核心业务)。
大多数项目把邮件配置写死在配置文件里,本项目把它存进数据库并支持在线修改:
def load_config_from_database():
mail_config = ConfigModel.query.filter_by(id=1).first()
app.config['MAIL_SERVER'] = mail_config.mail_server
app.config['MAIL_PORT'] = mail_config.mail_port
app.config['MAIL_USE_TLS'] = mail_config.mail_use_tls
app.config['MAIL_USE_SSL'] = mail_config.mail_use_ssl
app.config['MAIL_DEBUG'] = mail_config.mail_debug
app.config['MAIL_USERNAME'] = mail_config.mail_username
app.config['MAIL_PASSWORD'] = mail_config.mail_password
app.config['MAIL_DEFAULT_SENDER'] = mail_config.mail_default_sender
mail.init_app(app) # 用新配置重新初始化 mail 扩展
配合 /mail_setting(POST,@login_required)路由,管理员可以在 Web 界面直接改 SMTP 配置并即时生效——不需要改代码、不需要重启服务。
这个设计对"交付给非技术用户使用"的系统非常实用:SMTP 服务器换址、密码过期时,用户自己就能改。
| 组件 | 用途 |
|---|---|
| Flask + 蓝图 | Web 框架与模块化 |
| Flask-SQLAlchemy + Flask-Migrate | ORM 与数据库迁移 |
| Flask-Mail | 库存阈值告警邮件 |
Redis (redis_client) |
验证码/会话缓存 |
| Flask-APScheduler | 定时任务(验证码清理) |
| LayUI | 前端界面 |
RFID_Flask/
├── app.py # 应用入口 + 邮件配置加载
├── blueprints/ # user / general / inventory
├── config/
│ ├── config.py # 配置
│ ├── models.py # 数据模型(UserModel、ConfigModel 等)
│ ├── exts.py # db / mail / redis_client 扩展
│ └── decorators.py # login_required 等装饰器
├── templates/ static/ utils/ migrations/ file/
└── requirements.txt
这个项目做了几个我觉得有用的设计:
SCHEDULER_TIMEZONE = 'Asia/Shanghai'——APScheduler 不设时区会导致定时任务在 UTC 时间触发(差 8 小时),这是实战中常见的坑,作者处理得很到位从 Flask_framework(基础脚手架)到 RFID_Flask(真实业务),是我做 Flask 项目的一个过程。