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群发邮件实例代码
Jan 03 Python
Python中利用函数装饰器实现备忘功能
Mar 30 Python
基于python实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
Python端口扫描简单程序
Nov 10 Python
python中的计时器timeit的使用方法
Oct 20 Python
Python实现购物车购物小程序
Apr 18 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
浅谈django url请求与数据库连接池的共享问题
Aug 29 Python
Python如何计算语句执行时间
Nov 22 Python
如何从csv文件构建Tensorflow的数据集
Sep 21 Python
python控制台打印log输出重复的解决方法
May 14 Python
python scipy 稀疏矩阵的使用说明
May 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获取汉字首字母并且分组排序详解
2017/10/22 PHP
取得传值的函数
2006/10/27 Javascript
在JavaScript中遭遇级联表达式陷阱
2007/03/08 Javascript
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
浅析return false的正确使用
2013/11/04 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
详解AngularJS 模态对话框
2016/04/07 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
jQuery实现带延时功能的水平多级菜单效果【附demo源码下载】
2016/09/21 Javascript
JS实现页面跳转参数不丢失的方法
2016/11/28 Javascript
JS设计模式之状态模式概念与用法分析
2018/02/05 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
微信小程序跨页面传递data数据方法解析
2019/12/13 Javascript
Vue的Options用法说明
2020/08/14 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
深度定制Python的Flask框架开发环境的一些技巧总结
2016/07/12 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
在脚本中单独使用django的ORM模型详解
2020/04/01 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
三星英国官网:Samsung英国
2018/09/25 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
房屋改造计划书
2014/01/10 职场文书
四年级评语大全
2014/04/21 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL