1.Flask環境安裝
首先,進行Flask相應依賴庫的環境安裝(python這些我就不提了)。最基本的一些依賴庫還是需要我們進行安裝的,如下圖所示。直接本地安裝的話就照這個安裝,離線下載的話就下載好對應的*.whl文件依次安裝即可,其他用Pycharm啥的你就直接找Flask安裝就得了,我也不多介紹。
2.Flask腳本
簡單的創建一個Python程序,暫定為CreateFlask.cs。代碼如下,網絡地址為127.0.0.1,若是遠程調用則該處需要更改為0.0.0.0。
##遠程訪問的話,設置端口為host=0.0.0.0##
##重點## 0.0.0.0表示任意地址,不能直接使用,使用時應該使用一個確定地址##
##本地仍舊是訪問http://127.0.0.1:8000/,遠程訪問的話就把0.0.0.0替換成服務器的IP地址##
# !/usr/bin/python # -*- coding: UTF-8 -*- # python服務器如果需要訪問靜態的文件,都需要放到static這個指定的文件夾。 from flask import Flask, jsonify, request from flask import render_template from wtforms import StringField, Form from wtforms.validators import DataRequired import AddNum app = Flask(__name__) app.logger.info('Finished Start Flask!') # 開始數據轉移 @app.route('/add/', methods=['POST']) def startTransfer(name=None): if request.method == 'POST': receiveData = request.data.decode('utf-8') # 為了兼容中文輸入 para = str(receiveData) print(para) #輸出接收到的信息 array = str(para).split('#') sum = AddNum.Add(array[1], array[2]) return str(sum) if __name__ == '__main__': app.run(host='127.0.0.1', port=8000, debug=False, threaded=True) # debug=True 時設置的多線程無效 # 多線程和多進程功能只能開一個 1.processes=True 2.threaded=True
#!/usr/bin/python # -*- coding: UTF-8 -*- def Add(para1,para2): return int(para1)+int(para2)
如下圖所示,啟動FLask服務器成功!
3.C#程序
簡單的建立一個window窗體進行編輯。添加控件和響應事件,如下圖所示,Url是功能網址;輸入參數后點擊開始計算,成功輸出結果。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace FlaskClient { public partial class FlaskClient : Form { public FlaskClient() { InitializeComponent(); } private void buttonStart_Click(object sender, EventArgs e) { string log = "";//錯誤信息 string Url = this.textBoxUrl.Text;//功能網址 string add1 = this.textBoxAdd1.Text; string add2 = this.textBoxAdd2.Text; string jsonParams = "#" + add1 + "#" + add2 + "#"; string result = RequestsPost(Url, jsonParams); if (result == null) { log = "Failed to Connect Flask Server!"; } else { if (result.Contains("default")) { log = "There is an error running the algorithm." + "\r\n" + result; } else { this.textBoxSum.Text = result; log = "Test Successed!"; } } MessageBox.Show(log); } /// <summary> /// 通過網絡地址和端口訪問數據 /// </summary> /// <param name="Url">網絡地址</param> /// <param name="jsonParas">json參數</param> /// <returns></returns> public string RequestsPost(string Url, string jsonParas) { string postContent = ""; string strURL = Url; //創建一個HTTP請求 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL); //Post請求方式 request.Method = "POST"; //內容類型 request.ContentType = "application/json"; //設置參數,並進行URL編碼 string paraUrlCoded = jsonParas;//System.Web.HttpUtility.UrlEncode(jsonParas); byte[] payload; //將Json字符串轉化為字節 payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded); //設置請求的ContentLength request.ContentLength = payload.Length; //發送請求,獲得請求流 Stream writer; try { writer = request.GetRequestStream();//獲取用於寫入請求數據的Stream對象 } catch (Exception) { writer = null; MessageBox.Show("連接服務器失敗!"); return null; } //將請求參數寫入流 writer.Write(payload, 0, payload.Length); writer.Close();//關閉請求流 HttpWebResponse response; try { //獲得響應流 response = (HttpWebResponse)request.GetResponse(); } catch (WebException ex) { response = ex.Response as HttpWebResponse; postContent = "default: The response is null." + "\r\n" + "Exception: " + ex.Message; } if (response != null) { try { Stream s = response.GetResponseStream(); StreamReader sRead = new StreamReader(s); postContent = sRead.ReadToEnd(); sRead.Close(); } catch (Exception e) { postContent = "default: The data stream is not readable." + "\r\n" + e.Message; } } return postContent;//返回Json數據 } } }
初始代碼就這樣了,后續其他功能擴展也就在這個基礎上進行就可以了,C#這邊只需要添加相應的Url和輸入參數即可。Flask腳本那邊就增加對應的路由,搭配起來操作不會太麻煩。下篇會講一下Flask的主要用途,用於界面設計的搭配,這塊的話就完全可以去除掉C#的用處,從網頁端即可進行服務器的一些操作。