織夢發(fā)布文章wordpressseo優(yōu)化軟件哪個好
文章目錄
- 前言
- 一、Pycharm創(chuàng)建flask項目
- 1.創(chuàng)建虛擬環(huán)境
- 2.創(chuàng)建flask項目
- 二、遠程調用PythonAPI——SpringBoot項目集成
- 1.修改PyCharm的host配置
- 2.防火墻設置
- 3.SpringBoot遠程調用PythonAPI
前言
解決Pycharm運行Flask指定ip、端口更改無效的問題
首先先創(chuàng)建一個新的flask項目,這里用的python是Anaconda中創(chuàng)建的虛擬環(huán)境,Pycharm是2024.2.1版本
一、Pycharm創(chuàng)建flask項目
這里PC上已經安裝下載好了Anaconda,創(chuàng)建一個目錄(用于創(chuàng)建虛擬環(huán)境并存儲flask項目),打開Anaconda Powershell Prompt,進入該目錄。
1.創(chuàng)建虛擬環(huán)境
按照conda命令創(chuàng)建虛擬python環(huán)境以及切換:
- 創(chuàng)建虛擬環(huán)境:
conda create -n 環(huán)境名 python=版本號
- 查看所有環(huán)境
conda info --envs
- 切換到剛創(chuàng)建的環(huán)境
(base變成之前新建的環(huán)境名,就代表切換成功)
conda activate 環(huán)境名
2.創(chuàng)建flask項目
- 在當前目錄下載安裝好flask需要的所有包
- 命令如下:(pip或者pip3都行,能使用鏡像下載,命令后加上鏡像源地址即可,如下)
# 安裝flask
pip3 install flask
pip3 install flask -i https://pypi.tuna.tsinghua.edu.cn/simple #清華大學# 安裝flask-restful
pip3 install flask-restful# 安裝flasgger
# 注意:需要更新setuptools
pip3 install -U setuptools
pip3 install flasgger# 管理數據庫的依賴
pip3 install flask_script
pip3 install flask_migrate
#其他鏡像源
https://mirrors.aliyun.com/pypi/simple/ #阿里云
https://mirrors.163.com/pypi/simple/ #網易
https://mirrors.huaweicloud.com/repository/pypi/simple/ #華為云
全都成功安裝后打開PyCharm
- 新建項目,選擇flask項目,位置選擇剛剛創(chuàng)建的目錄,以及編輯項目名稱,如圖:
點擊創(chuàng)建后,會等待加載flask環(huán)境,項目加載成功后,頁面會有示例的app.py,在PyCharm的右下角點擊python解釋器,會有conda的python虛擬環(huán)境列表,如圖:選擇剛剛創(chuàng)建的即可
然后就能成功運行了,運行后控制臺會有訪問網址
用網址在瀏覽器中直接訪問即可
PS:剛開始創(chuàng)建的項目是GET請求,因此瀏覽器能直接訪問,訪問成功如圖:
但是如果是POST請求,瀏覽器不能直接訪問,想要檢驗接口是否成功可以選擇命令行方式
或者使用命令行的方式也能訪問(目前為止只能本機上進行訪問)
#GET
curl http://127.0.0.1:5000/#POST
curl -X POST http://127.0.0.1:5000/api/sum -H "Content-Type: application/json" -d "[參數]"
二、遠程調用PythonAPI——SpringBoot項目集成
1.修改PyCharm的host配置
修改app.py的代碼如下:
from flask import Flask, jsonify, request
app = Flask(__name__)@app.route('/api/sum', methods=['POST'])
def sum_numbers():data = request.jsonresult = sum(data.get('numbers', []))return jsonify({'result': result})if __name__ == '__main__':app.run(host='0.0.0.0', port=5000) # 使用0.0.0.0讓其他機器也能訪問
-
在這里直接在run中指定項目的host訪問IP和端口port,然后運行項目,會發(fā)現控制臺的訪問地址依舊是
[ Running on http://127.0.0.1:5000]
這是PyCharm的原因,可能有人在這一步就成功修改host配置了,修改成功后的控制臺會輸出
[ Running on http://0.0.0.0:5000]
這就代表其他機器也能訪問該API(在防火墻以及允許端口入站的情況下,后面會說防火墻如何開啟特定端口) -
代碼修改host沒用的話,在PyCharm的運行按鈕找到運行配置——Pycharm Edit Configurations
-
-
點擊后如果界面上能找到Additional options選項,可參考這篇博客解決Pycharm Flask(默認ip與端口不能改變與改變之后外網依舊不能訪問ip的問題)
-
如果點擊后跟我一樣找不到Additional options選項的,可以點擊界面中的【修改選項】,然后在列表中勾選【其他選項】
-
在彈出的其他選項輸入框中輸入【–host=0.0.0.0 --port=5000】,點擊應用
-重新運行該項目,控制臺會出現其他ip:5000
-
代表host配置修改成功
2.防火墻設置
使用 Windows Defender 防火墻
-
打開控制面板:
點擊“開始”按鈕,然后在搜索框中輸入“控制面板”并打開它。
在控制面板中,點擊“系統和安全”下的“Windows Defender 防火墻”。
進入高級設置: -
在左側菜單中,點擊“高級設置”
-
創(chuàng)建新的入站規(guī)則:
在“Windows Defender 防火墻與高級安全”窗口中,點擊左側的“入站規(guī)則”,然后在右側點擊“新建規(guī)則”。 -
選擇規(guī)則類型:
在“新建入站規(guī)則向導”中,選擇“端口”,然后點擊“下一步”。
指定端口: -
選擇“TCP”,然后在“特定本地端口”中輸入5000,點擊“下一步”。
設置操作:
選擇“允許連接”,然后點擊“下一步”。 -
配置文件:
選擇你想要應用規(guī)則的配置文件(通常是“域”,“專用”和“公用”),然后點擊“下一步”。 -
命名規(guī)則:
給你的規(guī)則起一個名字(例如“Allow Port 5000”),并提供一個描述(可選),然后點擊“完成”。
在設置完防火墻規(guī)則后,你可以使用 Test-NetConnection 命令來測試端口是否已經開放
Test-NetConnection -ComputerName localhost -Port 5000
如果是在另一臺PC中,可以修改【localhost 】為flaskPC端的IP來嘗試是否能遠程訪問,如圖:為true代表訪問成功。
3.SpringBoot遠程調用PythonAPI
- pythonAPI app.py
from flask import Flask, jsonify, request
app = Flask(__name__)@app.route('/api/sum', methods=['POST'])
def sum_numbers():data = request.jsonresult = sum(data.get('numbers', []))return jsonify({'result': result})if __name__ == '__main__':app.run(host='0.0.0.0', port=5000) # 使用0.0.0.0讓其他機器也能訪問
- SpringBoot-RestTemplateConfig配置類
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}
}
- SpringBoot-控制層
import com.youlai.system.common.result.Result;
import com.youlai.system.service.DeepKeService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping("/deepkeIE")
@RequiredArgsConstructor
public class DeepKeController {private final DeepKeService deepKeService;private final RestTemplate restTemplate;@PostMapping("/run-python-script")public Result<?> runPythonScript(@RequestParam int num) {int sum = deepKeService.callPythonSumApi(num);System.out.println("Sum from Python API: " + sum);return Result.success(sum);}
}
- SpringBoot-業(yè)務接口類
public interface DeepKeService {int callPythonSumApi(int numbers);
}
- SpringBoot-業(yè)務實現類
import com.youlai.system.service.DeepKeService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;import java.util.HashMap;
import java.util.Map;@Service
@RequiredArgsConstructor
public class DeepKeServiceImpl implements DeepKeService {private final RestTemplate restTemplate;@Overridepublic int callPythonSumApi(int numbers) {Map<String, Object> requestData = new HashMap<>();requestData.put("numbers", new int[]{numbers});ResponseEntity<Map> response = restTemplate.postForEntity("http://192.168.0.70:5000/api/sum", requestData, Map.class);return (Integer) response.getBody().get("result");}
}
- postman測試結果