Files
nc_http/nc_http/core/request/func.py
2023-02-23 15:08:07 +08:00

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)