Python轻量级框架Flask开发web应用(附源码自取)

本文介绍了PythonFlask框架的基础使用,包括安装、路由映射、ORM与数据库连接、CRUD操作、模板渲染、蓝图结构以及版本控制。通过实例演示了如何创建项目、连接MySQL、使用Flask-SQLAlchemy和Flask-Migrate进行数据库管理以及Git的协作流程。
摘要由CSDN通过智能技术生成

目录

介绍

安装

 简单初使用

新建项目目录

视图映射

无参映射

带参映射 

? 传参映射

连接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 框架的主要特点和组成部分:

  1. 轻量级:Flask 不像 Django 那样内置了许多高级组件,如 ORM、表单验证等,但它提供了基础的路由和请求响应处理机制,允许开发者自由选择所需的功能模块。

  2. 路由系统:Flask 使用装饰器定义 URL 规则和对应的视图函数,使得 URL 映射到处理函数的过程变得直观和简洁。

  3. 请求上下文:Flask 提供了全局请求和应用上下文,使得开发者能够在任意地方获取请求相关信息,比如请求方法、参数、cookies、session 等。

  4. 模板渲染:Flask 使用 Jinja2 模板引擎,使开发者能够以声明式的方式编写动态网页模板,支持模板继承、宏等高级特性。

  5. 扩展性强:尽管 Flask 自身很小,但它有一个庞大的插件生态系统,通过扩展可以轻松地添加诸如数据库支持、身份验证、缓存、RESTful API 支持等多种功能。

  6. WSGI 兼容:Flask 符合 WSGI 标准,这意味着 Flask 应用可以部署在任何兼容 WSGI 的服务器上,如 Gunicorn、uWSGI 等。

  7. 测试友好:Flask 提供了便捷的方式来模拟客户端请求进行单元测试和集成测试。

  8. 灵活性: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

  • 26
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值