当前位置: 首页 > news >正文

【远程调用PythonAPI-flask】

文章目录

  • 前言
  • 一、Pycharm创建flask项目
    • 1.创建虚拟环境
    • 2.创建flask项目
  • 二、远程调用PythonAPI——SpringBoot项目集成
    • 1.修改PyCharm的host配置
    • 2.防火墙设置
    • 3.SpringBoot远程调用PythonAPI


前言

解决Pycharm运行Flask指定ip、端口更改无效的问题
首先先创建一个新的flask项目,这里用的python是Anaconda中创建的虚拟环境,Pycharm是2024.2.1版本

一、Pycharm创建flask项目

这里PC上已经安装下载好了Anaconda,创建一个目录(用于创建虚拟环境并存储flask项目),打开Anaconda Powershell Prompt,进入该目录。

1.创建虚拟环境

按照conda命令创建虚拟python环境以及切换:

  • 创建虚拟环境:
conda create -n 环境名 python=版本号
  • 查看所有环境
conda info --envs

在这里插入图片描述

  • 切换到刚创建的环境
    (base变成之前新建的环境名,就代表切换成功)
conda activate 环境名

在这里插入图片描述

2.创建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项目,位置选择刚刚创建的目录,以及编辑项目名称,如图:
    在这里插入图片描述
    在这里插入图片描述
    点击创建后,会等待加载flask环境,项目加载成功后,页面会有示例的app.py,在PyCharm的右下角点击python解释器,会有conda的python虚拟环境列表,如图:选择刚刚创建的即可
    在这里插入图片描述
    然后就能成功运行了,运行后控制台会有访问网址
    在这里插入图片描述
    用网址在浏览器中直接访问即可
    PS:刚开始创建的项目是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,然后运行项目,会发现控制台的访问地址依旧是
    [ 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 防火墙

  1. 打开控制面板:
    点击“开始”按钮,然后在搜索框中输入“控制面板”并打开它。
    在控制面板中,点击“系统和安全”下的“Windows Defender 防火墙”。
    进入高级设置:

  2. 在左侧菜单中,点击“高级设置”

  3. 创建新的入站规则:
    在“Windows Defender 防火墙与高级安全”窗口中,点击左侧的“入站规则”,然后在右侧点击“新建规则”。

  4. 选择规则类型:
    在“新建入站规则向导”中,选择“端口”,然后点击“下一步”。
    指定端口:

  5. 选择“TCP”,然后在“特定本地端口”中输入5000,点击“下一步”。
    设置操作:
    选择“允许连接”,然后点击“下一步”。

  6. 配置文件:
    选择你想要应用规则的配置文件(通常是“域”,“专用”和“公用”),然后点击“下一步”。

  7. 命名规则:
    给你的规则起一个名字(例如“Allow Port 5000”),并提供一个描述(可选),然后点击“完成”。

在设置完防火墙规则后,你可以使用 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-业务接口类
public interface DeepKeService {int callPythonSumApi(int numbers);
}
  • SpringBoot-业务实现类
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测试结果
    在这里插入图片描述

http://www.mrgr.cn/news/32844.html

相关文章:

  • 滑动窗口算法专题(1)
  • 【更新】上市公司绿色专利申请及授权数据(2000-2023年)
  • 独立站如何批量查收录,如何进行独立站的批量收录查询的详细操作
  • SpringBoot 整合 Caffeine 实现本地缓存
  • 【快手】前端校招一面
  • 自然语言处理-基于注意力机制的文本匹配
  • 并查集LRU cache
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】010 - 二号内核线程 kthreadd线程 工作流程分析
  • 前端入门:HTML+CSS简便开发的技巧
  • Python入门:数据类型、控制流与函数详解
  • Xv6异常处理(二):内核异常
  • [Python数据可视化]探讨数据可视化的实际应用:三个案例分析
  • C语言中if else组合
  • MyBatis-config.xml核心配置
  • ★pwn 更改pwn题libc保姆级教程★
  • 老程序员的数字游戏开发笔记(二) —— 直接开始一个Godot项目
  • vite 使用飞行器仪表示例
  • 1. stm32创建工程并下载
  • 初识模版!!
  • python - 子类为什么调用父类的方法