From d29f80dc2eb1141871de23ceb0b07d2bdb022fce Mon Sep 17 00:00:00 2001 From: han0 Date: Thu, 23 Feb 2023 15:08:07 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=20core.func=20?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nc_http/core/func.py | 150 ------------------------------- nc_http/core/request/__init__.py | 0 nc_http/core/request/func.py | 72 +++++++++++++++ nc_http/core/response/func.py | 32 +++++++ 4 files changed, 104 insertions(+), 150 deletions(-) delete mode 100644 nc_http/core/func.py create mode 100644 nc_http/core/request/__init__.py create mode 100644 nc_http/core/request/func.py create mode 100644 nc_http/core/response/func.py diff --git a/nc_http/core/func.py b/nc_http/core/func.py deleted file mode 100644 index 0e8a26e..0000000 --- a/nc_http/core/func.py +++ /dev/null @@ -1,150 +0,0 @@ -import json -import zlib - -from flask import request, g, send_file -from six import string_types - - -def strip_value(data): - """ - 递归处理字符占位符 - :param data: - :return: - """ - if isinstance(data, dict): - for key, value in data.items(): - data[key] = strip_value(value) - elif isinstance(data, list): - for key, value in enumerate(data): - data[key] = strip_value(value) - elif isinstance(data, string_types): - data = data.strip() - - return data - - -def camelize(uncamelized_str): - """ - 小写下划线转驼峰 - :param uncamelized_str: - :return: - """ - if not uncamelized_str: - return uncamelized_str - result = ''.join(i.capitalize() for i in uncamelized_str.split('_')) - result = ''.join((result[0].lower(), result[1:])) - return result - - -def uncamelize(camelized_str): - """ - 驼峰转小写下划线 - :param camelized_str: - :return: - """ - if not camelized_str: - return camelized_str - lst = [] - for index, char in enumerate(camelized_str): - if char.isupper() and index != 0: - lst.append("_") - lst.append(char) - - return ''.join(lst).lower() - - -def get_request_json(is_uncamelize=False): - """ - 获取 json 传递参数 - :param is_uncamelize: 是否进行驼峰->小写下划线转换 - :return: - """ - if 'request_data' not in g: - if request.method.lower() == 'get': - data = request.args.to_dict() - else: - if request.content_encoding and 'gzip' in request.content_encoding: - json_data = zlib.decompress(request.get_data()) - data = json.loads(json_data) - else: - data = request.get_json(force=True, silent=True) or {} - if is_uncamelize: - data = {uncamelize(k): v for k, v in data.items()} - - g.request_data = strip_value(data) - - return g.request_data - - -def get_paging(limit=10): - """ - 获取分页参数 - :param limit: - :return: - """ - data = get_request_json() - - return { - 'page': int(data.get('page') or 1), - 'size': int(data.get('size') or limit), - 'offset': int(data.get('offset') or 0), - 'limit': int(data.get('limit') or limit) - } - - -def get_sorting(): - """ - 获取排序参数 - :return: - """ - data = get_request_json() - if not data.get('order_field'): - return None - return { - 'order': data.get('order') or 'asc', - 'order_field': uncamelize(data.get('order_field')), - } - - -def send_excel(file_handler, file_name, suffix='xlsx'): - """ - 发送 excel 文件 - :param file_handler: - :param file_name: - :param suffix: - :return: - """ - return send_file( - file_handler, - mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - attachment_filename='{}.{}'.format(file_name, suffix), - as_attachment=True - ) - - -def send_png(img_handler, name='image'): - """ - 发送图片文件(可用于验证码) - :param img_handler: - :param name: - :return: - """ - return send_file( - img_handler, - mimetype='image/png', - attachment_filename='{}.png'.format(name), - as_attachment=True - ) - - -def get_client_ip(request): - """ - 获取客户端 ip - :param request: flask.Request - :return: - """ - x_forwarded_for = request.headers.get('X-Forwarded-For') - if x_forwarded_for: - ips = x_forwarded_for.split(',') - return ips[0].strip() - return request.headers.get('X-Real-Ip', request.remote_addr) diff --git a/nc_http/core/request/__init__.py b/nc_http/core/request/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/nc_http/core/request/func.py b/nc_http/core/request/func.py new file mode 100644 index 0000000..e5f99bd --- /dev/null +++ b/nc_http/core/request/func.py @@ -0,0 +1,72 @@ +import json +import zlib + +from flask import request, g + +from nc_http.tools.helpers import uncamelize, strip_value + + +def get_request_json(is_uncamelize=False): + """ + 获取 json 传递参数 + :param is_uncamelize: 是否进行驼峰->小写下划线转换 + :return: + """ + if 'request_data' not in g: + if request.method.lower() == 'get': + data = request.args.to_dict() + else: + if request.content_encoding and 'gzip' in request.content_encoding: + json_data = zlib.decompress(request.get_data()) + data = json.loads(json_data) + else: + data = request.get_json(force=True, silent=True) or {} + if is_uncamelize: + data = {uncamelize(k): v for k, v in data.items()} + + g.request_data = strip_value(data) + + return g.request_data + + +def get_paging(limit=10): + """ + 获取分页参数 + :param limit: + :return: + """ + data = get_request_json() + + return { + 'page': int(data.get('page') or 1), + 'size': int(data.get('size') or limit), + 'offset': int(data.get('offset') or 0), + 'limit': int(data.get('limit') or limit) + } + + +def get_sorting(): + """ + 获取排序参数 + :return: + """ + data = get_request_json() + if not data.get('order_field'): + return None + return { + 'order': data.get('order') or 'asc', + 'order_field': uncamelize(data.get('order_field')), + } + + +def get_client_ip(request): + """ + 获取客户端 ip + :param request: flask.Request + :return: + """ + x_forwarded_for = request.headers.get('X-Forwarded-For') + if x_forwarded_for: + ips = x_forwarded_for.split(',') + return ips[0].strip() + return request.headers.get('X-Real-Ip', request.remote_addr) diff --git a/nc_http/core/response/func.py b/nc_http/core/response/func.py new file mode 100644 index 0000000..84d9f8f --- /dev/null +++ b/nc_http/core/response/func.py @@ -0,0 +1,32 @@ +from flask import send_file + + +def send_excel(file_handler, file_name, suffix='xlsx'): + """ + 发送 excel 文件 + :param file_handler: + :param file_name: + :param suffix: + :return: + """ + return send_file( + file_handler, + mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + attachment_filename='{}.{}'.format(file_name, suffix), + as_attachment=True + ) + + +def send_png(img_handler, name='image'): + """ + 发送图片文件(可用于验证码) + :param img_handler: + :param name: + :return: + """ + return send_file( + img_handler, + mimetype='image/png', + attachment_filename='{}.png'.format(name), + as_attachment=True + )