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

python:使用RESTful API(flask)调用python程序传递参数,实现Web端调用python程序

问题描述

现有一个用python写的程序(或者是一个或几个的函数接口),需要在Web前端调用python写的函数。如果直接用前端java来调用会很不方便,而且会出现各种麻烦的问题,下面给出如何在web前端调用python的接口。

解决方法

使用python的RESTful API库将python写的函数封装为Web端可调用的接口,在web端即可直接调用python的程序。

解决过程

1. 安装RESTful API环境

RESTful API环境其实主要是需要安装flask库,安装方法如下:
使用pip安装:

pip install flask

使用conda 安装:
如何没有创建新的虚拟环境,首先创建虚拟环境:

conda create --name <环境名称> [python=<Python版本>]
# 例如
conda create --name myenv python=3.10

然后激活进入创建的新环境:

conda activate myenv

然后安装flask:

conda install flask

安装途中选择y即可安装好。

2.测试是否安装完成

from flask import Flaskapp = Flask(__name__)@app.route('/')  
def hello_world():return "hello world"if __name__=='__main__':app.run()

如果出现下面的输出,说明flask安装完成,然后复制下面的网站,输入浏览器
在这里插入图片描述
如果浏览器上显示返回的内容,则说明配置成功:
在这里插入图片描述

3. 如何调用带参数的python程序

上面的是一个简单的例子,下面介绍一下如何调用带参数的python程序
代码如下:

from flask import Flask, request, jsonifyapp = Flask(__name__)# 求三个数的乘积,第三个输入参数为数组类型
def multiply(num1,num2,num3):return num1*num2*num3[0]# sum 为端口,methods为方法
@app.route('/sum', methods=['GET'])
def sum_numbers():# 首先获取参数,将参数读进来num1 = float(request.args.get('num1'))num2 = int(request.args.get('num2'))num3 = np.array(eval(request.args.get('num3')))# 将读取到的参数输入函数和所要计算公式中result = num1 + num2 + multiply(num1,num2,num3)# 所要返回的内容,该例子返回的是一个字典类型数据result = {'ID':num1,'sum':result}return jsonify(result)if __name__ == '__main__':app.run()

运行程序后,在浏览器输入:

http://127.0.0.1:5000/sum?num1=10&num2=20&num3=[2,3]

则可以显示返回值
在这里插入图片描述
根据上述步骤即可实现在Web端调用python程序接口。但调用接口的时候需要先运行上述的函数或接口,然后在浏览器中输入相应的url才可调用成功。

注意事项

1. 报错如何解决

出错最多的为404 NOT Found,这个错误一般是因为端口与程序中定义的不一致,自行检查一般可以解决。
还有就是Internal Server Error 500,这个错误说明端口可以正常访问,但是内部的程序或代码语法出现了问题,可以在代码中使用try....except来捕捉错误具体信息:

from flask import Flask, request, jsonifyapp = Flask(__name__)# 求三个数的乘积,第三个输入参数为数组类型
def multiply(num1,num2,num3):return num1*num2*num3[0]# sum 为端口,methods为方法
@app.route('/sum', methods=['GET'])
def sum_numbers():try:# 首先获取参数,将参数读进来num1 = float(request.args.get('num1'))num2 = int(request.args.get('num2'))num3 = np.array(eval(request.args.get('num3')))# 将读取到的参数输入函数和所要计算公式中result = num1 + num2 + multiply(num1,num2,num3)# 所要返回的内容,该例子返回的是一个字典类型数据result = {'ID':num1,'sum':result}return jsonify(result)except Exception as e:traceback.print_exc()return "Internal Server Error: " + str(e), 500if __name__ == '__main__':app.run()

当报错Internal Server Error 500时,可以采用上述方法来查看具体错误。一般会返回类型值类型为非jsonify或string或数字类型,可以在返回值前添加int、float或str来进行转换,即可解决问题。

2. 多个函数调用

如果是多个函数调用,格式如下:

from flask import Flask, request, jsonifyapp = Flask(__name__)
def function1():def function2():def function3():……
if __name__ == '__main__':app.run()

以上就是全部内容,最后贴出一个如何用flask调用简单处理栅格数据的例子,其他操作可以参考:

# test
import numpy as np
import math
from osgeo import gdal
from osgeo import osr
from osgeo import ogr
from shapely.geometry import Point
from shapely.wkt import dumps
from flask import Flask, request, jsonifyapp = Flask(__name__)folder_dem = "C:\\Users\\Administrator\\Desktop\\ycDEM.tif"# read data, nan to 0
def ReadData(filepath):gdal.AllRegister()ds = gdal.Open(filepath)cols = ds.RasterXSizerows = ds.RasterYSizebands = ds.RasterCountgeotrans = ds.GetGeoTransform()proj = ds.GetProjection()data = ds.ReadAsArray()data[data == data[0,0]] = 0return data@app.route('/ReadData1')
def test1():try:a = ReadData(folder_dem)b = np.max(a)point1 = Point(31.3,42.3)wkt1 = dumps(point1)c = {'a': int(b), 'b': int(b), 'c':wkt1}# 返回包含两个字典return jsonify([c,c])except Exception as e:traceback.print_exc()return "Internal Server Error: " + str(e), 500@app.route('/ReadData2')
def test2():try:a = ReadData(folder_dem)b = np.max(a)point1 = Point(3,4)wkt1 = dumps(point1)c = {'a': int(b), 'c':wkt1}return jsonify([c,c])except Exception as e:traceback.print_exc()return "Internal Server Error: " + str(e), 500if __name__ == '__main__':app.run()

更多内容关注公众号: GISerQ

相关文章:

python:使用RESTful API(flask)调用python程序传递参数,实现Web端调用python程序

问题描述 现有一个用python写的程序&#xff08;或者是一个或几个的函数接口&#xff09;&#xff0c;需要在Web前端调用python写的函数。如果直接用前端java来调用会很不方便&#xff0c;而且会出现各种麻烦的问题&#xff0c;下面给出如何在web前端调用python的接口。 解决…...

贪心算法(Greedy Algorithm)

贪心算法&#xff08;Greedy Algorithm&#xff09;是一种解决优化问题的算法策略。在贪心算法中&#xff0c;每一步都会选择当前情况下最优的选择&#xff0c;而不考虑未来的后果。 贪心算法的基本思想是通过局部最优选择达到全局最优。它并不保证一定能得到全局最优解&#…...

论文阅读 - Outlier detection in social networks leveraging community structure

目录 摘要 1. Introduction 2. Related works 3. Preliminaries 3.1. 模块化度量 3.2. Classes of outliers 3.2.1. 点异常 3.2.2. Contextual anomalies 3.2.3. Collective anomalies 3.3. Problem definition 3.4. Outliers score 4. Methodology 4.1. Proposed appr…...

【操作系统】进程控制

进程控制&#xff1a;创建新进程&#xff0c;撤销已有进程&#xff0c;实现进程状态转换等。 原语&#xff1a;进程控制用的程序段。执行期间不允许中断&#xff0c;用&#xff02;关中断&#xff02;和&#xff02;开中断&#xff02;指令&#xff08;特权指令&#xff09;实…...

Linux命令200例:expr一个用于进行数值表达式求值的工具

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌。CSDN专家博主&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0…...

当你的公司突然开始大量的裁员,被留下的你,真的准备好面对以后了吗?

留下来的&#xff0c;也是迷茫的 最近公司突然开始大量裁员&#xff0c;裁了一多半&#xff0c;作为唯一留下的APP 端开发人员&#xff0c;也开始陷入了焦虑&#xff0c;开始了思考&#xff0c;未来究竟何去何从&#xff0c;是否再去转到原生&#xff0c;从事原生的开发工作&a…...

预约陪诊就诊小程序源码多城市开发版

陪诊小程序多城市版开发 小程序支持多城市开通&#xff0c;支持创建陪诊团队以及提成奖励设置&#xff0c;可以定义多种服务类型&#xff0c;订单流程简单明了&#xff0c;支持陪诊师手机端订单处理&#xff0c;家政类目可以轻松过审。 小程序市场前景&#xff1a; 人口老龄化…...

upload-labs文件上传靶场实操

文章目录 1.Pass-012.Pass-023.Pass-034.Pass-045.Pass-056.Pass-067.Pass-078.Pass-089.Pass-0910.Pass-1011.Pass-1112.Pass-1213.Pass-1314.Pass-1415.Pass-1516.Pass-16 1.Pass-01 改后缀名绕过 只能上传图片&#xff0c;先上传一个jpg格式的图片&#xff0c;然后抓包改格…...

leetcode分类刷题:队列(Queue)(二、优先队列解决TopK简单问题)

1、优先队列好像一般都叫堆&#xff0c;以大顶堆为例&#xff0c;顶部第一个元素最大&#xff0c;底部最后一个元素最小&#xff0c;自顶向底是递减的&#xff08;更准确的说是非递增的&#xff09;&#xff0c;对外只能访问顶部第一个元素&#xff08;对应索引为0&#xff09;…...

【排障记录】扩展坞USB 3.0能用而2.0不能用

一、症状表现 日常使用小米的一个扩展坞连接笔记本&#xff0c;平时用来插U盘&#xff0c;没有什么问题&#xff0c;但是今天插了鼠标键盘&#xff0c;发现根本不识别 二、排查过程 目前的连接结构 笔记本C口→type-C延长线→扩展坞A→设备 1.排查笔记本故障 将键盘鼠标插…...

01-从JDK源码级别剖析JVM类加载机制

上一篇&#xff1a;JVM虚拟机调优大全 1. 类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时&#xff0c;首先需要通过类加载器把主类加载到JVM。 public class Math {public static final int initData 666;public static User user new User();public i…...

AI时代:探索机器学习与深度学习的融合之旅

文章目录 1. 机器学习和深度学习简介1.1 机器学习1.2 深度学习 2. 为什么融合是必要的&#xff1f;2.1 数据增强2.2 模型融合 3. 深入分析&#xff1a;案例研究3.1 传统机器学习方法3.2 深度学习方法3.3 融合方法 4. 未来展望结论 &#x1f389;欢迎来到AIGC人工智能专栏~AI时代…...

模块化开发_groupby查询think PHP5.1

要求按照分类的区别打印出不同类别的数据计数 如张三&#xff0c;做了6件事情 这里使用原生查询先测试 SELECT cate_id, COUNT(*) AS order_count FROM tp_article GROUP BY cate_id;成功 然后项目中实现 public function ss(){$sql "SELECT cate_id, COUNT(*) AS orde…...

elementUI时间选择器

<template>//月选择器//:clearable"false" 去掉<div class"monthCard"><el-date-picker:clearable"false"v-model"monthValue"type"month"placeholder"选择月"change"handleChangeMonth($eve…...

第1章_瑞萨MCU零基础入门系列教程之单片机程序的设计模式

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…...

【UE】刀光粒子效果——part2 材质函数部分

效果 步骤 1. 新建一个材质函数&#xff0c;这里命名为“MF_TextureCommon” 2. 新建一个材质&#xff0c;这里命名为“Mat_GuangBan1”&#xff0c;添加如下节点 3. 接下来将该材质的逻辑添加到材质函数上&#xff0c;复制材质“Mat_GuangBan1”中的如下节点&#xff0c;粘贴…...

为什么项目经理的时间观念这么重?

项目经理的时间观念强是因为项目管理涉及到时间、成本和质量的平衡。 项目经理需要按时按质地交付项目&#xff0c;这不仅关乎项目本身的质量和进度&#xff0c;还关乎团队的士气和客户的满意度。 在项目管理过程中&#xff0c;存在大量的时间浪费现象&#xff0c;也可以把它…...

编码转换流

同理&#xff0c;创建f1和f2方法&#xff0c;分别测试OutputStreamWriter和InputStreamReader 也是主要分三步&#xff0c;即1创建流 2使用流 3关流 OutputStreamWriter f1方法 因为要操作流&#xff0c;所以先创建一个try-catch-finally结构&#xff0c;创建流对象Out…...

Pycharm创建项目时如何自动添加头部信息

1.打开PyCharm&#xff0c;选择File--Settings 2.依次选择Editor---Code Style-- File and Code Templates---Python Script 3..添加头部内容 可以根据需要添加相应的信息 #!/usr/bin/python3可用的预定义文件模板变量为&#xff1a;$ {PROJECT_NAME} - 当前项目的名称。$ {NAM…...

DAY48

#ifndef QUEUE_H #define QUEUE_H#include<iostream>using namespace std;#define MAX 10typedef int datatype;template <typename T> class queue {T data[MAX];T front;T tail;public:queue();~queue();queue(const T &other);//创建循环队列T *queue_crea…...

Windows 10/11终极指南:如何快速解决PL2303驱动兼容性问题

Windows 10/11终极指南&#xff1a;如何快速解决PL2303驱动兼容性问题 【免费下载链接】pl2303-win10 Windows 10 driver for end-of-life PL-2303 chipsets. 项目地址: https://gitcode.com/gh_mirrors/pl/pl2303-win10 还在为Windows 10/11系统上的PL2303串口设备无法…...

收藏!普通人零基础转行AI,3-5个月实现高薪就业的进阶指南

本文指出AI行业对非计算机专业人才的需求激增&#xff0c;半路转行者因具备行业经验而更具竞争力。文章澄清了转行AI的常见误区&#xff0c;强调“技术懂业务”是关键&#xff0c;并提供了普通人转行AI的3步走策略&#xff1a;选择AI算法、自然语言或应用工程师等低门槛岗位&am…...

开源协作平台smouj:微内核插件化架构与全栈部署实战

1. 项目概述&#xff1a;一个开源协作平台的诞生与价值 最近在开源社区里&#xff0c;一个名为“smouj/smouj”的项目引起了我的注意。乍一看这个标题&#xff0c;你可能会有点摸不着头脑&#xff0c;这不像我们常见的“vue/vue”或“tensorflow/tensorflow”那样一目了然。但恰…...

为智能硬件项目集成大模型能力利用Taotoken实现低成本高可用的方案

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为智能硬件项目集成大模型能力利用Taotoken实现低成本高可用的方案 在智能家居、物联网等嵌入式硬件项目中引入大模型能力&#xf…...

基于大语言模型的私有化AI健康助手:Open Health Agent设计与实践

1. 项目概述&#xff1a;一个真正属于你的AI健康数据管家 最近几年&#xff0c;我自己的健康数据越来越“散装”了。体重秤的数据在App A里&#xff0c;跑步机的记录在App B里&#xff0c;偶尔在微信上跟朋友吐槽一句“昨晚又没睡好”&#xff0c;这些碎片化的信息就像沙滩上的…...

learn claude code S12 Worktree 任务隔离详解笔记

S12 Worktree 任务隔离详解笔记基于 s12_worktree_task_isolation.py 源码逐行分析&#xff0c;配合 s12-worktree-task-isolation.md 设计思路。一、问题&#xff1a;多个任务共享一个工作目录&#xff0c;互相踩踏 前面 11 章的 agent 都在同一个工作目录下操作。当只有一个 …...

超声引导手术中的‘呼吸’难题:我们如何用体外标记法搞定肝部超声-CT的实时配准?

超声与CT影像实时配准&#xff1a;破解呼吸运动干扰的临床实战方案 在肝癌射频消融或穿刺活检手术中&#xff0c;影像引导的精准度直接决定治疗效果。超声凭借其实时性成为首选引导工具&#xff0c;但图像质量局限常需与高分辨率的CT影像融合。这一过程中&#xff0c;呼吸运动导…...

珠海市高新技术企业资质认定流程及时间

珠海市暂未发布2026年高企申报通知&#xff0c;往年高新技术企业认定工作通常于每年5月至9月分批开展&#xff0c;目前非申报窗口期&#xff0c;建议您提前准备以备下一轮申报。根据往年&#xff08;如2025年&#xff09;的受理安排&#xff0c;申报主要通过线上平台进行&#…...

GitHub企业版MCP服务器:为AI助手集成私有化GitHub工作流

1. 项目概述&#xff1a;一个为开发者定制的GitHub企业版MCP服务器如果你是一名重度依赖GitHub Enterprise进行团队协作的开发者&#xff0c;并且正在探索如何将AI助手&#xff08;比如Claude、Cursor等&#xff09;无缝集成到你的日常开发工作流中&#xff0c;那么你很可能已经…...

资深运维的Helm Chart私藏库:高质量K8s应用部署实战指南

1. 项目概述&#xff1a;一个资深运维的Helm Chart私藏库如果你和我一样&#xff0c;长期在Kubernetes&#xff08;K8s&#xff09;的“牧场”里当“牛仔”&#xff08;Sysop&#xff09;&#xff0c;那你肯定明白&#xff0c;找到一个质量上乘、维护及时、配置合理的Helm Char…...