Bootstrap

python flask简单实践

项目结构

project/
│
├── app.py
├── instance/
│   └── database.db
├── templates/
│   └── index.html
├── static/
│   └── style.css
│   └── favicon.ico
└── database.db

首先创建目录,static 存放一些页面的样式或图标文件。templates存放静态页面。instance目录里会有自动创建的数据库文件。

由于本项目使用的是SQLite 数据库引擎,所以会自动创建到instance目录下

flask启动及上下文

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)

with app.app_context():
    db.create_all()

在某些情况下,会存在报错

This typically means that you attempted to use functionality that needed
the current application. To solve this, set up an application context
with app.app_context(). See the documentation for more information.

这种报错代表需要 Flask 的应用上下文(application context),手动创建应用上下文(app.app_context()),确保代码在正确的上下文中运行。

    with app.app_context():
        try:

主机及端口设置

指定host及端口
app.run(debug=True,host=“127.0.0.1”, port=2225)

如果需要动态指定端口号,可以通过命令行参数或环境变量传递端口号。以下是使用命令行参数的示例:

import sys

if __name__ == '__main__':
    # 从命令行参数获取端口号
    if len(sys.argv) > 1:
        port = int(sys.argv[1])
    else:
        port = 5000  # 默认端口号

    # 在单独的线程中运行定时任务
    import threading
    scheduler_thread = threading.Thread(target=run_scheduler)
    scheduler_thread.start()

    # 启动 Flask 应用,使用指定的端口号
    app.run(debug=True, port=port)

运行应用时,可以通过命令行指定端口号:

python app.py 5001  # 使用端口号 5001

模型文件

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class DailyResult(db.Model):
    __tablename__ = 'daily_results'
    id = db.Column(db.Integer, primary_key=True)
    date = db.Column(db.String(10), nullable=False)
    alarm_project = db.Column(db.String(100), nullable=False)
    algorithm = db.Column(db.String(100), nullable=False)
    alg_table = db.Column(db.String(100), nullable=False)
    developer = db.Column(db.String(50), nullable=False)
    status = db.Column(db.String(50), nullable=False)

模型文件中创建对应的表结构,再在主程序中引入模型

from models import db, DailyResult, CumulativeResu
;