Flask後端開發(一)-基礎知識和前期準備

来源:https://www.cnblogs.com/CrazyPixel/archive/2023/10/24/17785553.html
-Advertisement-
Play Games

本文主要介紹了python flask後端開發項目中的相關知識,包括flask項目結構、flask部署方式、前後端對接、後端介面測試工具。 ...


目錄

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 / 掘金論壇 / 知乎


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面 react整體是函數式的思想,把組件設計成純組件,狀態和邏輯通過參數傳入,而vue的思想是響應式的,也就是基於是數據可變的,通過對每一個屬性建立Watcher來監聽, 當屬性變化的時候,響應式的更新對應的虛擬dom react的思路通過js來生成html, 所以設計了jsx,還有通過js來 ...
  • 接上一節:從零用VitePress搭建博客教程(6) -– 第三方組件庫的使用和VitePress搭建組件庫文檔 我們搭建完成vitePress後,那麼接下來就是如何部署到線上伺服器,這裡使用Github Pages,免得自己購買伺服器,當然你也可以自己購買伺服器來部署(比如阿裡雲伺服器)。 在部署 ...
  • Telegram 宣佈為其開發者提供了一項“能夠在 App 中運行迷你應用”的新功能( 迷你應用即 Mini App,下文中以“小程式”代替)。 ...
  • 一、定義 動態地給一個對象增加一些額外的職責。就擴展功能而言,裝飾模式提供了一種比使用子類更加靈活的替代方案。裝飾模式是一種結構型模式。 二、描述 包含以下三個角色:1、Component(抽象構件):它是具體構件和抽象裝飾類的父類,聲明瞭在具體構件中實現的業務方法,它的引入可以是客戶端以一致的方式 ...
  • 幾年前,我被問到“你是如何變成一名架構師的?”。基於這個話題,我們討論了很多,比如必要的技術、經驗以及所需要的知識儲備等。這一次討論促使我開始思考要成為一名架構師應該具備和學習的東西有哪些,成為一個優秀的架構師應該具備哪些能力和做哪些事情。為此我查閱資料,走訪各位大佬,當然也結合自己的經歷,最終我輸 ...
  • 1. 非同步編程概述 非同步編程是一種編程範式,用於處理那些需要等待I/O操作完成或者耗時任務的情況。在傳統的同步編程中,代碼會按照順序逐行執行,直到遇到一個耗時操作,它會阻塞程式的執行直到操作完成。這種阻塞式的模型在某些場景下效率低下,因為代碼在等待操作完成時無法執行其他任務。 非同步編程通過使用非阻塞 ...
  • 類方法就是為對象提供一些數據操作的函數,也就是類方法是操作對象的函數。那麼在Dart中,類方法到底有哪些特別之處呢…… ...
  • 目錄1. 什麼是內網穿透2. 實現背景3. 實現步驟3.1 安裝3.1.1 下載3.1.2 安裝服務端3.1.3 安裝客戶端4. Nginx 配置5. 官方文檔 1. 什麼是內網穿透 內網穿透(Port Forwarding)是一種網路技術,允許你將外部網路中的請求轉發到內部網路中的特定電腦或設備 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...