本文主要介紹了python flask後端開發項目中的相關知識,包括flask項目結構、flask部署方式、前後端對接、後端介面測試工具。 ...
目錄
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 # 設置調試模式,生產模式的時候要關掉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
-
-
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") 獲取所有參數
-
4. 後端測試工具
4.1. 工具介紹
測試需求:模擬前端請求,發送對應數據給後端
工具:apipost/postman
工具介紹:Apipost使用教程
4.2. 工具使用
下麵主要介紹我使用apipost這個工具涉及到的功能:
在參數項設置部分,可以選擇導入參數,提前準備好測試樣例,然後直接導入。
整體測試流程如下:
- 運行後端代碼;
- 建立測試項目,進行參數設置;
- 點擊“發送”,模擬前端向後端發送請求;
- 根據後端返回結果進行功能測試和代碼調試。
後續還有功能實現相關代碼,待補充ing...
後記
如果覺得我寫得不錯,不妨點贊關註一波走起~
想看更多博文,可以訪問我的博客主頁: 博客園 / CSDN / 51CTO / 掘金論壇 / 知乎