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

目录

介绍

安装

 简单初使用

新建项目目录

视图映射

无参映射

带参映射 

? 传参映射

连接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

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

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

相关文章

【Vue】vue3简介与环境配置

文章目录 项目编码规范什么是 Vue&#xff1f;安装node环境nvm针对node版本惊醒管理的工具 项目编码规范 组合式API Typescript setup(语法糖) 什么是 Vue&#xff1f; Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;…

JavaBean是什么?

Bean的本意为豌豆、子实&#xff0c;在这里引申为一种实体。JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean&#xff0c;类必须是具体的和公共的&#xff0c;并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性&#xff0…

【总结】在嵌入式设备上可以离线运行的LLM--Llama

文章目录 Llama 简介运用另一种&#xff1a;MLC-LLM 一个令人沮丧的结论在资源受限的嵌入式设备上无法运行LLM&#xff08;大语言模型&#xff09;。 一丝曙光&#xff1a;tinyLlama-1.1b&#xff08;10亿参数&#xff0c;需要至少2.98GB的RAM&#xff09; Llama 简介 LLaMA…

电商技术揭秘四:电商平台的物流管理系统

文章目录 引言一、物流管理系统的功能与架构1.1 物流管理系统在电商平台中的作用概述保障订单的及时配送优化库存管理控制运营成本提升客户服务水平支持数据驱动的决策应对市场变化 1.2 订单处理功能分析自动化处理流程订单分配与履行错误检测与处理机制实时订单状态更新订单数…

ZKP价值链路的垂直整合

1. ZKP proof生命周期 从ZKP&#xff08;zero-knowledge proof&#xff09;生命周期&#xff0c;先看围绕ZKP的价值链路形成&#xff1a; 1&#xff09;User intent用户意图&#xff1a;以某用户意图为起点&#xff0c;如想要在某zk-rollup上swap某token、证明其身份、执行某…

【从零开始】自建高质量免费ip代理池(截止2024.4.1最新版)

文章目录 前言基础常识代理服务器状态码端口号 常见免费ip代理池网站实现思路代码实现main.pyutils.pydemo.py 结果如下 前言 为了防止ip被封后还能爬取网页&#xff0c;最常见的方法就是自己构建一个ip代理池。 本来用的是下面这个开源项目ip代理池&#xff0c; github开源项…

二维数字滤波器设计

Rafael C. Gonzalez “Digital Image Processing”的错误 按理说这本书的第三作者Steven是数字信号处理出身&#xff0c;他本人又对信号处理非常熟悉&#xff0c;不能理解为什么这本书的频域滤波器一章几乎没有对的地方。 对于巴特沃斯等模拟滤波器&#xff0c;利用全通带减去…

GPT 模型解析:ChatGPT 如何在语言处理领域引领潮流?

人工智能时代来临 我们正处于AI的iPhone时刻。——黄仁勋&#xff08;英伟达CEO&#xff09; ChatGPT 好得有点可怕了&#xff0c;我们距离危险的强人工智能不远了。——马斯克&#xff08;Tesla/SpaceX/Twitter CEO&#xff09; 以上的内容说明我们现在正处于一个技术大翻牌的…

就业班 第二阶段 2401--3.29 day9 shell之正则+数组

九、shell 编程-数组 普通数组:只能用整数作为数组的索引 关联数组:可以使用字符串作为数组的索引 数组定义 普通数组定义: [rootnewrain shell]# books( linux shell awk sed ) 引用: [rootnewrain shell]# echo ${books[0]} linux [rootnewrain shell]# echo ${books[1]…

篮球竞赛预约平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)篮球馆,篮球赛,竞赛项目,赛事预约

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

苍穹外卖06(HttpClient,微信小程序开发,微信登录流程,获取授权码从微信平台获取用户信息)

目录 一、HttpClient 1. 介绍 2. 入门案例 1 导入依赖(已有) 2 GET方式请求 2 POST方式请求 二、微信小程序开发 1. 介绍 2. 准备工作 1 注册小程序获取AppID 注册小程序 完善小程序信息 2 下载并安装开发者工具 3 设置小程序开发者工具(必做) 3. 入门案例 1 小…

Screeps Arena 游戏基础教程

一. 游戏内教程汉化1. 循环和导入&#xff08;Loop and Import&#xff09;2. 简单移动&#xff08;Simple move&#xff09;3. 首次攻击&#xff08;First Attack&#xff09;4. 爬虫的身体部分&#xff08;Creeps Bodies&#xff09;5. 存储和转移 &#xff08;Store and Tra…

通过提交容器的方式修改ubuntu镜像的apt源

通过提交容器的方式修改ubuntu镜像的apt源 步骤总结 问题&#xff0c;每次创建容器之后&#xff0c;都要在容器内手动更改镜像源。 不如&#xff0c;干脆修改镜像的apt源&#xff0c;一次到位。 步骤 先创建一个容器&#xff0c;到容器内执行变更命令。 D:/sandbox> dock…

Yarn 的安装和使用

在前端开发中&#xff0c;包管理工具是必不可少的利器&#xff0c;而 Yarn 就是其中一个备受欢迎的选择。本文将介绍如何安装和使用 Yarn&#xff0c;并解决可能遇到的一些常见问题&#xff0c;让你更高效地管理项目依赖。 什么是 Yarn&#xff1f; Yarn 是由 Facebook、Goo…

算法学习——LeetCode力扣图论篇1(797. 所有可能的路径、200. 岛屿数量、695. 岛屿的最大面积)

算法学习——LeetCode力扣图论篇1 797. 所有可能的路径 797. 所有可能的路径 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特…

【单】Unity _RPG项目中的问题

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a; ⭐…

C++:多态、模板

一、多态 相同的代码、实现不同的功能 1.前提 1.类之间有继承关系 2.父类中有虚函数 3.父类的指针指向子类的对象 2.函数重写 1.发生在继承之间 2.父类中有虚函数 3.子类中对父类的虚函数重新实现 3.虚函数 1.在函数头前加上virtual 2.只要基类中的函数是虚函数&#xff0c;后…

MyBatis-Plus04(条件构造器)

条件构造器和常用接口 wrapper介绍 Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装 UpdateWrapper &#xff1a; Update 条件封装 A…

如何在Ubuntu系统使用Nextcloud+Cpolar搭建可公网访问私人专属网盘

文章目录 1. 安装Docker2. 使用Docker拉取Nextcloud镜像3. 创建并启动Nextcloud容器4. 本地连接测试5. 公网远程访问本地Nextcloud容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛…

穿什么有这么重要?--装饰模式

1.1 穿什么有这么重要&#xff1f; 约会穿什么&#xff1f; "那要看你想给人家什么印象&#xff1f;是比较年轻&#xff0c;还是比较干练&#xff1b;是比较颓废&#xff0c;还是要比较阳光&#xff1b;也有可能你想给人家一种极其难忘的印象&#xff0c;那穿法又大不一样…