Flask后端开发(一)-基础知识和前期准备
目录
- 1.背景介绍
- 1.1. 项目背景
- 1.2. 项目难点
- 1.3. 项目环境
- 2. flask后端开发实现的功能
- 3. flask部署和前后端对接
- 3.1. flask运行配置和服务器部署
- 3.2. flask前后端传参
- 4. 后端测试工具
- 4.1. 工具介绍
- 4.2. 工具使用
- 后记
1.背景介绍
1.1. 项目背景
就是前几个月临时接手了一个后端项目,使用python flask框架进行后端开发,整个项目开发内容相对简单,主要是文件读取和修改,没有用上数据库操作,主要实现的功能点包括:
- 根据网页端的参数数值,修改对应文件的参数值;
- 展示oai运行的结果,返回给前端;
- 使用python编程语言远程连接服务器,多线程运行liunx命令,从而运行oai代码和matlab代码。
- 实时读取liunx命令的命令行输出,返回给前端做展示;
- 随时终止命令行执行;
这篇文章将会梳理我在这个项目开发过程中的学习收获,欢迎交流!
1.2. 项目难点
- 前后端对接;
- 修改本地文件,包括
.mlx这类动态脚本文件; - 查找文件内容,并修改对应参数;
- python语言远程连接服务器并执行命令;
- 命令行输出实时读取并展示;
- 后端代码调试手法(小白第一次搞后端嘛
1.3. 项目环境
- flask 2.3.3
- gunicorn 20.0.4
- python 2.7.18
- MobaXterm_Personal 23.2
- Ubuntu 20.04.6 LTS ( GNU/Linux 5.4.0-163-lowlatency x86_64)
2. flask后端开发实现的功能
- 修改文件参数值——根据网页端的参数数值,修改对应文件的参数值
- 获取网页端传参
- 读取对应文件:包括普通的程序文档以及mlx文件;
- 查找对应修改位置,替换数据
- 读取结果数据——展示oai运行的结果,返回给前端;
- 文件结果如何存储;
- 读取对应文件,构建参数返回给前端;
- 运行liunx命令行——使用python编程语言远程连接服务器,多线程运行liunx命令,从而运行oai代码和matlab代码。
- 远程连接服务器
- python语言多线程执行liunx命令
- 实时读取liunx命令的输出数据
- 终止命令执行
3. flask部署和前后端对接
3.1. flask运行配置和服务器部署
-
flask安装
- 打开cmd窗口,如果已经部署了python环境,则使用如下命令安装flask对应包
pip install flask
- 打开cmd窗口,如果已经部署了python环境,则使用如下命令安装flask对应包
-
flask基本框架
-
最简单的flask框架如下所示:
from flask import Flask app = Flask(__name__)@app.route('/') def hello_world():return 'Hello World'if __name__ == '__main__':app.run() -
对于需要分模块进行操作的flask框架,基本文件框架如下所示:

对于主文件app.py,文件结构如下:# 导入包 from flask import Flask from flask_bootstrap import Bootstrap from module1.index import *#这部分从子模块导入全部代码文件 from module2.index import * from module3.index import * from module4.index import * from flask_cors import CORS# 创建实例 app = Flask(__name__) bootstrap = Bootstrap(app)# 引用子模块 app.register_blueprint(model1_name, url_prefix="/module1_name") app.register_blueprint(model2_name, url_prefix="/module2_name") app.register_blueprint(model3_name, url_prefix="/module3_name") app.register_blueprint(model4_name, url_prefix="/module4_name")@app.route("/") def index():return "Hello World!"if __name__ == "__main__":app.debug = True # 设置调试模式,生产模式的时候要关掉debugapp.run(host='127.0.0.1', port=5000) # 启动服务器对于每个模块下的子文件
index.py,文件结构如下:from flask import Blueprint, jsonify, request, Flask, render_template from markupsafe import escapemodel1_name = Blueprint("/model1_name", __name__)#这个是为了和主文件的连接部分进行对接# GET - 从指定的资源请求数据。 POST - 向指定的资源提交要被处理的数据。 @model1_name.route("/function1", methods=["POST","GET"]) def function1():#to do somethingreturn jsonify({"Success": "成功参数"})@model1_name.route("/function2", methods=["POST"]) def function2():#to do something return jsonify({"Success": "成功参数"})def global_function():#这里可以设置一些公共函数,前面的function函数可以调用这些公共函数,简化代码形式#to do
-
-
flask运行
将整个项目存储于某个文件夹之后,运行方式有如下几种:- 通过vscode打开项目,运行app.py文件
- cmd窗口进入该项目文件夹,使用python app.py运行;
- cmd窗口进入该项目文件夹,使用flask run方式运行;(只针对主文件为app.py的项目)
-
flask服务器部署
- 将flask文件复制一份到服务器上,配置flask运行环境
- ip端口部署:安装gunicorn
- 参考博客:python之gunicorn的配置 - 倥偬时光 - 博客园
- 安装:
pip install gunicorn - 运行:
gunicorn -b ip地址:端口 app:app
- 部署之后:
- ip端口部署之后,前端可以根据指定的 ip地址:端口访问后端项目。
- 重新部署或者接口占用的解决方式:
lsof -i:端口号:显示端口占用的线程kill -9 线程序号:杀死线程gunicorn -b ip地址:端口 app:app:重新部署端口
3.2. flask前后端传参
-
前端的数据传递
- 前端通过GET\POST等协议传递数据给后端,通俗来解释一下:
-
GET将参数放在网址参数中,类似于如下形式
https://account.bilibili.com/big?spm_id_from=333.999.0.0
【key=value 形式传参】:“spm_id_from=333.999.0.0”就是通过GET方式进行数据传输。 -
POST将数据打包之后再传给后端,类似于如下形式(json格式):
{
“password”:“12334”,
“username”:“crazypixel”,
…
}
【body传参】:数据有名称和具体值,打包之后发送出去
-
- 前端通过GET\POST等协议传递数据给后端,通俗来解释一下:
-
后端的数据接收
-
flask后端框架中,在方法定义时有method变量
@model1_name.route(“/function2”, methods=[“POST”])
这里的methods=[“GET”,“POST”]就表示后端接口能支持GET\POST两种数据传输方法,而methods=[“POST”]则不支持GET方法,只支持POST方法 -
本项目中主要使用flask.request库进行数据接收,具体代码如下所示:
#前期方法库引入 from flask import request ## 一般写法 if request.method == "POST":userID= request.form.get("userID") elif request.method == "GET":userID= request.args.get("userID")#列表分割,传递数据为:{"RNTI":"1,2,3"} if request.method == "POST":RNTI= request.form.get("RNTI").split(",")#得到列表[1,2,3]关于flaks.request库,简单总结:
request.form.get("key", type=str, default=None) 获取表单数据 request.args.get("key") 获取get请求参数 request.values.get("key") 获取所有参数可参考链接:https://foofish.net/flask_requset_form_data_json.html
-
4. 后端测试工具
4.1. 工具介绍
测试需求:模拟前端请求,发送对应数据给后端
工具:apipost/postman
工具介绍:Apipost使用教程
4.2. 工具使用
下面主要介绍我使用apipost这个工具涉及到的功能:


在参数项设置部分,可以选择导入参数,提前准备好测试样例,然后直接导入。
整体测试流程如下:
- 运行后端代码;
- 建立测试项目,进行参数设置;
- 点击“发送”,模拟前端向后端发送请求;
- 根据后端返回结果进行功能测试和代码调试。
后续还有功能实现相关代码,待补充ing…
后记
如果觉得我写得不错,不妨点赞关注一波走起~
想看更多博文,可以访问我的博客主页: 博客园 / CSDN / 51CTO / 掘金论坛 / 知乎
相关文章:
Flask后端开发(一)-基础知识和前期准备
目录 1.背景介绍1.1. 项目背景1.2. 项目难点1.3. 项目环境 2. flask后端开发实现的功能3. flask部署和前后端对接3.1. flask运行配置和服务器部署3.2. flask前后端传参 4. 后端测试工具4.1. 工具介绍4.2. 工具使用 后记 1.背景介绍 1.1. 项目背景 就是前几个月临时接手了一个…...
基于SSM的幼儿园管理系统
基于SSM的幼儿园管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatis工具:IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 管理员界面 摘要 基于SSM(Spring、Spring MVC、MyBatis&#…...
互联网Java工程师面试题·Spring篇·第三弹
目录 编辑 4、注解 4.1、什么是基于注解的容器配置 4.2、如何在 spring 中启动注解装配? 4.3、Component, Controller, Repository,Service 有何区别? 4.4、Required 注解有什么用? 4.5、Autowired 注解有什么用? 4.6、…...
前端(二十三)——轮询和长轮询
😫博主:小猫娃来啦 😫文章核心:实现客户端与服务器实时通信的技术手段 文章目录 前言轮询技术轮询的概念轮询的实现原理轮询的优缺点轮询的使用场景 长轮询技术长轮询的概念长轮询的实现原理长轮询的优缺点长轮询的使用场景 轮询与…...
uniapp把文件中的内复制到另一个文件中
使用的是Html 5的plus.io.resolveLocalFileSystemURL方法,文档:HTML5 API Reference var soursePath file:///storage/emulated/0/a/;//用于读取var removePath file:///storage/emulated/0/w/;//用于移除w这个文件夹var targetPath file:///storage/…...
什么是蓝桥杯?什么是蓝桥STEMA考试?
第十五届蓝桥大赛赛事安排? STEMA考试11月(考试时间11月26日) STEMA考试1月(2024年1月) STEMA考试3月(2024年3月) 第十五届蓝桥杯省赛(2024年4月待定) 第十五届蓝桥杯国赛(2024年5月待定) 注:以上时间具体以组委会官方发布为准。 01.蓝桥杯 蓝桥杯全国软件和…...
快递排序Java
快速排序是在工具类常用的排序算法,快速排序的思想主要是选定一个基准元素,然后找到基准元素的位置,然后再分别排序他左边的和他右边的,快速排序是不稳定的,时间复杂度位Nlog(N),最极端的情况就是一个反向排好顺序的数组ÿ…...
Spark简单回顾
星光下的赶路人star的个人主页 大鹏一日同风起,扶摇直上九万里 文章目录 1、Spark1.1 Spark入门1.1.1 Spark部署模式1.1.2 常用端口 1.2 SparkCore1.2.1 RDD不可变和五大属性1.2.2 RDD的弹性1.2.3 cache和Checkpoint的区别1.2.4 算子 1.3 SparkSQL1.4 内核1.4.1提交…...
DDD与微服务的千丝万缕
一、软件设计发展过程二、什么是DDD?2.1 战略设计2.2 战术设计2.3 名词扫盲1. 领域和子域2. 核心域、通用域和支撑域3. 通用语言4. 限界上下文5. 实体和值对象6. 聚合和聚合根 2.4 事件风暴2.5 领域事件 三、DDD与微服务3.1 DDD与微服务的关系3.2 基于DDD进行微服务…...
S32K324 UDS Bootloader开发-需求篇
文章目录 前言内存分配UDS诊断协议需求CAN ID及时间参数UDS诊断服务Bootloader诊断服务APP诊断服务 DID22服务的DID:2E服务的DID:Routine Control DID: 刷写流程预编程主编程后编程 总结 前言 之前做过一个STM32的UDS Bootloader,协议栈主要是NXP官网下…...
【前端设计模式】之调停者模式(中介者模式)
调停者模式是一种行为设计模式,它通过引入一个调停者对象来集中处理一组对象之间的交互。调停者模式的目标是减少对象之间的直接通信,从而降低耦合度,并且使代码更易于维护和扩展。 调停者模式特性 将对象之间的通信集中在一个调停者对象中…...
【MySQL架构篇】SQL执行流程与缓冲池
文章目录 1. SQL执行流程2. 数据库缓冲池(Buffer Pool)2.1 缓冲池概述2.2 缓冲池如何读取数据2.3 查看和设置缓冲池的大小2.4 多个Buffer Pool实例2.5 引申问题 1. SQL执行流程 查询缓存:因为查询效率往往不高,所以在MySQL8.0之后就抛弃了这个功能解析器…...
[support2022@cock.li].faust、[tsai.shen@mailfence.com].faust勒索病毒数据怎么处理|数据解密恢复
引言: 威胁网络安全的恶意软件不断涌现,而[support2022cock.li].faust勒索病毒则是其中的一员。这个网络黑暗角落的新星,以其数据绑架的方式,一度成为数据安全的威胁焦点。本文将探究[support2022cock.li].faust勒索病毒的运作方…...
力扣学习笔记——49. 字母异位词分组
49. 字母异位词分组 https://leetcode.cn/problems/group-anagrams/?envTypestudy-plan-v2&envIdtop-100-liked 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。…...
五、Qt中的常用类
1. QString 字符串类 QString是Qt中的字符串类,与C/C不同的是,不再使用ASCII编码,而使用Unicode编码。因此一个字符不是8位的char,而是16位的QChar,这就是为什么之前一个汉字占用一个字符的原因。、 QString几乎向前兼…...
CentOS 7.9.2009 数据盘挂载
一、linux版本: lsb_release -a 二、操作步骤 2.1,查看磁盘挂载情况,确认sdb是需挂载的硬盘 ## 查看磁盘挂载情况,确认sdb是需挂载的硬盘 lsblk 2.2,对硬盘sdb进行分区 ## 对硬盘sdb进行分区 fdisk /dev/sdb# 命令…...
cv::solvePnP使用方法及注意点详解(OpenCV/C++)
cv::solvePnP(objectPoints, imagePoints, cameraMatrix, distCoeffs, rvec, tvec, useExtrinsicGuess, flags); 1、参数说明: objectPoints:一个 vector<cv::Point3f>,包含了在世界坐标系中的三维点的坐标,至少需要4个点…...
DevOps持续集成-Jenkins(4)
❤️作者简介:2022新星计划第三季云原生与云计算赛道Top5🏅、华为云享专家🏅、云原生领域潜力新星🏅 💛博客首页:C站个人主页🌞 💗作者目的:如有错误请指正,将…...
【数据仓库-零】数据仓库知识体系 ing
文章目录 一. 数仓基本概念二. 离线数仓建设方法论三. etl流程四. 数仓规范建设指南四. 数据仓库架构五. 数据可视化 通过熟悉构建数仓整体的过程,可以系统的了解 数仓构建理论:能够站在全局角度看数仓的运行架构,数仓执行流程。了解到构建数…...
css3 3D 转换 技巧详细解析与代码实例
CSS3 3D转换是CSS3中的一项新特性,通过它我们可以比较容易地实现3D效果。在这里,我将向大家介绍CSS3 3D转换的一些基本概念、使用方法和常见技巧。 1. 基本概念 在使用CSS3 3D转换时,需要了解一些基础概念: 三维坐标系…...
2026年APP兼容性测试平台选型指南:精准破局兼容性难题困扰
随着移动互联网的飞速发展,APP的种类和数量呈爆炸式增长。然而,不同手机品牌、型号以及操作系统版本的差异,让APP在兼容性方面面临巨大挑战。许多开发者都遇到过这样的困扰:APP在某些手机上闪退、界面显示错乱,或是功能…...
NoSleep防休眠工具:彻底解决Windows系统意外休眠的终极方案
NoSleep防休眠工具:彻底解决Windows系统意外休眠的终极方案 【免费下载链接】NoSleep Lightweight Windows utility to prevent screen locking 项目地址: https://gitcode.com/gh_mirrors/nos/NoSleep 在数字化办公时代,电脑意外休眠已成为影响工…...
Claude Code 源码泄露,拿来改造 OpenClaw
一场意外的源码泄露,意外地给开源AI助手社区带来了一份珍贵的“研究素材”。Claude Code近51万行源码的暴露,正好可以为OpenClaw的下一阶段发展,提供一个明确的架构升级蓝图。核心功能:自动化定时任务 (Cron)两者都将“时间管理”…...
2026最权威的五大降AI率方案推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 对于学术研究范畴之内,AI技术给论文写作予以了高效的辅助支持。当下存在着多款能…...
解决Dlib库Windows环境部署难题:从编译失败到生产级应用的完整指南
解决Dlib库Windows环境部署难题:从编译失败到生产级应用的完整指南 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binaries (.whl) for Python 3.7-3.14 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x 在W…...
贾子科学定理(Kucius Science Theorem)的哲学批判与理论重构:从证伪主义到可持续运行的科学范式研究
贾子科学定理(Kucius Science Theorem)的哲学批判与理论重构:从证伪主义到可持续运行的科学范式研究1. 引言1.1 研究背景与问题提出当代科学哲学正处于深刻的范式转换期。传统的波普尔证伪主义面临着前所未有的理论困境和实践挑战,…...
告别密码!用SecureCRT+SSH密钥3分钟搞定Linux服务器安全登录
SecureCRT与SSH密钥:3分钟打造企业级Linux服务器安全登录方案 每次输入冗长密码连接服务器的繁琐操作,正在成为过去式。想象一下,当你凌晨三点紧急处理线上故障时,不再需要反复核对密码本或等待二次验证码——只需轻轻一点&#x…...
Docker核心技能全解析,容器化部署不再难
一、Docker核心概念:搞懂这3个词,入门就成功了一半 在动手操作前,先理清Docker的核心组件,避免陷入"会操作不会原理"的困境: 容器(Container):Docker的核心运行单元&…...
Cursor/AI 助手用自然语言操作监控与告警
主要用途告警管理:查询活跃告警和历史告警,查看告警规则和订阅目标监控:浏览和搜索被监控的主机,分析目标状态事件响应:创建和管理告警屏蔽规则、通知规则和事件流水线团队协作:查询用户、团队和业务组快速…...
解压缩软件分享-Banizip
解压缩软件分享-Banizip蓝奏云地址https://wwbdt.lanzoul.com/ijspk3mbduxi 密码:9y00百度网盘地址通过网盘分享的文件:BANDIZIP6-SETUP.EXE 链接: https://pan.baidu.com/s/1VBovOqT-M7kiv2b9YuJGIw?pwdrc87 提取码: rc87 为什么推荐这个呢,因为这个支…...
