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. 项目难点

  1. 前后端对接;
  2. 修改本地文件,包括.mlx这类动态脚本文件;
  3. 查找文件内容,并修改对应参数;
  4. python语言远程连接服务器并执行命令;
  5. 命令行输出实时读取并展示;
  6. 后端代码调试手法(小白第一次搞后端嘛

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后端开发实现的功能

  1. 修改文件参数值——根据网页端的参数数值,修改对应文件的参数值
    1. 获取网页端传参
    2. 读取对应文件:包括普通的程序文档以及mlx文件;
    3. 查找对应修改位置,替换数据
  2. 读取结果数据——展示oai运行的结果,返回给前端;
    1. 文件结果如何存储;
    2. 读取对应文件,构建参数返回给前端;
  3. 运行liunx命令行——使用python编程语言远程连接服务器,多线程运行liunx命令,从而运行oai代码和matlab代码。
    1. 远程连接服务器
    2. python语言多线程执行liunx命令
    3. 实时读取liunx命令的输出数据
    4. 终止命令执行

3. flask部署和前后端对接

3.1. flask运行配置和服务器部署

  1. flask安装

    1. 打开cmd窗口,如果已经部署了python环境,则使用如下命令安装flask对应包

      pip install flask

  2. flask基本框架

    1. 最简单的flask框架如下所示:

      from flask import Flask
      app = Flask(__name__)
       
      @app.route('/')
      def hello_world():
         return 'Hello World'
       
      if __name__ == '__main__':
         app.run()
      
    2. 对于需要分模块进行操作的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  # 设置调试模式,生产模式的时候要关掉debug
          app.run(host='127.0.0.1', port=5000)  # 启动服务器
      
      

      对于每个模块下的子文件index.py,文件结构如下:

      from flask import Blueprint, jsonify, request, Flask, render_template
      from markupsafe import escape
      
      model1_name = Blueprint("/model1_name", __name__)#这个是为了和主文件的连接部分进行对接
      
      # GET - 从指定的资源请求数据。 POST - 向指定的资源提交要被处理的数据。
      @model1_name.route("/function1", methods=["POST","GET"])
      def function1():
          #to do something
          return jsonify({"Success": "成功参数"})
      
      @model1_name.route("/function2", methods=["POST"])
      def function2():
      	#to do something 
          return jsonify({"Success": "成功参数"})
      
      def global_function():#这里可以设置一些公共函数,前面的function函数可以调用这些公共函数,简化代码形式
      	#to do 
          
      
  3. flask运行
    将整个项目存储于某个文件夹之后,运行方式有如下几种:

    • 通过vscode打开项目,运行app.py文件
    • cmd窗口进入该项目文件夹,使用python app.py运行;
    • cmd窗口进入该项目文件夹,使用flask run方式运行;(只针对主文件为app.py的项目)
  4. flask服务器部署

    1. 将flask文件复制一份到服务器上,配置flask运行环境
    2. ip端口部署:安装gunicorn
      1. 参考博客:python之gunicorn的配置 - 倥偬时光 - 博客园
      2. 安装:pip install gunicorn
      3. 运行:gunicorn -b ip地址:端口 app:app
    3. 部署之后:
      1. ip端口部署之后,前端可以根据指定的 ip地址:端口访问后端项目。
      2. 重新部署或者接口占用的解决方式:
        1. lsof -i:端口号:显示端口占用的线程
        2. kill -9 线程序号:杀死线程
        3. gunicorn -b ip地址:端口 app:app:重新部署端口

3.2. flask前后端传参

  1. 前端的数据传递

    1. 前端通过GET\POST等协议传递数据给后端,通俗来解释一下:
      1. GET将参数放在网址参数中,类似于如下形式

        https://account.bilibili.com/big?spm_id_from=333.999.0.0
        【key=value 形式传参】:“spm_id_from=333.999.0.0”就是通过GET方式进行数据传输。

      2. POST将数据打包之后再传给后端,类似于如下形式(json格式):

        {
        “password”:“12334”,
        “username”:“crazypixel”,

        }
        【body传参】:数据有名称和具体值,打包之后发送出去

  2. 后端的数据接收

    1. flask后端框架中,在方法定义时有method变量

      @model1_name.route(“/function2”, methods=[“POST”])
      这里的methods=[“GET”,“POST”]就表示后端接口能支持GET\POST两种数据传输方法,而methods=[“POST”]则不支持GET方法,只支持POST方法

    2. 本项目中主要使用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 / 掘金论坛 / 知乎

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

13.4web自动化测试(Selenium3+Java)

一.定义 用来做web自动化测试的框架. 二.特点 1.支持各种浏览器. 2.支持各种平台(操作系统). 3.支持各种编程语言. 4.有丰富的api. 三.工作原理 四.搭环境 1.对照Chrome浏览器版本号,下载ChromeDriver,配置环境变量,我直接把.exe文件放在了jdk安装路径的bin文件夹下了(j…

LSM Tree 深度解析

我们将深入探讨日志结构合并树,也称为LSM Tree:这是许多高度可扩展的NoSQL分布式键值型数据库的基础数据结构,例如Amazon的DynamoDB、Cassandra和ScyllaDB。这些数据库的设计被认为支持比传统关系数据库更高的写入速率。我们将看到LSM Tree如…

分享10个创意满满的产品设计网站

在当今的互联网时代,新颖性和创造力是最受关注的,无论一个产品有多好,但没有创意的包装都很难“看到太阳”。因此,创意产品的设计非常重要,今天小将为您带来10个非常有创意的产品设计网站。话不多说,上干货…

越流行的大语言模型越不安全

源自:GoUpSec “人工智能技术与咨询” 发布 安全研究人员用OpenSSF记分卡对GitHub上50个最流行的生成式AI大语言模型项目的安全性进行了评估,结果发现越流行的大语言模型越危险。 近日,安全研究人员用OpenSSF记分卡对GitHub上50个最流…

Sentinel授权规则和规则持久化

大家好我是苏麟 , 今天说说Sentinel规则持久化. 授权规则 授权规则可以对请求方来源做判断和控制。 授权规则 基本规则 授权规则可以对调用方的来源做控制,有白名单和黑名单两种方式。 白名单:来源(origin)在白名单内的调用…

批量编辑 Outlook 联系人

现状 Outlook 自带的联系人编辑功能无法快速、批量编辑联系人字段使用 Excel 等外部编辑器,可批量编辑联系人 导出联系人到文件 在【联系人】界面,点击【文件】在【文件】界面,点击【打开和导出】–>【导入/导出】在弹出的向导窗口中点…

FPGA从入门到精通(二十)SignalTapII

这一篇将介绍SignalTapII。 之前的工程我们是做仿真,设置激励,观察输出波形去判断代码没有问题,但事实上我们真实的需求是综合后的代码下载到FPGA芯片中能够符合预期。 其中可能出现问题的原因有: 1、我们是写testbench设置激励…

接口自动化测试 —— Jmeter 6种定时器应用

①定时器是在每个sampler(采样器)之前执行的,而不是之后,不管这个定时器的位置放在sampler之后,还是之下,都在sampler之前得到执行 ②定时器是有作用域的,当执行一个sampler之前时,…

华为云2023年双十一服务器优惠价格表及活动大全

2023华为云双11优惠活动「云上优选 特惠来袭」,阿腾云atengyun.com整理云服务器优惠价格表,华为云L实例-2核2G3M一年优惠价89元、L实例-2核2G4M价格108元一年、L实例-2核4G5M优惠价198元一年,三年1000元、HECS云服务器-1核2G1M带宽39元一年、…

JavaScript 生成 16: 9 宽高比

这篇文章只是对 for 循环一个简单应用,没有什么知识含量。 可以跳过这篇文章。 只是我用来保存一下我的代码,保存在本地我嫌碍眼,总想把他删了。 正文部分 公式:其中 width 表示宽度,height 表示高度 16 9 w i d t…

大集合按照指定长度进行分割成多个小集合,用于批量多次处理数据

📚目录 拆分案例拆分的核心代码 通常我们对集合的更新或者保存都需要用集合来承载通过插入的效率,但是这个会遇到一个问题就是你不知道那天那个集合的数量可能就超了,虽然我们连接数据库进行批量提交会在配置上配置allowMultiQueriestrue,但是…

【c语言】结构体内存对齐,位段,枚举,联合

之前学完结构体,有没有对结构体的大小会很疑惑呢??其实结构体在内存中存储时会存在内存对齐,捎带讲讲位段,枚举,和联合,跟着小张一起学习吧 结构体内存对齐 结构体的对齐规则: 第一个成员在与结…

Android 12 源码分析 —— 应用层 四(SystemUI的基本布局设计及其基本概念)

Android 12 源码分析 —— 应用层 四(SystemUI的基本布局设计及其基本概念) 在上两篇文章中,我们介绍SystemUI的启动过程,以及基本的组件依赖关系。基本的依赖关系请读者一定要掌握,因为后面的文章,将会时…

【力扣】416. 分割等和子集 <动态规划、回溯>

【力扣】416. 分割等和子集 给你一个 只包含正整数的非空数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5,…

【Nacos】使用Nacos进行服务发现、配置管理

Nacos Nacos是 Dynamic Naming and Configuration Service 的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 版本说明&#xff1a;版本说明 alibaba/spring-cloud-alibaba Wiki GitHub <properties><java.version>…

vue报错RangeError: Maximum call stack size exceeded

这种情况&#xff0c;一般是跳转路由时发生此类错误&#xff0c;像我的就是如此。比如路由指向的vue文件里代码有错误&#xff0c;或者设置路由时重定向了路由自己&#xff0c;造成死循环。 1、首先检查自己跳转的路由地址的代码本身是否有语法错误之类的&#xff0c;造成错误…

Python中的os模块:walk函数与listdir函数的深度解析

Python中的os模块&#xff1a;walk函数与listdir函数的深度解析 os.walk()函数listdir()函数使用场景案例一&#xff1a;遍历目录树并处理文件案例二&#xff1a;列出目录中的文件名并执行某些操作 总结 在Python中&#xff0c;os模块提供了许多与操作系统交互的功能&#xff0…

opencv案例06-基于opencv图像匹配的消防通道障碍物检测与深度yolo检测的对比

基于图像匹配的消防通道障碍物检测 技术背景 消防通道是指在各种险情发生时&#xff0c;用于消防人员实施营救和被困人员疏散的通道。消防法规定任何单位和个人不得占用、堵塞、封闭消防通道。事实上&#xff0c;由于消防通道通常缺乏管理&#xff0c;导致各种垃圾&#xff0…

(十九)大数据实战——Flume数据采集框架安装部署

前言 本节内容我们主要介绍一下大数据数据采集框架flume的安装部署&#xff0c;Flume 是一款流行的开源分布式系统&#xff0c;用于高效地采集、汇总和传输大规模数据。它主要用于处理大量产生的日志数据和事件流。Flume 支持从各种数据源&#xff08;如日志文件、消息队列、数…

【广州华锐互动】AR远程连接专家进行协同管理,解放双手让协同更便捷

AR远程协同系统是一种基于AR技术&#xff0c;实现远程设备维修和技术支持的系统。该系统通过将虚拟信息叠加在现实世界中&#xff0c;实现对设备的全方位监控和管理&#xff0c;并可以通过AR眼镜等终端设备&#xff0c;实时查看设备的各项数据和信息&#xff0c;为设备维修提供…