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转换时,需要了解一些基础概念: 三维坐标系…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

windows系统MySQL安装文档
概览:本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容,为学习者提供全面的操作指导。关键要点包括: 解压 :下载完成后解压压缩包,得到MySQL 8.…...