python+flask实现API的方法

yipeiwu_com6年前Python基础

本文为大家分享了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/,即可看到一个网页:

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调用win命令行提高工作效率的实例

用Python调用win命令行提高工作效率的实例

作为程序猿,每天一上班打开电脑要做的时候就是打开各种工作所需的工具,如QQ,SQL Server,浏览器,编辑器等,每天都要一个个点,重复性的工作做多了也觉得烦(关键是影响了我上班倒水的...

Python快速转换numpy数组中Nan和Inf的方法实例说明

在使用numpy数组的过程中时常会出现nan或者inf的元素,可能会造成数值计算时的一些错误。这里提供一个numpy库函数的用法,使nan和inf能够最简单地转换成相应的数值。 num...

Django+uni-app实现数据通信中的请求跨域的示例代码

Django+uni-app实现数据通信中的请求跨域的示例代码

前后端分离的模式下,后端使用Django RestFramework,前端使用uni-app来进行APP的开发。 前端代码: Django后端跨域配置 settings.py配...

python 对多个csv文件分别进行处理的方法

如下所示: import glob import time import csv csvx_list = glob.glob('*.csv') #打开文件夹下全部的CSV文件 pr...

python实现中文分词FMM算法实例

本文实例讲述了python实现中文分词FMM算法。分享给大家供大家参考。具体分析如下: FMM算法的最简单思想是使用贪心算法向前找n个,如果这n个组成的词在词典中出现,就ok,如果没有出...