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的框架中为MySQL实现restful接口的教程
Apr 08 Python
解决Python传递中文参数的问题
Aug 04 Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 Python
Python 操作MySQL详解及实例
Apr 30 Python
Numpy中转置transpose、T和swapaxes的实例讲解
Apr 17 Python
python组合无重复三位数的实例
Nov 13 Python
wxPython+Matplotlib绘制折线图表
Nov 19 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
Python解释器以及PyCharm的安装教程图文详解
Feb 26 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
python模块内置属性概念及实例
Feb 18 Python
详解python的xlwings库读写excel操作总结
Feb 26 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和ACCESS写聊天室(十)
2006/10/09 PHP
一组PHP加密解密函数分享
2014/06/05 PHP
php使用session二维数组实例
2014/11/06 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
让Firefox支持event对象实现代码
2009/11/07 Javascript
event.srcElement 用法笔记e.target
2009/12/18 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
jQuery实现仿百度帖吧头部固定导航效果
2015/08/07 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
2015/10/09 Javascript
jQuery实现商品活动倒计时
2015/10/16 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
微信小程序实现多行文字滚动
2020/11/18 Javascript
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
Python原始字符串(raw strings)用法实例
2014/10/13 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
拓展培训心得体会
2014/01/04 职场文书
社会实践活动总结报告
2014/04/29 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
2015高中教师个人工作总结
2015/07/21 职场文书
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL
Java处理延时任务的常用几种解决方案
2022/06/01 Java/Android