flask项目框架搭建

目录结构

blueprints

python包,蓝图文件,相当于路由组的概念,方便模块化开发

例如auth.py文件

python 复制代码
from flask import Blueprint, render_template

bp = Blueprint("auth", __name__, url_prefix="/auth")


@bp.route("/login")
def login():
    pass


@bp.route("/register")
def register():
    return render_template("register.html")

如果想访问register.html页面

那么请求url就是:ip:port/auth/register

app.py文件中需要进行初始化蓝图文件

python 复制代码
from flask import Flask
from blueprints.qa import bp as qa_bp
from blueprints.auth import bp as auth_bp

app = Flask(__name__)

app.register_blueprint(qa_bp)
app.register_blueprint(auth_bp)



if __name__ == '__main__':
    app.run()
migrations

数据库迁移产生的包,其中包含迁移的脚本

由迁移三部曲生成:

第一

python 复制代码
flask db init

第二(识别ORM模型的改变,生成迁移脚本)

python 复制代码
flask db migrate

第三(运行迁移脚本,同步到数据库中)

python 复制代码
flask db upgrade
static

存放静态文件的包,其中存放js,css,images等

templates

存放html文件

app.py

‌Flask的app.py文件是Flask框架中的核心应用程序类App的实现,包含了Flask应用程序的基本结构和核心功能。‌该文件定义了Flask应用程序的基本配置、路由注册、错误处理、请求响应处理以及扩展初始化等重要功能‌。

具体来说,app.py文件的作用包括以下几个方面:

‌配置管理‌:设置Flask应用程序的基本配置,如开启debug模式、设置密钥等‌。

‌路由注册‌:通过装饰器和类方法注册路由,定义应用程序的URL结构和处理函数‌。

‌错误处理‌:注册错误处理函数,定义当应用程序发生错误时的处理逻辑‌。

‌请求/响应处理‌:实现请求和响应的处理方法,包括路由函数、错误处理函数、视图方法等‌。

‌扩展初始化‌:初始化Flask扩展,如SQLAlchemy、Werkzeug、Jinja2等,以添加额外的功能和支持‌。

config.py

负责配置信息,例如数据库配置,邮件配置等

python 复制代码
# 配置数据库信息
HOSTNAME = '127.0.0.1'
PORT = 3306
DATABASE = 'liu_oa'
USERNAME = 'root'
PASSWORD = 'xxxxxx'
DB_URI = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4'
SQLALCHEMY_DATABASE_URI = DB_URI
exts.py

‌Flask中的exts.py文件主要用于解决第三方库的循环引用问题。‌ exts.py文件通过集中管理第三方库的导入,避免了在主程序和其他文件之间形成循环引用,从而简化了代码结构并提高了代码的可维护性‌。

具体来说,exts.py文件通常用于保存数据库和其他第三方库的初始化代码。由于数据库操作和其他第三方库的调用可能会在多个文件中进行,直接在这些文件中导入可能会导致循环引用的问题。通过将这部分代码集中放在exts.py文件中,可以有效地解决这个问题。

python 复制代码
# 这个文件的目的是为了解决循环引用
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail

db = SQLAlchemy()
mail = Mail()
models.py

负责模型的定义,和数据库表映射

python 复制代码
from exts import db
from datetime import datetime


class UserModel(db.Model):
    __tablename__ = "user"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)
    email = db.Column(db.String(100), nullable=False, unique=True)
    join_time = db.Column(db.DateTime, default=datetime.now)
项目地址

https://gitee.com/yohoo-just-play/liu_oa/

相关推荐
Patrick在香港13 分钟前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
2601_9679801120 分钟前
Python 初学者必备的常用内置函数
python·编程语言·内置函数·初学者·常用函数
OnlineProxy27 分钟前
移动应用数据爬取:通过模拟器与流量嗅探对 API 进行逆向工程
爬虫·python·httpx
染指111043 分钟前
162.Agent-LangGraph-检查点的作用
人工智能·python·langchain·agents
我命由我123451 小时前
访客系统形式(有用户概念、无用户概念)
java·开发语言·前端·javascript·python·产品运营·产品经理
xixingzhe21 小时前
图表中同比与环比的区别:看趋势还是看变化?
开发语言·python
forest_092 小时前
当 AI 搜索开始「自我进化」,谁来进化它的核实?——「已核实」结论复核器:3 条结论挖出 2 个洞(附可运行代码)
人工智能·python·机器学习·prompt·agi
小小张说故事2 小时前
Python 的 str 为什么设计成不可变?拆开字符串驻留、字符串池,以及 += 拼接到底慢在哪
后端·python
ljt27249606612 小时前
Python笔记(十一)--Numpy(一)
笔记·python·numpy
时早玖沐2 小时前
KOOK「找不到语音频道」:同一个错误假设,我犯了三次
python·开源·ai编程