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爬虫抓取手机APP的传输数据
Jan 22 Python
详解appium+python 启动一个app步骤
Dec 20 Python
Python实现的求解最小公倍数算法示例
May 03 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
详解python:time模块用法
Mar 25 Python
用Python批量把文件复制到另一个文件夹的实现方法
Aug 16 Python
Python 静态方法和类方法实例分析
Nov 21 Python
pytorch中tensor张量数据类型的转化方式
Dec 31 Python
Python3操作MongoDB增册改查等方法详解
Feb 10 Python
Python 创建TCP服务器的方法
Jul 28 Python
Python实现自动整理文件的脚本
Dec 17 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 5.3.5安装memcache注意事项小结
2011/04/12 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
深入理解PHP内核(二)之SAPI探究
2015/11/10 PHP
PHP运行模式汇总
2016/11/06 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
Javascript 跨域访问解决方案
2009/02/14 Javascript
IE6 弹出Iframe层中的文本框“经常”无法获得输入焦点
2009/12/27 Javascript
jquery中获取元素的几种方式小结
2011/07/05 Javascript
js读取被点击次数的简单实例(从数据库中读取)
2014/03/07 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
详解JavaScript实现设计模式中的适配器模式的方法
2016/05/18 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
微信小程序 ES6Promise.all批量上传文件实现代码
2017/04/14 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
Javascript实现base64的加密解密方法示例
2017/06/27 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
javascript实现智能手环时间显示
2020/09/18 Javascript
使用Python进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
2014/04/25 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
手动安装python3.6的操作过程详解
2020/01/13 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
.NET remoting中对象激活的两种方式
2015/06/08 面试题
药剂专业求职信
2014/06/20 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书
小学信息技术教学反思
2016/02/16 职场文书