前言
用户将视频上传后,需要对视频做一些处理,那么Python这样的工具当然是节省时间完成开发任务的首选(其实是其他的语言我不太会~)。那么,既然工具用Python来完成了,那么这个让脚本运行的接口也用Python来写一个吧。
flask 轻量web框架使用
web框架也有很多,选取了flask的主要原因是需求只要调用python脚本,无需对数据库操作,其他原因此处不再赘述。
环境:win10,Python 3.6
1 flask的安装
pip install flask
2 实现接口监听
import os
import flask, json
from flask import request
import logging
'''
flask: web框架,通过flask提供的装饰器@server.route()将普通函数转换为服务
'''
# 创建一个服务,把当前这个python文件当做一个服务
server = flask.Flask(__name__)
# server.config['JSON_AS_ASCII'] = False
# @server.route()可以将普通函数转变为服务 登录接口的路径、请求方式
@server.route('/dealWYVideo', methods=['get', 'post'])
def dealWYVideo():
# 获取通过url请求传参的数据
videoPath = request.values.get('url')
if os.path.exists(videoPath):
logging.info("put video:",videoPath)
res = {'code': 200, 'message': '视频处理接入成功'}
file_handle = open('video.txt', mode='a')
# 在txt中写入刚上传的视频的路径
file_handle.write(videoPath + '\n')
file_handle.close()
return json.dumps(res, ensure_ascii=False)
else:
logging.warning("no exit:",videoPath)
res = {'code': 400, 'message': '视频处理接入失败'}
return json.dumps(res, ensure_ascii=False)
def runServe():
server.run(debug=True, port=8091, host='localhost') # 指定端口、host,0.0.0.0代表不管几个网卡,任何ip都可以访问
if __name__ == '__main__':
runServe()
3 跨域问题
在前端调用上述接口,发现报错了,仔细一看,跨域问题:
No 'Access-Control-Allow-Origin' header is present on the requested
那么怎么解决呢?使用 flask_cors 这个库解决。就一句话@cross_origin()就解决了。
# 安装
1. pip install flask_cors
# 引入模块
2. from flask_cors import cross_origin
#使用
3. @cross_origin()
最终实现代码
import os
import flask, json
from flask import request
from flask_cors import cross_origin
import logging
'''
flask: web框架,通过flask提供的装饰器@server.route()将普通函数转换为服务
'''
# 创建一个服务,把当前这个python文件当做一个服务
server = flask.Flask(__name__)
# server.config['JSON_AS_ASCII'] = False
# @server.route()可以将普通函数转变为服务 登录接口的路径、请求方式
@server.route('/dealWYVideo', methods=['get', 'post'])
@cross_origin()
def dealWYVideo():
# 获取通过url请求传参的数据
videoPath = request.values.get('url')
if os.path.exists(videoPath):
logging.info("put video:",videoPath)
res = {'code': 200, 'message': '视频处理接入成功'}
file_handle = open('video.txt', mode='a')
# 在txt中写入刚上传的视频的路径
file_handle.write(videoPath + '\n')
file_handle.close()
return json.dumps(res, ensure_ascii=False)
else:
logging.warning("no exit:",videoPath)
res = {'code': 400, 'message': '视频处理接入失败'}
return json.dumps(res, ensure_ascii=False)
def runServe():
server.run(debug=True, port=8091, host='localhost') # 指定端口、host,0.0.0.0代表不管几个网卡,任何ip都可以访问
if __name__ == '__main__':
runServe()