#!/usr/bin/env python
# coding=utf-8
from cytopticcloud import create_app
from flask import request
from urllib.parse import urlparse
import logging
def handler(environ, start_response):
"""
HTTP触发函数入口,会通过调用的函数名称自动导入不同的Blueprint。
"""
global logger
logger = logging.getLogger()
# 解析路径和函数名称
parsed_tuple = urlparse(environ['fc.request_uri'])
logger.info("访问路径: {}".format(environ['fc.request_uri']))
li = parsed_tuple.path.split('/')
i = 1
while True:
if li[i].startswith('20') or li[i] == 'proxy':
i += 1
else:
break
service_name = li[i]
function_name = li[i+1]
logger.info("服务名称 {}".format(service_name))
logger.info("函数名称 {}".format(function_name))
base_path = "/".join(li[0:i+1])
logger.info(base_path)
# 通过解析的函数名称导入Blueprint,创建Flask程序。
app = create_app(base_path, function_name)
return app(environ, start_response)
# -*- coding: utf-8 -*-
from flask import Flask
from flask_cors import CORS
def create_app(base_path=None, function_name=None):
"""
创建Flask程序
"""
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
app.logger.info("导入Blueprint: {}/{}".format(base_path, function_name))
if function_name == 'basic':
from . import basic
app.register_blueprint(
basic.bp, url_prefix=base_path + basic.bp.url_prefix)
else:
from . import basic
app.register_blueprint(basic.bp, url_prefix=basic.bp.url_prefix)
# 上FC时需要注释CORS,否则无法跨域访问
CORS(app, supports_credentials=True)
return app
# -*- coding: utf-8 -*-
from flask import Flask
from flask import Blueprint
from flask import jsonify
from flask import request
import datetime
import time
import pytz
import json
import logging
import sys
# basic Blueprint
bp = Blueprint('basic', __name__, url_prefix='/basic')
@bp.route('/', methods=['GET', 'POST'])
def home():
"""
主页,给出时间版本信息等,用于确定服务状态。
"""
tz = pytz.timezone('Asia/Shanghai')
now = datetime.datetime.now(tz)
return jsonify(
status = 'ok',
message = '正常',
version = '1.0.0')
本地debug可以
set FLASK_APP=main.py
set FLASK_ENV=development
flask run