目录
介绍
安装
简单初使用
新建项目目录
视图映射
无参映射
带参映射
? 传参映射
连接mysql
orm对象视图映射建表
编辑 crud操作
新增操作
查询操作
普通查询
查询返回json数据
前端传递json体数据查询
更新操作
删除操作
orm表关系映射
flask-migrate迁移mysql
蓝图结构模块
新建蓝图模块结构
扩展文件
视图文件
配置文件
蓝图路由目录
根目录路由
user目录路由
主启动文件
代码提交到远程仓库码云
源码
介绍
Python Flask 框架是一款轻量级的 Web 开发框架,由 Armin Ronacher 创建,遵循 MVC(Model-View-Controller)模式的设计理念,虽然它本身并未严格强制此模式,但提供了足够灵活的基础结构来构建 web 应用程序。Flask 基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎,以其小巧精悍、易于扩展的特点深受开发者喜爱,特别适合小型至中型规模的 Web 项目,同时也能够通过扩展支持大型项目需求。
以下是 Flask 框架的主要特点和组成部分:
-
轻量级:Flask 不像 Django 那样内置了许多高级组件,如 ORM、表单验证等,但它提供了基础的路由和请求响应处理机制,允许开发者自由选择所需的功能模块。
-
路由系统:Flask 使用装饰器定义 URL 规则和对应的视图函数,使得 URL 映射到处理函数的过程变得直观和简洁。
-
请求上下文:Flask 提供了全局请求和应用上下文,使得开发者能够在任意地方获取请求相关信息,比如请求方法、参数、cookies、session 等。
-
模板渲染:Flask 使用 Jinja2 模板引擎,使开发者能够以声明式的方式编写动态网页模板,支持模板继承、宏等高级特性。
-
扩展性强:尽管 Flask 自身很小,但它有一个庞大的插件生态系统,通过扩展可以轻松地添加诸如数据库支持、身份验证、缓存、RESTful API 支持等多种功能。
-
WSGI 兼容:Flask 符合 WSGI 标准,这意味着 Flask 应用可以部署在任何兼容 WSGI 的服务器上,如 Gunicorn、uWSGI 等。
-
测试友好:Flask 提供了便捷的方式来模拟客户端请求进行单元测试和集成测试。
-
灵活性:Flask 不强制特定的项目结构,开发者可以根据自身需求组织代码架构。
安装
pip install flask==想要安装的版本号
查看是否安装成功
简单初使用
这里开发时可以使用pyChram开发,博主习惯使用vscode了,这里以vscode演示
新建项目目录
新建静态文件夹和模版文件夹 以及app.py文件
书写代码:
右上角启动
如果启动后报如下错误
则需要安装和flask相对应的werkzeug版本
安装后再次启动
视图映射
无参映射
@app.route('路径参数')
@app.route()方法可以很方便的进行路径和视图的映射
带参映射
在url中使用<参数名>来进行参数定义的携带
? 传参映射
不传参数时会按照设置的默认值进行获取
连接mysql
安装pymysql
pip install pymysql
这里再安装一个可以直接orm的框架,不用再手写原生sql的一个库来使用
pip install flask-sqlalchemy
书写代码测试连接
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text app = Flask(__name__)# mysql主机名
HOSTNAME = "127.0.0.1"
# mysql端口号
PORT = "3306"
# 账户名
USERNAME = "root"
PASSWORD = "root"
# 要连接的数据库名
DATABASE = "testmysql2"app.config['SQLALCHEMY_DATABASE_URI'] = f'mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4'# 在app.config中设置好连接数据库的信息
# 使用SQLAlchemy提供的db对象来操作数据库
# 创建数据库连接对象
db = SQLAlchemy(app)#测试数据库是否连接成功
with app.app_context():with db.engine.connect() as conn:rs = conn.execute(text("select now()"))print(rs.fetchone())if __name__ == '__main__':app.run(debug=True,host='0.0.0.0',port=8080)
运行测试
可以看到打印出了当前测试时的时间,只不过是放在括号里面,每个时间维度以逗号分割了
orm对象视图映射建表
可以通过orm进行自动映射建表
启动运行测试
在navicat中可以看到通过orm自动建表测试的新表
crud操作
新增操作
通过新建orm对象,将orm对象添加到db的会话中进行数据的新增
启动测试
查询操作
普通查询
先模拟插入一些数据
将前面的新增方法调整为路径传参,然后调用方法进行新增数据
查询全部数据
根据主键查询
查询返回json数据
首先在视图模型中创建to_dict()方法,类似于java中的构造方法和toString()方法
导入flask的jsonify模块,也可以直接使用python自带的json模块
书写查询到的数据转json
启动测试
页面显示为json数据,此时就可以和前端进行数据的联调测试了
前端传递json体数据查询
有时候前端传递参数时也会传递body体的json形式参数
书写后端处理方法
查询测试:
更新操作
删除操作
原有的id为1的数据删掉了
orm表关系映射
可以使用orm来进行表之间的主外键映射
现在创建一个文章表,和user表之间的关系是一对多: user(一) ===>article(多)
将user表的主键作为article的外键进行关联
新增文章内容
启动测试
查看表外键
新增数据测试:
查看外键author_id是user表的哪个主键
是名字为张飞的主键2
通过作者来查询绑定的多个文章
测试
flask-migrate迁移mysql
之前我们直接使用flask_sqlalchemy来进行数据库表的视图映射,这里会存在一个问题,那就是新增的视图虽然已经在数据库里新增好了,但是如果后续我们对视图的字段进行新增或者调整字段的类型名字等操作,此时的数据库表是不会有同步更新的
可以尝试操作下:
将user视图新增email属性
启动测试,观察数据库表的user是否有新增字段email
没有变化.此时为了解决这个问题我们可以使用flask-migrate来对视图和数据库表的同步问题进行管理
安装库
pip install flask-migrate
删除掉原有的数据库表
导入使用
注释掉原先的视图映射
绑定视图映射
来到项目目录的终端下,进行初始化
只执行一次
flask db init
再执行生成迁移脚本命令
该命令会识别orm模型的改变,生成迁移脚本
flask db migrate
执行后可以在相应的version文件夹下看到生成的迁移脚本
最后运行迁移脚本,生成数据库表
flask db upgrade
查看数据库中是否生成了表
注意该命令在用时要格外注意,其会先将数据库中原有表全部清除,然后创建新的表,别问为什么,不信的话可以踩下坑试试o(╥﹏╥)o
这个almbic_version是flask_migrate本身的一个存储更改脚本版本号的表,不用管
重新执行生成脚本和运行脚本命令
再次查看数据库表
可以看到phone字段已经同步到了数据表中
蓝图结构模块
在实际开发中是需要将各个模块进行拆分,达到松耦合的容易维护的结构
使用flask携带的蓝图进行搭建
新建蓝图模块结构
扩展文件
里面存放扩展文件所需要的包,可以解决一定程度的循环依赖
视图文件
存放和数据库表对应的视图文件
配置文件
存放项目的配置数据,比如数据库配置等
蓝图路由目录
存放各个路由路径文件
根目录路由
user目录路由
主启动文件
启动测试
代码提交到远程仓库码云
来到项目文件夹下
初始化 git
git init
初始化后项目代码变颜色表示初始化完成
添加到暂存区
git add .
提交代码到本地仓库
git commit -m '提交信息'
复制码云远程地址
关联远程仓库地址
git remote add origin https://gitee.com/awft/flask_studyff.git
推送代码到远程仓库
git push origin 推送的分支名
在远程仓库里查看代码是否推送成功
源码
练习源码已上传码云
flask_study: 简单入门下flask