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写的程序(或者是一个或几个的函数接口),需要在Web前端调用python写的函数。如果直接用前端java来调用会很不方便,而且会出现各种麻烦的问题,下面给出如何在web前端调用python的接口。 解决…...
贪心算法(Greedy Algorithm)
贪心算法(Greedy Algorithm)是一种解决优化问题的算法策略。在贪心算法中,每一步都会选择当前情况下最优的选择,而不考虑未来的后果。 贪心算法的基本思想是通过局部最优选择达到全局最优。它并不保证一定能得到全局最优解&#…...
论文阅读 - 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…...
【操作系统】进程控制
进程控制:创建新进程,撤销已有进程,实现进程状态转换等。 原语:进程控制用的程序段。执行期间不允许中断,用"关中断"和"开中断"指令(特权指令)实…...
Linux命令200例:expr一个用于进行数值表达式求值的工具
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师࿰…...
当你的公司突然开始大量的裁员,被留下的你,真的准备好面对以后了吗?
留下来的,也是迷茫的 最近公司突然开始大量裁员,裁了一多半,作为唯一留下的APP 端开发人员,也开始陷入了焦虑,开始了思考,未来究竟何去何从,是否再去转到原生,从事原生的开发工作&a…...
预约陪诊就诊小程序源码多城市开发版
陪诊小程序多城市版开发 小程序支持多城市开通,支持创建陪诊团队以及提成奖励设置,可以定义多种服务类型,订单流程简单明了,支持陪诊师手机端订单处理,家政类目可以轻松过审。 小程序市场前景: 人口老龄化…...
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 改后缀名绕过 只能上传图片,先上传一个jpg格式的图片,然后抓包改格…...
leetcode分类刷题:队列(Queue)(二、优先队列解决TopK简单问题)
1、优先队列好像一般都叫堆,以大顶堆为例,顶部第一个元素最大,底部最后一个元素最小,自顶向底是递减的(更准确的说是非递增的),对外只能访问顶部第一个元素(对应索引为0)…...
【排障记录】扩展坞USB 3.0能用而2.0不能用
一、症状表现 日常使用小米的一个扩展坞连接笔记本,平时用来插U盘,没有什么问题,但是今天插了鼠标键盘,发现根本不识别 二、排查过程 目前的连接结构 笔记本C口→type-C延长线→扩展坞A→设备 1.排查笔记本故障 将键盘鼠标插…...
01-从JDK源码级别剖析JVM类加载机制
上一篇:JVM虚拟机调优大全 1. 类加载运行全过程 当我们用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到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. 为什么融合是必要的?2.1 数据增强2.2 模型融合 3. 深入分析:案例研究3.1 传统机器学习方法3.2 深度学习方法3.3 融合方法 4. 未来展望结论 🎉欢迎来到AIGC人工智能专栏~AI时代…...
模块化开发_groupby查询think PHP5.1
要求按照分类的区别打印出不同类别的数据计数 如张三,做了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开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...
【UE】刀光粒子效果——part2 材质函数部分
效果 步骤 1. 新建一个材质函数,这里命名为“MF_TextureCommon” 2. 新建一个材质,这里命名为“Mat_GuangBan1”,添加如下节点 3. 接下来将该材质的逻辑添加到材质函数上,复制材质“Mat_GuangBan1”中的如下节点,粘贴…...
为什么项目经理的时间观念这么重?
项目经理的时间观念强是因为项目管理涉及到时间、成本和质量的平衡。 项目经理需要按时按质地交付项目,这不仅关乎项目本身的质量和进度,还关乎团队的士气和客户的满意度。 在项目管理过程中,存在大量的时间浪费现象,也可以把它…...
编码转换流
同理,创建f1和f2方法,分别测试OutputStreamWriter和InputStreamReader 也是主要分三步,即1创建流 2使用流 3关流 OutputStreamWriter f1方法 因为要操作流,所以先创建一个try-catch-finally结构,创建流对象Out…...
Pycharm创建项目时如何自动添加头部信息
1.打开PyCharm,选择File--Settings 2.依次选择Editor---Code Style-- File and Code Templates---Python Script 3..添加头部内容 可以根据需要添加相应的信息 #!/usr/bin/python3可用的预定义文件模板变量为:$ {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…...
人工智能毕业设计2026方向集合
0 选题推荐 - 人工智能篇 毕业设计是大家学习生涯的最重要的里程碑,它不仅是对四年所学知识的综合运用,更是展示个人技术能力和创新思维的重要过程。选择一个合适的毕业设计题目至关重要,它应该既能体现你的专业能力,又能满足实际…...
光纤布拉格光栅(FBG)笔记【2】:传感机制与布拉格波长调谐分析
1. 光纤布拉格光栅的传感机制揭秘 第一次接触光纤布拉格光栅(FBG)传感时,我完全被它"以光测万物"的能力震撼了。这根比头发还细的光纤,竟然能精准感知温度、应变等物理量的变化。经过多次实验验证,我发现它的核心秘密就藏在布拉格波…...
别再让AI失忆了!手把手教你用Mem0为ChatGPT添加长期记忆(附Next.js实战代码)
为Next.js聊天应用注入长期记忆:Mem0集成实战指南 当你的AI助手开始记住用户的咖啡偏好和生日祝福时,整个交互体验会发生质的变化。本文将带你从零开始,在Next.js应用中实现这种"记忆魔法"。 1. 环境准备与Mem0初始化 首先创建一个…...
YOLOv11分割模型实战:用C++和ONNXRuntime解析‘output0’和‘output1’双输出,实现像素级颜色分析
YOLOv11分割模型实战:C与ONNXRuntime双输出解析与像素级颜色分析 在计算机视觉领域,目标检测与实例分割技术的结合正成为工业应用的新标准。YOLOv11作为YOLO系列的最新成员,不仅延续了其高效检测的特性,更通过双输出结构实现了精准…...
acjscsdbhvusfd
一、yolo v1是什么? YOLO(You Only Look Once)算法 是一种目标检测算法,是经典的one-stage方法。YOLO v1 开创了单阶段目标检测的先河,其简洁的架构 和高效的推理为后续版本奠定了基础。尽管存在小目标检测和定位精度的…...
5分钟搞定PaddleOCR文字识别:Python版保姆级教程(附完整代码)
5分钟极速上手PaddleOCR:Python实战指南与避坑手册 第一次接触OCR技术时,我被那些复杂的配置参数和晦涩的文档吓退了三次。直到发现PaddleOCR这个"开箱即用"的工具,才明白原来文字识别可以如此简单。本文将带你用最直接的方式&…...
知识管理新范式:跨平台无缝迁移与团队协作效能提升指南
知识管理新范式:跨平台无缝迁移与团队协作效能提升指南 【免费下载链接】outline Outline 是一个基于 React 和 Node.js 打造的快速、协作式团队知识库。它可以让团队方便地存储和管理知识信息。你可以直接使用其托管版本,也可以自己运行或参与开发。源项…...
亚洲美女-造相Z-Turbo惊艳案例分享:高还原度旗袍/汉服/都市职场风人像生成
亚洲美女-造相Z-Turbo惊艳案例分享:高还原度旗袍/汉服/都市职场风人像生成 最近在玩一个挺有意思的AI模型,叫“亚洲美女-造相Z-Turbo”。这名字听起来有点技术范儿,但说白了,它就是个专门生成亚洲女性人像的AI工具。 你可能用过…...
Java后端开发——真实面试汇总(持续更新)
一.浙江大学研究院一面(面试Time:1小时30分钟)1. 面试官自我介绍,同时我开始自我介绍2. 平时接触到哪些数据结构?3. ArrayList和LinkedList的主要区别是什么?4. 数组和链表的主要区别是什么?5.…...
破解MSG文件解析难题:自动化处理工具让邮件数据提取效率提升90%
破解MSG文件解析难题:自动化处理工具让邮件数据提取效率提升90% 【免费下载链接】msg-extractor Extracts emails and attachments saved in Microsoft Outlooks .msg files 项目地址: https://gitcode.com/gh_mirrors/ms/msg-extractor 在日常办公中&#x…...
