python+flask实现API的方法


Posted in Python onNovember 21, 2018

本文为大家分享了python+flask实现API的具体方法,供大家参考,具体内容如下

Flask 框架

#-*-coding:utf-8-*-
 
#pip install flask
#pip install flask-restful
 
from flask import Flask
 
app = Flask(__name__)
 
@app.route('/')
def index():
  return "hello world!"
 
if __name__ == '__main__':
  app.run(debug=True)

pycharm运行该程序后,在浏览器输入http://127.0.0.1:5000/,即可看到一个网页:

python+flask实现API的方法

Flask + flask_restful创建一个简单的应用程序:

from flask import Flask
from flask_restful import Resource,Api
 
app = Flask(__name__)
api = Api(app)
class HelloWorld(Resource):
  def get(self):
    return {"hello":"world"}
 
api.add_resource(HelloWorld,'/')
 
if __name__ == '__main__':
  app.run(debug=True)

python+flask创建API: 获取post请求传递的json数据

from flask import Flask,abort,jsonify,make_response,request
 
app = Flask(__name__)
 
@app.route('/analyze/' ,methods=['POST'])
def call_wiscan_analyze():
  if not request.json or not 'path' in request.json:
     abort(400)
  path = request.json['path']
 
 
if __name__ == '__main__':
  app.run(port='50055',debug=True)

请求:

from requests import post
 
if __name__ == '__main__':
  path='"F:/nb_org_data/86574FG01/2013/1029/0008/86574FG01201310290008.img"'
  ret = post('http://localhost:50055/analyze/',json={'path':path})
  print(ret.text)

将API封装为win32服务

import win32serviceutil
import win32service
import win32event
import win32timezone
from flask import Flask,abort,jsonify,make_response,request
import threading
 
app = Flask(__name__)
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
 
@app.route('/analyze/' ,methods=['POST'])
def call_wiscan_analyze():
  if not request.json or not 'path' in request.json:
     abort(400)
  path = request.json['path']
 
def thread_target():
  app.run(port='50055', debug=True)
 
class GRPCWin32Client(win32serviceutil.ServiceFramework):
  _svc_name_ = 'GRPCWin32Client'
  _svc_display_name_ = 'Nuctech GRPC Client'
  _svc_description_ = 'wiscan grpc client'
 
  def __init__(self, args):
    win32serviceutil.ServiceFramework.__init__(self, args)
    self.hWaitStop = win32event.CreateEvent(None, 0, 0, None)
    #self.logger = self._getLogger()
    self.run = True
 
  def SvcDoRun(self):
    th = threading.Thread(target=thread_target)
    th.start()
    try:
      while self.run:
        time.sleep(_ONE_DAY_IN_SECONDS)
 
    except KeyboardInterrupt:
      pass
 
    pass
 
  def SvcStop(self):
    self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    win32event.SetEvent(self.hWaitStop)
    self.run = False
 
if __name__ == '__main__':
  import sys
  import servicemanager
  if len(sys.argv) == 1:
    try:
      evtsrc_dll = os.path.abspath(servicemanager.__file__)
      servicemanager.PrepareToHostSingle(GRPCWin32Client)
      servicemanager.Initialize('GRPCWin32Client', evtsrc_dll)
      servicemanager.StartServiceCtrlDispatcher()
    except win32service.error as details:
      import winerror
      if details == winerror.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT:
        win32serviceutil.usage()
  else:
    win32serviceutil.HandleCommandLine(GRPCWin32Client)

注意:

启动一个线程运行app.run(),否则安装完win32服务,启动服务后,无法停止服务,因为app内部循环没有结束!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中使用成员运算符的示例
May 13 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
使用Python搭建虚拟环境的配置方法
Feb 28 Python
django manage.py扩展自定义命令方法
May 27 Python
Python异常处理知识点总结
Feb 18 Python
python之信息加密题目详解
Jun 26 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
jupyter notebook实现显示行号
Apr 13 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 Python
python实现事件驱动
Nov 21 #Python
python事件驱动event实现详解
Nov 21 #Python
python程序封装为win32服务的方法
Mar 07 #Python
pygame游戏之旅 添加icon和bgm音效的方法
Nov 21 #Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 #Python
使用50行Python代码从零开始实现一个AI平衡小游戏
Nov 21 #Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 #Python
You might like
PHP中浮点数计算比较及取整不准确的解决方法
2015/01/09 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
详解Nodejs之npm&package.json
2017/06/15 NodeJs
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
在layui中select更改后生效的方法
2019/09/05 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
Python中threading模块join函数用法实例分析
2015/06/04 Python
python字典基本操作实例分析
2015/07/11 Python
Python 类与元类的深度挖掘 I【经验】
2016/05/06 Python
python中的计时器timeit的使用方法
2017/10/20 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
python地震数据可视化详解
2019/06/18 Python
python中dict使用方法详解
2019/07/17 Python
基于Python实现扑克牌面试题
2019/12/11 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Python实现点云投影到平面显示
2020/01/18 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
详解如何修改python中字典的键和值
2020/09/29 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
Python3+Flask安装使用教程详解
2021/02/16 Python
HTML5 UTF-8 中文乱码的解决方法
2013/11/18 HTML / CSS
params有什么用
2016/03/01 面试题
小学师德标兵先进事迹材料
2014/05/25 职场文书
员工工作表扬信
2015/05/05 职场文书
纯CSS3实现div按照顺序出入效果
2021/07/15 HTML / CSS
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js