'''
web 处理相关函数
'''
from flask import request, make_response, send_file
import json
def get_user_ip():
'''
获取登录用户ip
:return:
'''
if request.headers.get('X-Forwarded-For'):
return request.headers['X-Forwarded-For']
elif request.headers.get('X-Real-IP'):
return request.headers.get('X-Real-IP')
else:
return request.remote_addr
def get_user_agent():
'''
获取ua
:return:
'''
return request.headers.get('User-Agent')
def get_req_para(req=request):
'''
获取http请求的参数
'''
if req.method in ['GET']:
args = request.args
return args.to_dict()
else:
res = req.get_data()
try:
the_para = json.loads(res)
return the_para
except Exception:
try:
return req.form
except Exception:
raise ValueError
def is_empty(value):
'''
校验是否为空
:param value:
:return:
'''
if isinstance(value, list):
return value == []
if isinstance(value, dict):
return value == {}
if isinstance(value, str):
return value == ''
return value is None
def validate_params(req_dict, verify_dict):
'''
校验请求参数
:return:
'''
for key, check in verify_dict.items():
param = req_dict.get(key)
name = check['name']
for k in check:
if k in ['not_empty', 'required'] and is_empty(param):
return f"{name}不能为空"
if k == 'length':
len_li = check['length']
if param:
if len(str(param)) < len_li[0]:
return f"{name}长度低于限制"
elif len(str(param)) > len_li[1]:
return f"{name}长度超出限制"
if k == 'equals':
equals = check['equals']
if param not in equals:
return f"{name}非法字符"
if k == 'funcs':
funcs = check['funcs']
for func in funcs:
print(func)
res = func(param)
print(res)
if res:
return f"{name}{res}"
return False
def generate_download_file(output_file, filename):
'''
生成文件导出到前端
:return:
'''
fv = send_file(output_file, as_attachment=True, download_name=filename, conditional=True)
fv.headers['Access-Control-Expose-Headers'] = 'Content-Disposition'
fv.headers['Content-Disposition'] += "; filename*=utf-8''{}".format(filename)
fv.headers["Cache-Control"] = "no_store"
fv.headers["max-age"] = 1
return make_response(fv)
if __name__ == '__main__':
pass