当前位置: 首页 > 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测试结果
    在这里插入图片描述

相关文章:

【远程调用PythonAPI-flask】

文章目录 前言一、Pycharm创建flask项目1.创建虚拟环境2.创建flask项目 二、远程调用PythonAPI——SpringBoot项目集成1.修改PyCharm的host配置2.防火墙设置3.SpringBoot远程调用PythonAPI 前言 解决Pycharm运行Flask指定ip、端口更改无效的问题 首先先创建一个新的flask项目&…...

[今日Arxiv] 思维迭代:利用内心对话进行自主大型语言模型推理

思维迭代&#xff1a;利用内心对话进行自主大型语言模型推理 Iteration of Thought: Leveraging Inner Dialogue for Autonomous Large Language Model Reasoning URL&#xff1a;https://arxiv.org/abs/2409.12618 注&#xff1a;翻译可能存在误差&#xff0c;详细内容建议…...

glTF格式:WebGL应用的3D资产优化解决方案

摘要 glTF作为一种高效的3D资产格式&#xff0c;为WebGL、OpenGL ES和OpenGL运行时的应用提供了强有力的支持。它不仅简化了3D模型的传输与加载流程&#xff0c;还通过优化资产大小&#xff0c;使得打包、解包更加便捷。本文将深入探讨glTF格式的优势&#xff0c;并提供实用的代…...

Unity3D入门(一) : 第一个Unity3D项目,实现矩形自动旋转,并导出到Android运行

1. Unity3D介绍 Unity3D是虚拟现实行业中&#xff0c;使用率较高的一款软件。 它有着强大的功能&#xff0c;是让玩家轻松创建三维视频游戏、建筑可视化、实时三维动画等互动内容的多平台、综合型 虚拟现实开发工具。是一个全面整合的专业引擎。 2. Unity安装 官网 : Unity…...

数据结构与算法——Java实现 8.习题——移除链表元素(值)

祝福你有前路坦途的好运&#xff0c;更祝愿你能保持内心光亮 纵有风雨&#xff0c;依然选择勇敢前行 —— 24.9.22 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示…...

如何理解MVCC

MVCC是什么&#xff1f; MVCC&#xff0c;是MultiVersion Concurrency Control的缩写&#xff0c;翻译成中文就是多版本并发控制&#xff0c;多个事务同时访问同一数据时&#xff0c;调控每一个事务获取到数据的具体版本。和数据库锁一样&#xff0c;它也是一种并发控制的解决…...

在 Qt 中使用 QLabel 设置 GIF 动态背景

文章目录 在 Qt 中使用 QLabel 设置 GIF 动态背景本文食用注意目标实现步骤1. 准备工作2. 修改头文件 widget.h3. 实现构造函数和析构函数4. 调整背景大小5. 完整代码分析6. 运行程序 总结 在 Qt 中使用 QLabel 设置 GIF 动态背景 在 Qt 中&#xff0c;如果希望在窗口中设置一…...

Flyway 数据库差异处理

Flyway 数据库差异处理详解 在软件开发过程中&#xff0c;数据库 schema 的变更是不可避免的&#xff0c;尤其是在多人协作、多环境部署时&#xff0c;不同环境中的数据库结构可能出现差异。Flyway 作为一个数据库迁移工具&#xff0c;通过版本控制和自动化迁移&#xff0c;确…...

CSS 选择器的分类与使用要点一

目录 非 VIP 用户可前往公众号进行免费阅读 标签选择器 id 选择器 类选择器 介绍 公共类 CSS 中优先用 class 选择器,慎用 id 选择器 后代选择器 交集选择器 以标签名作为开头 以类名作为开头 连续交集 并集选择器(分组选择器) 通配符* 儿子选择器 >(IE7…...

无人机集群路径规划:麻雀搜索算法(Sparrow Search Algorithm, SSA)​求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化…...

harbor集成trivy镜像扫描工具

harbor项目地址:GitHub - goharbor/harbor: An open source trusted cloud native registry project that stores, signs, and scans content. 前置条件:安装好docker和docker-compose 一、安装harbor 1、下载harbor安装包并解压 wget https://github.com/goharbor/harbo…...

DMA学习

一、DMA简介 DMA是一种无需CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来&#xff0c;从而大大提高系统的吞吐率。 DMA方式的数据传输由DMA控制器&#xff08;DMAC&#xff09;控制&#xff0c;在传…...

C语言18--头文件

头文件的作用 通常&#xff0c;一个常规的C语言程序会包含多个源码文件&#xff08;.c&#xff09;&#xff0c;当某些公共资源需要在各个源码文件中使用时&#xff0c;为了避免多次编写相同的代码&#xff0c;一般的做法是将这些大家都需要用到的公共资源放入头文件&#xff…...

vscode软件在 C发中常用插件

一. 简介 本文简单介绍一下&#xff0c;当做 C开发时 vscode软件常用的插件。 vscode软件是 微软公司目前提供的一款免费的开发软件&#xff0c;可以通过 vscode官网下载 vscode。 二. vscode软件在 C开发中常用插件 注意&#xff1a;vscode软件安装后&#xff0c;可以直接…...

【C++ Primer Plus习题】17.2

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> #include <fstream> using namesp…...

Vue Props传值

Props用于父组件向子组件传值 定义类型 // 定义一个接口,用来限制Teacher的属性 export interface Teacher {name: string;age: number;gender: string; }export type teacherList Teacher[];// 一个自定义类型 export type Teachers Array<Teacher>;父组件 <scr…...

FreeSWITCH event_socket 配置从其他地址连接

FreeSWITCH 默认配置只能 在本机连接, 要从 其他ip连接, 需要如下配置&#xff1a; 1、修改event_socket.conf.xml 1 <configuration name"event_socket.conf" description"Socket Client">2 <settings>3 <param name"nat-map&…...

信息安全数学基础(19)同余式的基本概念及一次同余式

一、同余式概念 同余式是数论中的一个基本概念&#xff0c;用于描述两个数在除以某个数时所得的余数相同的情况。具体地&#xff0c;设m是一个正整数&#xff0c;a和b是两个整数&#xff0c;如果a和b除以m的余数相同&#xff0c;则称a和b模m同余&#xff0c;记作a≡b(mod m)。反…...

网关过滤器:Spring Cloud Gateway

在Java中&#xff0c;实现网关过滤器&#xff08;Gateway Filter&#xff09;通常与Spring Cloud Gateway相关。Spring Cloud Gateway是一个基于Spring Framework 5、Project Reactor和Spring WebFlux构建的API网关&#xff0c;它为微服务架构提供了一种简单而有效的方式来路由…...

力扣最热一百题——除自身以外数组的乘积

目录 题目链接&#xff1a;238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;左右数组&#xff08;小型动态规划&#xff09; 实现思路 Java写法&#xff1a; 运行时间 C写法&#xff1a; 运行时…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...