73 lines
1.8 KiB
Python
73 lines
1.8 KiB
Python
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)
|