使用flask搭建web服务,计算机视觉任务落地

前言

        前一篇文章对如何将树莓派配置为一个远程监控进行了回顾,并且在文章中留下了两个问题,此篇文章对应——如何搭建一个中转站,将相关的任务分发下去。

        在搭建服务前,查看了相关的资料,基于python语言开发的后端框架,主要有Django、Flask、Tornado,这三个框架各有特点。Django是一个大而全的web服务框架,其拥有自动化后台管理的功能,使用ORM(对象关系映射),简单定义对象,便能自动生成数据库结构。Flask是一个轻量级的web服务框架,对初学者比较友好,在使用的时候比较核心的就是一个路由思想。Tornado是一个专注于快速响应的web框架,其特点在于使用了非阻塞式服务,这样就可以处理大量请求。

安装

        Flask框架的安装十分简单,在虚拟环境中使用pip就能实现。

使用

        在Flask框架中,我们可以使用一事一函数,并且为每个函数设置路由,这样客户端便可以通过服务端的ip地址加上路由访问到具体的函数。

        信息交互通过json格式的数据实现,客户端将具体的操作以及参数以json格式存放,发送给服务端,服务器使用python中的request库可以对json数据进行解析,并取出需要的字段。服务端需要返回数据的时候,可以通过return jsonfy(字段名: 数据)实现。

问题

        跨域:

                不管是web端还是app端,当客户端与服务端的ip或者端口不一致的时候,就无法正常发送,这就是跨域问题。当遇到这种情况的时候,不需要再客户端解决,在服务器中使用flask-cors库很容易实现。

        请求类型:

                路由后面需要对允许的请求方法进行申明,比较常见的就是post和get。浏览器访问多采用get,相关的参数直接放在url中,存在一定的安全风险。而post则是将参数放在请求体中。

代码

from flask import Flask, url_for, request, jsonify
from utils import send_startPushFlow, send_stopPushFlow
from flask_cors import CORS

app = Flask(__name__)
# 解決跨域問題
CORS(app, resource=r'/*')

@app.route('/testAlarm', methods=['post'])
def handleTestAlarm():
    operation = request.get_json().get("operation")
    if operation == "test alarm":
        if is_alarm:
            # 在app端接受到该消息的时候,调用手机铃声或者震动
            # 向前端主进程发送
            return jsonify(msg="start alarm")
        else:
            return jsonify(msg="")
    else:
        return jsonify(msg="请执行正确操作")
if __name__ == '__main__':
    app.run()

        上面代码展示的是,app端会定时向服务端发送是否需要报警的请求,服务器端根据is_alarm返回响应的json数据,app端也会根据返回的信息判断是否让手机发出铃声。

        因为是一个完整的项目,目前还在进行中,深度学习部分的细节还不能公开,后续相关的项目可能会开源。如果有想做前后分离并且与硬件结合的项目的朋友可以留言,一起交流。

猜你喜欢

转载自blog.csdn.net/2201_75875170/article/details/132901605