在这里插入图片描述
项目功能概述

  • 首页(公开博客显示)
  • 博客发布与查询
  • 用户登录与注册
  • 底层MySQL数据库的动态响应与支持

简介Flask作为Python的一个轻量级Web框架,以其灵活性和可扩展性,赢得了众多开发者的青睐。从本文开始,你将从0开始与我一起搭建一个公开式,配备底层数据库支持的博客问答项目。在项目实战中,你不仅可以进一步深入了解Flask框架的核心概念,还将掌握如何搭建一个模块化的Flask支持的后端项目架构,为构建复杂的Web应用奠定坚实的基础。

目录

一、基础项目文件架构的搭建
二、子文件的功能介绍
2.1 blueprints/
2.2 static/
2.3 templates/
2.4 app.py
2.5 config.py
2.6 exts.py
2.7 models.py
三、其它软件环境配置
3.1 MySQL安装: 采用集成式管理软件
3.2 浏览器准备: Chrome
3.3 前后端请求响应测试平台: Apifox
四、结束语


🚀 读完本文,你将开始以下超实用技能和知识储备的学习之旅

  • 逐步掌握Flask框架的基本使用:逐步学会从零开始搭建一个Flask项目,理解其工作原理和基本配置。
  • 逐步学会构建模块化文件架构:学会通过合理划分项目文件结构,提高代码的可维护性和可扩展性。
  • 逐步熟悉数据库的集成与操作:逐渐深入了解如何在Flask项目中集成MySQL数据库,并进行基本的数据操作。
  • 逐步掌握前后端交互的基本方法:逐渐学会使用Apifox等工具测试前后端的请求响应,确保数据交互的正确性。

一、基础项目文件架构的搭建

在开始编写代码之前,我们需要先搭建一个合理的项目文件架构。一个良好的文件架构可以让我们在开发过程中更加高效地管理代码,便于后续的维护和扩展。以下是我们的博客问答项目的基础文件架构

flask_project/
│── blueprints/
│ ├── init.py
│ ├── author.py
│ ├── ques_ans.py
│── static/
│── templates/
│── app.py/
│── config.py/
│── exts.py/
│── models.py/

如下图所示:

在这里插入图片描述

flask项目的创建在PyCharm中进行,读者可访问我之前的文章学习如何快速创建一个flask项目:python+flask后端开发系列 | 15分钟把第一个 Flask 项目跑起来!。

flask项目新建成功后,会自动生成statictemplatesapp.py三个文件,上述文件结构中的其它文件,读者自行创建即可,以下我将详细介绍每个模块的具体功能和用途,跟我一起往下阅读叭!

二、子文件的功能介绍

2.1 blueprints/

  • blueprints/:用于存放蓝图(Blueprints),每个蓝图代表一个功能模块,主要用于视图函数的模块化设计与开发。

蓝图(Blueprints)是Flask中用于模块化可重用视图、模板、静态文件等的一种方式。我们可以通过蓝图将项目拆分为多个功能模块,每个模块都有自己的视图函数模板静态文件

这里,我再blueprints/目录下创建了两个脚本文件authou.pyques_ans.py,用于后续分别存放与用户注册和博客发布查询的相关视图函数模块:url_prefix=""用于指定该模块的根目录,后续在该模块开发的所有视图函数均以url_prefix=""指定的目录为开头。

  1. authou.py
from flask import Blueprint# /author/
BPObj = Blueprint("author", __name__, url_prefix="/author")BPObj.route('/login')def auth_login():pass
  1. ques_ans.py
from flask import Blueprint# /
BPObj = Blueprint("author", __name__, url_prefix="/")BPObj.route('/')def index():pass

上述两个脚本在app.py中使用app.register_blueprint()函数注册蓝图,将蓝图中的视图函数添加到应用中。

2.2 static/

  • static/:存放静态文件,如CSS、JavaScript和图片等。

静态文件是指不会被服务器动态生成的文件,如CSS样式表JavaScript脚本图片等。在Flask中,静态文件存放在static/目录下,可以通过url_for('static', filename='...')函数访问。

读者可以参考我之前的文章以快速了解静态资源文件的加载与使用:Python + Flask 后端开发系列 | Jinja2 模板中的静态文件加载与使用细节

2.3 templates/

  • templates/:存放HTML模板文件,用于渲染页面。

模板文件是用于生成HTML页面的文件,通常存放在templates/目录下。Flask使用Jinja2模板引擎来渲染模板文件,支持变量替换、循环、条件判断等功能。

读者可以参考我之前的文章快速了解flask架构中模板文件的使用与继承机制:python+flask后端开发系列 | Jinja2下HTML模板的继承机制与应用场景

2.4 app.py

  • app.py:项目的入口文件,用于启动应用。
# -*- coding: utf-8 -*-
# 从flask包中导入flask类
from flask import Flask
# 导入config
import config
# 导入SQLAlchemy对象
from exts import DB
# 导入用户对象
from models import UserModel
# 导入视图函数的蓝图对象
from blueprints.author import BPObj as auth_BPObj
from blueprints.ques_ans import BPObj as qa_BPObj# 从flask类中创建一个app对象
app = Flask(__name__)
# 将config配置导入flask对象,绑定配置文件
app.config.from_object(config)
# 将SQLAlchemy对象与app对象绑定
DB.init_app(app)
# 将蓝图对象注册到app中
app.register_blueprint(auth_BPObj)
app.register_blueprint(qa_BPObj)@app.route('/')
def hello_world():return 'hello world'if __name__ == '__main__':app.run()

app.py中,所有的配置、扩展、脚本等都被注册与整合,所以,在flask项目模块化开发中,app.py的作用更像是一个中枢机构,用于整合资源与调度,并不直接在其中进行源码的开发

2.5 config.py

  • config.py:配置文件,用于存放应用的配置信息,如数据库配置信息等。
from flask_sqlalchemy import SQLAlchemy# 创建数据库扩展对象
db = SQLAlchemy()

上述代码中,SQLAlchemy类用于创建数据库扩展对象,通过在app.py文件中使用db.init_app(app)方法将其初始化。

2.6 exts.py

  • exts.py:存放扩展模块,如数据库扩展。
# 扩展插件from flask_sqlalchemy import SQLAlchemyDB = SQLAlchemy()

2.7 models.py

  • models.py:定义数据库模型,用于操作数据库。
from exts import DBclass UserModel(DB.Model):pass

三、其它软件环境配置

3.1 MySQL安装: 采用集成式管理软件

为了方便管理MySQL数据库,我们可以使用集成式管理软件Navicat。Navicat软件提供了图形化界面,方便我们进行数据库的创建、表的创建、数据的插入等操作。
在这里插入图片描述

读者可以参考我之前的文章快速了解flask架构中MySQL数据库的使用与链接:Python + Flask 后端开发~进阶系列 | Flask与底层数据库(MySQL)的连接

3.2 浏览器准备: Chrome

在开发过程中,我们需要使用浏览器来测试应用的前端页面。推荐使用Chrome浏览器,因为它提供了丰富的开发者工具,方便我们调试和优化页面。
在这里插入图片描述

3.3 前后端请求响应测试平台: Apifox

Apifox是一个强大的前后端请求响应测试平台,支持多种编程语言和框架。我们可以使用它来测试Flask应用的API接口,确保前后端的数据交互正确无误。

可以访问官网进行项目注册与设置,我们将在后续开发中使用!https://app.apifox.com/
在这里插入图片描述

四、结束语

通过本文的学习,你已经掌握了如何搭建一个模块化的Flask后端项目架构,并了解了各个文件的功能和作用。这只是一个开始,Flask的强大之处在于它的灵活性和可扩展性。我将以上述文件结构为基础在后续继续扩展项目功能,添加更多的模块和功能。

关注专栏,我将在后续文章中带你一步一步搭建一个灵活的博客问答项目,为你的flask前后端开发提供一些项目经验与技术查询字典!


最后,感谢你的阅读!如果你觉得本文对你有帮助,不妨点赞和关注,我会继续分享更多关于 Python 和 Flask 开发的实用知识。🚀

我的邮箱:yifanduan@stu.ncst.edu.cn.

关注专栏每周更新,带你从“第一个 Flask 项目”一路进阶到“Docker 部署、JWT 鉴权、微服务拆分”。

版权归作者所有,未经许可请勿抄袭,套用,商用(或其它具有利益性行为)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:
http://www.pswp.cn/news/919510.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919510.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919510.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精品方案 | GCKontrol与OMNeT++联合仿真在机载网络性能分析中的应用

概述本文基于GCKontrol搭建了飞行仿真模型,并基于OMNeT搭建了机内网络系统,实现了不同专业、不同平台的模型集成与调试。通过这种联合仿真架构,能够模拟飞机在不同飞行状态下的网络性能,极大提高了性能评估的精度和可靠性。这不仅…

阶跃星辰 StepFun 入驻 GitCode 平台,带来工业级 AI 体验

在 2025 年的 AI 产业应用实践中,开发者面临三重核心挑战:​⚠️上下文窗口局限​:主流 AI 模型普遍受限于 4K-32K 的上下文长度,导致技术方案文档需被强制拆分处理,破坏架构设计的连贯性。 ​⚠️跨行业文档识别缺陷​…

亚马逊新品爆单策略:从传统困境到智能突破

新品上架,是每个亚马逊卖家最期待又最煎熬的阶段。我至今记得一款新品上线后的第一周:每天看着广告费像流水一样烧掉,单量却迟迟不见起色。后台的ACOS一路飙升,几天时间,我的预算已经消耗了一大半。那种“钱花了&#…

第7章 React性能优化核心

性能优化是React开发中的重要主题,直接影响用户体验和应用成功。本章将深入探讨React性能优化的核心技术和最佳实践,从组件记忆化到Bundle优化,帮你掌握构建高性能React应用的关键技能。 通过本章学习,你将掌握如何识别性能瓶颈、选择合适的优化策略,以及在实际项目中应用…

docker CI操作演示分享(第四期)

引言java项目:1、将项目通过maven进行编译打包2、将文件上传到指定的服务器中3、将war包放到tomcat的目录中4、通过Dockerfile将tomcat和war包转成一个镜像,由docker-compose去运行容器项目更新后:将上述流程再次的从头到尾的执行一次go项目&…

Kubernetes 的 YAML 配置文件-kind

Kubernetes的YAML配置文件–kind 在 Kubernetes 的 YAML 配置文件中,kind: 字段用于指定你要创建的资源对象类型。Kubernetes 支持多种资源类型,它们可以分为以下几大类: 一、核心资源类型(常用) 1. Pod 描述:最小的部署单元,包含一个或多个容器。 特点:临时性(Pod …

Tumblr长文运营:亚矩阵云手机助力多账号轮询与关键词布局系统

——基于硬件虚拟化与AI语义分析的垂直内容渗透方案​一、技术架构:长文运营的三大核心引擎​​多账号轮询系统​​虚拟设备集群​:基于ARM服务器虚拟化技术(如亚矩阵RK3588芯片),单台物理服务器可模拟500独立Tumblr客…

K8s命名空间:资源隔离与管理的核心

K8s 命名空间(Namespace)概念Kubernetes(K8s)中的命名空间是用于在集群内对资源进行逻辑隔离的机制,通过划分不同的命名空间,可以将集群资源(如 Pod、Service、Deployment 等)分配到…

MTK Linux DRM分析(一)- DRM简介

Linux的DRM(Direct Rendering Manager)驱动是内核中管理图形硬件的核心子系统,旨在支持现代显卡的复杂功能(如3D渲染、多图层合成和硬件加速),同时解决传统FB(Framebuffer)架构的局限…

数据挖掘笔记:点到线段的距离计算

1. 写在前面 最近在搞一个"大曲率弯道"场景的数据挖掘,里面有个逻辑是给定自车的定位坐标和车道线的坐标点,根据点到线段的距离,去找到自车所在的车道中心线。 然后发现这个计算其实在很多场景中都是可以用到的,所以就…

C++篇(2)C++入门(下)

一、引用1.1 引用的概念和定义引用不是新定义一个变量,而是给已经存在的变量取别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用一块内存空间。类型& 引用别名 引用对象int a 10;int& b a; //b是a的引用1.2 引用的…

Windows 如何清理右键菜单?电脑桌面右键菜单里出现一个清理内存 怎么去掉?

RightMenuMgr是一款绿色小巧免费的右键菜单管理工具,简体中文界面,很方便操作,可以帮助用户轻松管理右键菜单,能够重新定义传统的右键,软件体积小,功能强大,安全无毒,且使用免费&…

【力扣 Hot100】 刷题日记——双指针的经典应用

D11 两数之和 II - 输入有序数组 LCR 006. 两数之和 II - 输入有序数组 - 力扣(LeetCode) 这道题目也是双指针的一个典型应用,题目要求找出和为target的两个数字的下标,并且告诉了有且仅有一对符合条件的数字。 而且题目已经给…

在一台没联网的机器上,用ollama加载qwen3,14b

文章目录 背景 去另一台机器下载模型 使用docker部署ollama 后续 背景 项目甲方终于搞定了一台T4,咱们的项目又可以正常推进了。 但是,高高兴兴地上去之后,发现,此机器竟不可以联网~ 不过好在,前辈已经把docker装好了。 竟然还有ollama的镜像。 可以的,至少可以节省一…

Angular由一个bug说起之十八:伴随框架升级而升级ESLint遇到的问题与思考

伴随框架升级而升级ESLint遇到的问题与思考 对于eslint这个前端事实上的代码检查工具标准,大家可能是再熟悉不过了。几乎是在编码的时时刻刻都在和它接触。在我们开发维护长达十年的项目中自然也是采用了ESLint,在从 AngularJS 一路到今天现代化的 Angu…

unfold 切图像,图形transformer的切割操作

import torch x torch.arange(8*12).view(1,1,8,12) mx.unfold(2, 4, 4) n m.unfold(3, 4, 4)输入第一次切,切高度维度,但是切完做了转置 ,得到(1,1,2,12,4)切宽度 得…

基于最小二乘支持向量机的数据回归预测 LSSVM

一、作品详细简介 1.1附件文件夹程序代码截图 全部完整源代码,请在个人首页置顶文章查看: 学行库小秘_CSDN博客​编辑https://blog.csdn.net/weixin_47760707?spm1000.2115.3001.5343 1.2各文件夹说明 1.2.1 main.m主函数文件 该MATLAB 代码实现了…

Java虚拟机故障处理工具全指南

目录 一、JVM故障处理工具概述 二、详细工具解析 1. jps:虚拟机进程状况工具 2. jstat:虚拟机统计信息监视工具 3. jinfo:Java配置信息工具 4. jmap:Java内存映像工具 5. jhat:堆转储快照分析工具 6. jstack&a…

【LeetCode热题100道笔记+动画】接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水…

短剧小程序系统开发:构建影视娱乐新生态的基石

在移动互联网的浪潮中,影视娱乐行业正经历着深刻的变革。短剧,作为一种新兴的内容形式,以其独特的魅力和广泛的受众基础,成为了行业发展的新亮点。而短剧小程序系统开发,则是构建影视娱乐新生态的基石,为行…