fix: 修改 core.func 结构
This commit is contained in:
@@ -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)
|
0
nc_http/core/request/__init__.py
Normal file
0
nc_http/core/request/__init__.py
Normal file
72
nc_http/core/request/func.py
Normal file
72
nc_http/core/request/func.py
Normal file
@@ -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)
|
32
nc_http/core/response/func.py
Normal file
32
nc_http/core/response/func.py
Normal file
@@ -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
|
||||
)
|
Reference in New Issue
Block a user