HiveNetSimpleFlask.server module¶
Simple Flask的服务模块
- class HiveNetSimpleFlask.server.FlaskServer(app_name: str, server_config: dict = {}, support_auths: dict = {}, before_server_start=None, after_server_start=None, before_server_stop=None, after_server_stop=None, logger=None, log_level: int = 20, load_i18n_para=None, **kwargs)[源代码]¶
基类:
HiveNetWebUtils.server.ServerBaseFWFlask服务
- __init__(app_name: str, server_config: dict = {}, support_auths: dict = {}, before_server_start=None, after_server_start=None, before_server_stop=None, after_server_stop=None, logger=None, log_level: int = 20, load_i18n_para=None, **kwargs)[源代码]¶
构造函数
- 参数
app_name (str) – 服务器名称
server_config (dict) –
default={}, 服务配置字典
app_config {dict} - Flask初始化参数字典(请参考官方Flask文档), 常用参数包括:
root_path {str} - Flask应用的资源根目录, 默认会获取所执行应用的根目录, 可以手工指定
static_folder {str} - 静态资源目录, 为 root_path 的相对路径, 默认为’static’
注: 如果指定绝对路径则会与 root_path 路径无关
static_url_path {str} - 静态资源的访问url前缀, 行为表现如下:
未传值的情况:
如果static_folder未被指定, 那么static_url_path取为static, 也就是通过’/static/index.html’访问静态资源
如果static_folder被指定了, 那么static_url_path等于static_folder的最后一级文件夹名称, 也就是通过’/最后一级文件夹/index.html’访问静态资源
有传值的情况:
static_url_path=’’, 代表直接通过根路径’/’访问静态资源, 也就是通过’/index.html’访问静态资源
static_url_path=’path/path2’ 或 ‘/path/path2’, 将通过’/path/path2/index.html’访问静态资源
static_url_path=’/path/’, 路径前面不带’/’的情况, 将通过’/path/index.html’访问静态资源
cors_config {dict} - flask_cors的配置参数字典, 例如:
supports_credentials {bool} - 是否支持跨域
flask_run {dict} - FlaskServer运行参数字典(请参考官方Flask文档), 常用参数包括:
host {str} - 绑定的主机地址, 可以为 ‘127.0.0.1’ 或不传
port {int} - 监听端口, 默认为 5000
threaded {bool} - 是否启动多线程, 默认为 True
processes {int} - 进程数, 默认为 1, 如果设置进程数大于1, 必须将threaded设置为False
ssl_context {str|tuple} - 使用https, 有两种使用方式
ssl_context=’adhoc’: 使用 pyOpenSSL 自带证书, 注意需进行安装 ‘pip install pyOpenSSL’
ssl_context=(‘/certificates/server.crt’, ‘/certificates/server.key’): 使用指定路径的证书文件
示例: ssl_context=(‘/certificates/server-cert.pem’, ‘/certificates/server-key.pem’)
debug {bool} - 是否debug模式, 默认False
send_file_max_age_default {int} - 单位为秒, 发送文件功能最大的缓存超时时间, 默认为12小时, 如果要调试静态文件, 可以设置为1
templates_auto_reload {bool} - 是否自动重新加载模版, 默认为False, 如果要调试模版, 可以设置为True
json_as_ascii {bool} - josn字符串是否采取ascii模式, 默认为True, 如果需要json显示中文需传入False
max_upload_size {float} - 上传文件的最大大小, 单位为MB
use_wsgi {bool} - 是否使用WSGIServer, 默认为False
注意: 如果使用wsgi, 处理函数内部请勿使用time.sleep, 否则会造成堵塞, 请统一调整为使用gevent.sleep
support_auths (dict) –
default={}, 服务器支持的验证对象字典, key为验证对象类型名(可以为类名), value为验证对象实例对象
注意: 支持的auth对象必须有auth_required这个修饰符函数
before_server_start (function) – default=None, 服务器启动前执行的函数对象, 传入服务自身(self)
after_server_start (function) – default=None, 服务器启动后执行的函数对象, 传入服务自身(self)
before_server_stop (function) – default=None, 服务器关闭前执行的函数对象, 传入服务自身(self)
after_server_stop (function) – default=None, 服务器关闭后执行的函数对象, 传入服务自身(self)
logger (Logger) – default=None, 自定义应用逻辑使用的日志对象
log_level (int) – default=logging.INFO, 一般信息的记录使用的日志级别
load_i18n_para (dict) –
default=None, 要装载的i18n语言文件配置
path {str} - 要加载的i18n字典文件路径, 如果填空代表程序运行的当前路径
prefix {str} - 要加载的i18n字典文件前缀
encoding {str} - 要加载的i18n字典文件的字符编码, 默认为’utf-8’
实现类自定义扩展参数 (-) –
- add_service(service_uri: str, handler: Callable, name: Optional[str] = None, with_para: bool = False, methods: Optional[list] = None, **kwargs) HiveNetCore.generic.CResult[源代码]¶
添加请求处理服务
- 参数
service_uri (str) – 服务唯一标识, 例如’/demo’
handler (Callable) –
请求处理函数, 应可同时支持同步或异步函数
func(*args) -> flask.wrappers.Response
非uri路由的请求参数可通过flask.request对象获取
*args定义适配flask路由uri配置的<xxx>形式的路由参数(例如/xx/<arg1>/<arg2>), 注意只支持固定位置参数, 不支持kwargs
返回值可以支持两种形式:
1、Response对象, 如果返回为str对象, 将自动通过Response(‘str’)转换为该对象; 如果是其他对象, 可以通过flask.jsonify转换
2、返回三元组(data: str|Response, status_code: int, headers: dict), 例如(“”, 200, {“ContentType”:”application/json”})
name (str) – default=None, 路由标识, 如果不传默认使用函数名(会存在函数名相同导致异常的情况)
with_para (bool) – default=False, 路由是否根据函数添加入参
methods (list) – default=None, 指定路由支持的方法, 如果不传且with_para为True时, 将获取路由函数本身带的’methods’参数定义
实现类的自定义扩展参数 (-) –
- 返回
添加服务结果, result.code: ‘00000’-成功, ‘21405’-服务名已存在, 其他-异常
- 返回类型
- add_service_by_class(class_objs: list, blacklist: Optional[list] = None, class_name_mapping: Optional[dict] = None, url_base: str = 'api', ver_is_new: bool = True) HiveNetCore.generic.CResult[源代码]¶
通过类对象动态增加服务
- 参数
class_objs (list) – Api类对象清单(可以支持传入类对象, 也可以支持传入类实例)
blacklist (list) – default=None, 禁止添加的服务黑名单, 格式为”类名/函数名”
class_name_mapping (dict) – default=None, 类名映射, 可以根据这个改变访问url的路径, key为真实类名, value为映射后的类名
url_base (str) – default=’api’, 路由开始的基础url
ver_is_new (bool) – default=True, 导入版本为最新, 如果为True, 代表有版本号的情况下也会创建一个非版本访问的路由
- property native_app: flask.app.Flask¶
获取原生app对象 @property {Flask}
- remove_service(service_uri: str, **kwargs) HiveNetCore.generic.CResult[源代码]¶
移除请求处理服务
- 参数
service_uri (str) – 服务唯一标识, 例如服务名或url路由
实现类的自定义扩展参数 (-) –
- 返回
删除服务结果, result.code: ‘00000’-成功, ‘1404’-不支持的命令, 其他-异常
- 返回类型
- start(is_asyn: bool = False, sleep_time: float = 0.5, **kwargs) HiveNetCore.generic.CResult[源代码]¶
启动服务
(可以为同步或异步函数)
- 参数
is_asyn (bool) – default=False, 是否异步处理, 如果是则直接返回, 同步则阻塞处理直到服务停止
sleep_time (float) – default=0.5, 同步处理的每次循环检测状态的睡眠时间, 单位为秒
实现类自定义的扩展参数 (-) –
- 返回
异步情况返回启动结果, result.code: ‘00000’-成功, ‘21401’-服务不属于停止状态, 其他-异常
- 返回类型
- stop(overtime: float = 0, sleep_time: int = 0.5, **kwargs) HiveNetCore.generic.CResult[源代码]¶
停止服务运行
(可以为同步或异步函数)
- 参数
overtime (float) – default=0, 等待超时时间, 单位为秒, 0代表一直不超时
sleep_time (float) – default=0.5, 每次等待睡眠时间, 单位为秒
实现类自定义的扩展参数 (-) –
- 返回
停止结果, result.code: ‘00000’-成功, ‘21402’-服务停止失败-服务已关闭,
’31005’-执行超时, 29999’-其他系统失败
- 返回类型
- class HiveNetSimpleFlask.server.FlaskTool[源代码]¶
基类:
objectFlash工具类
- classmethod add_route(app: flask.app.Flask, url: str, func, name: Optional[str] = None, with_para: bool = False, methods: Optional[list] = None)[源代码]¶
添加指定路由
- 参数
app (Flask) – 要添加路由的服务器
url (str) – 路由url, 例如’/test’
func (function) – 要添加路由的函数
name (str) –
default=None, 路由标识, 如果不传默认使用函数名(会存在函数名相同导致异常的情况)
注: 该参数是flask路由的endpoint参数
with_para (bool) – default=False, 路由是否根据函数添加入参
methods (list) – default=None, 指定路由支持的方法, 如果不传且with_para为True时, 将获取路由函数本身带的’methods’参数定义
- classmethod add_route_by_class(app: flask.app.Flask, class_objs: list, blacklist: Optional[list] = None, class_name_mapping: Optional[dict] = None, url_base: str = 'api', ver_is_new: bool = True)[源代码]¶
通过类对象动态增加路由
- 参数
app (Flask) – 要增加服务的Flask应用
class_objs (list) – Api类对象清单(可以支持传入类对象, 也可以支持传入类实例)
blacklist (list) – default=None, 禁止添加的服务黑名单, 格式为”类名/函数名”
class_name_mapping (dict) – default=None, 类名映射, 可以根据这个改变访问url的路径, key为真实类名, value为映射后的类名
url_base (str) – default=’api’, 路由开始的基础url
ver_is_new (bool) – default=True, 导入版本为最新, 如果为True, 代表有版本号的情况下也会创建一个非版本访问的路由
- classmethod support_object_resp(func)[源代码]¶
支持函数直接返回Python对象的修饰符
- 注: 正常函数应该返回标准的flask.wrappers.Response对象, 本修饰符允许按以下方式返回
1、返回flask.wrappers.Response对象 2、返回三元数组, 其中第1个为要返回的内容对象, 第2个为状态码, 第3个是header字典 3、直接返回要处理的对象, 状态码默认为200(注意不可直接将数组对象返回)
- 参数
func (function) – 修饰符处理的函数
示例
Restful函数返回非字符串格式内容
@FlaskTool.support_object_resp
def func(a, b):
…
return {‘a’:’value’}
- class HiveNetSimpleFlask.server.FlaskWithLogger(import_name: str, static_url_path: Optional[str] = None, static_folder: Optional[Union[str, os.PathLike]] = 'static', static_host: Optional[str] = None, host_matching: bool = False, subdomain_matching: bool = False, template_folder: Optional[Union[str, os.PathLike]] = 'templates', instance_path: Optional[str] = None, instance_relative_config: bool = False, root_path: Optional[str] = None)[源代码]¶
基类:
flask.app.Flask自定义Flask的logger设置
- property logger[源代码]¶
A standard Python
Loggerfor the app, with the same name asname.In debug mode, the logger’s
levelwill be set toDEBUG.If there are no handlers configured, a default handler will be added. See /logging for more information.
在 1.1.0 版更改: The logger takes the same name as
namerather than hard-coding"flask.app".在 1.0.0 版更改: Behavior was simplified. The logger is always named
"flask.app". The level is only set during configuration, it doesn’t checkapp.debugeach time. Only one format is used, not different ones depending onapp.debug. No handlers are removed, and a handler is only added if no handlers are already configured.0.3 新版功能.
- class HiveNetSimpleFlask.server.SocketIOServer(app_name: str, server_config: dict = {}, support_auths: dict = {}, before_server_start=None, after_server_start=None, before_server_stop=None, after_server_stop=None, logger=None, log_level: int = 20, load_i18n_para=None, **kwargs)[源代码]¶
基类:
HiveNetSimpleFlask.server.FlaskServerSocketIO服务器
注:直接继承自 FlaskServer 注意: web请使用socket.io.js的3.x版本进行对接: https://cdnjs.cloudflare.com/ajax/libs/socket.io/3.0.4/socket.io.js
- __init__(app_name: str, server_config: dict = {}, support_auths: dict = {}, before_server_start=None, after_server_start=None, before_server_stop=None, after_server_stop=None, logger=None, log_level: int = 20, load_i18n_para=None, **kwargs)[源代码]¶
初始化SocketIOServer
- 参数
app_name (str) – Flask服务器名称
server_config (dict) –
default=None, 服务器配置字典, 定义如下:
app_config {dict} - Flask初始化参数字典(请参考官方Flask文档), 常用参数包括:
root_path {str} - Flask应用的资源根目录, 默认会获取所执行应用的根目录, 可以手工指定
static_folder {str} - 静态资源目录, 为 root_path 的相对路径, 默认为’static’
注: 如果指定绝对路径则会与 root_path 路径无关
static_url_path {str} - 静态资源的访问url前缀, 行为表现如下:
未传值的情况:
如果static_folder未被指定, 那么static_url_path取为static, 也就是通过’/static/index.html’访问静态资源
如果static_folder被指定了, 那么static_url_path等于static_folder的最后一级文件夹名称, 也就是通过’/最后一级文件夹/index.html’访问静态资源
有传值的情况:
static_url_path=’’, 代表直接通过根路径’/’访问静态资源, 也就是通过’/index.html’访问静态资源
static_url_path=’path/path2’ 或 ‘/path/path2’, 将通过’/path/path2/index.html’访问静态资源
static_url_path=’/path/’, 路径前面不带’/’的情况, 将通过’/path/index.html’访问静态资源
cors_config {dict} - flask_cors的配置参数字典, 例如:
supports_credentials {bool} - 是否支持跨域
socketio_config {dict} - SocketIO初始化参数, 具体支持的参数参考SocketIO文档,例如:
’cors_allowed_origins’: ‘*’ # 解决跨域访问问题
’path’: ‘socket.io’ # 指定socketio的对外资源路径, 可以修改为其他值
’json’: object # 指定自定义的json处理对象, 来支持默认json处理无法转换的特色对象, 该对象必须有兼容标准json模块的dumps和loads函数
flask_run {dict} - SocketIoServer运行参数字典(请参考官方socketio.run文档), 常用参数包括:
host {str} - 绑定的主机地址, 可以为 ‘127.0.0.1’ 或不传
port {int} - 监听端口, 默认为 5000
debug {bool} - 是否debug模式, 默认False
send_file_max_age_default {int} - 单位为秒, 发送文件功能最大的缓存超时时间, 默认为12小时
json_as_ascii {bool} - josn字符串是否采取ascii模式, 默认为True, 如果需要json显示中文需传入False
max_upload_size {float} - 上传文件的最大大小, 单位为MB
use_wsgi {bool} - 是否使用WSGIServer, 默认为False
is_native_mode {bool} - 是否使用原生模式, 默认为False
注: 原生模式不支持add_service这类请求响应的方法, 需要自行通过bind_on_event绑定事件处理函数;
非原生模式通过指定特定的事件作为服务请求事件, 从而形成请求响应模式的处理
service_event {str} - 指定服务模式的事件标识, 默认为’socketio_service’
service_namespace {str|list} - 指定服务模式对应的命名空间, 默认为None(全局命名空间)
注: 如果传入的类型是list, 则会在清单中的命名空间都进行服务事件的注册
support_auths (dict) –
default=None, 服务器支持的验证对象字典, key为验证对象类型名(可以为类名), value为验证对象实例对象
注意: 支持的auth对象必须有auth_required这个修饰符函数
before_server_start (function) – default=None, 服务器启动前执行的函数对象, 传入服务自身(self)
after_server_start (function) – default=None, 服务器启动后执行的函数对象, 传入服务自身(self)
before_server_stop (function) – default=None, 服务器关闭前执行的函数对象, 传入服务自身(self)
after_server_stop (function) – default=None, 服务器关闭后执行的函数对象, 传入服务自身(self)
logger (Logger) – default=None, 自定义应用逻辑使用的日志对象
log_level (int) – default=logging.INFO, 一般信息的记录使用的日志级别
load_i18n_para (dict) –
default=None, 要装载的i18n语言文件配置
path {str} - 要加载的i18n字典文件路径, 如果填空代表程序运行的当前路径
prefix {str} - 要加载的i18n字典文件前缀
encoding {str} - 要加载的i18n字典文件的字符编码, 默认为’utf-8’
实现类自定义扩展参数 (-) –
- add_service(service_uri: str, handler: Callable, namespace=None, **kwargs) HiveNetCore.generic.CResult[源代码]¶
添加请求处理服务
注: 命名空间和服务名重复将被覆盖
- 参数
service_uri (str) – 服务唯一标识(事件)
handler (Callable) –
请求处理函数, 可同时支持同步或异步函数
函数格式如下: func(request: dict) -> dict
送入的request字典格式为:
{
‘id’: ‘’, # 事件请求id
’service_uri’: ‘’, # 请求服务uri
’data’: … # 请求数据对象
}
可以直接返回支持json转换的原生python对象反馈到客户端
注1: 如果返回的对象是iter, 则客户端也可以以iter方式处理返回值
注2: 处理函数内部可以通过emit或broadcast函数进行向客户端推送其他事件(非当前请求的响应事件)
namespace (str|list) – default=None, 要添加到的服务命名空间
实现类的自定义扩展参数 (-) –
- 返回
添加服务结果, result.code: ‘00000’-成功, 其他-异常
- 返回类型
- add_service_by_class(class_objs: list, blacklist: Optional[list] = None, class_name_mapping: Optional[dict] = None, namespace=None, **kwargs) HiveNetCore.generic.CResult[源代码]¶
通过类对象动态增加服务
注: service_uri固定为’class_name.function_name’
- 参数
class_objs (list) – Api类对象清单(可以支持传入类对象, 也可以支持传入类实例)
blacklist (list) – default=None, 禁止添加的服务黑名单, 格式为”类名/函数名”
class_name_mapping (dict) – default=None, 类名映射, 可以根据这个改变访问uri的路径, key为真实类名, value为映射后的类名
namespace (str|list) – default=None, 要添加到的服务命名空间
- bind_bg_task_on_event(event: str, task_func, func_args: list = [], func_kwargs: dict = {}, namespace: Optional[str] = None)[源代码]¶
绑定为特定事件处理的后台执行函数
- 参数
event (str) –
事件名, 其中一些事件是标准事件, 例如:
’connect’ - 连接事件
’disconnect’ - 断开连接事件
task_func (function) –
后台处理函数
注: task_func 内部如果要sleep, 必须使用 socketio.sleep 而不是time.sleep, 否则将会导致线程阻塞
func_args (list) – default=[], 后台执行函数的固定入参列表
func_kwargs (dict) – default={}, 后台执行函数的kv入参列表
namespace (str) – default=None, 命名空间, 例如’/test’
- bind_on_event(event: str, func, namespace: Optional[str] = None)[源代码]¶
绑定指定函数为特定事件的处理函数
- 参数
event (str) –
事件名, 其中一些事件是标准事件, 例如:
’connect’ - 连接事件
’disconnect’ - 断开连接事件
func (function) – 处理函数对象
namespace (str) – default=None, 命名空间, 例如’/test’
- classmethod broadcast(event: str, data: dict, namespace: Optional[str] = None, with_context_app=None)[源代码]¶
发送消息给所有连接的客户端
注意:该函数必须在绑定事件的函数内部使用
- 参数
event (str) – 事件名
data (dict) – 要通知的数据字典
namespace (str) – default=None, 命名空间, 例如’/’
with_context_app (Flask) –
default=None, 指定上下文的Flask App对象
注: 解决 Working outside of application context 的问题
- classmethod emit(event, *args, **kwargs)[源代码]¶
向客户端发送消息, 是emit函数的直接映射
注意:该函数必须在绑定事件的函数内部使用
- 参数
event (str) – 事件
- remove_service(service_uri: str, namespace=None, **kwargs) HiveNetCore.generic.CResult[源代码]¶
移除请求处理服务
注: 服务不存在的情况也不返回错误
- 参数
service_uri (str) – 服务唯一标识(事件)
namespace (str|list) – default=None, 要移除服务所属服务命名空间
实现类的自定义扩展参数 (-) –
- 返回
删除服务结果, result.code: ‘00000’-成功, 其他-异常
- 返回类型