|  |  | @ -1,4 +1,4 @@ | 
			
		
	
		
			
				
					|  |  |  | from functools import wraps | 
			
		
	
		
			
				
					|  |  |  | from functools import wraps, lru_cache | 
			
		
	
		
			
				
					|  |  |  | from fastapi import Request | 
			
		
	
		
			
				
					|  |  |  | from fastapi.responses import JSONResponse, ORJSONResponse, UJSONResponse | 
			
		
	
		
			
				
					|  |  |  | import inspect | 
			
		
	
	
		
			
				
					|  |  | @ -52,21 +52,7 @@ def log_decorator(title: str, business_type: int, log_type: Optional[str] = 'ope | 
			
		
	
		
			
				
					|  |  |  |             oper_ip = request.headers.get("X-Forwarded-For") | 
			
		
	
		
			
				
					|  |  |  |             oper_location = '内网IP' | 
			
		
	
		
			
				
					|  |  |  |             if AppConfig.app_ip_location_query: | 
			
		
	
		
			
				
					|  |  |  |                 try: | 
			
		
	
		
			
				
					|  |  |  |                     if oper_ip != '127.0.0.1' and oper_ip != 'localhost': | 
			
		
	
		
			
				
					|  |  |  |                         ip_result = requests.get(f'https://qifu-api.baidubce.com/ip/geo/v1/district?ip={oper_ip}') | 
			
		
	
		
			
				
					|  |  |  |                         if ip_result.status_code == 200: | 
			
		
	
		
			
				
					|  |  |  |                             prov = ip_result.json().get('data').get('prov') | 
			
		
	
		
			
				
					|  |  |  |                             city = ip_result.json().get('data').get('city') | 
			
		
	
		
			
				
					|  |  |  |                             if prov or city: | 
			
		
	
		
			
				
					|  |  |  |                                 oper_location = f'{prov}-{city}' | 
			
		
	
		
			
				
					|  |  |  |                             else: | 
			
		
	
		
			
				
					|  |  |  |                                 oper_location = '未知' | 
			
		
	
		
			
				
					|  |  |  |                         else: | 
			
		
	
		
			
				
					|  |  |  |                             oper_location = '未知' | 
			
		
	
		
			
				
					|  |  |  |                 except Exception as e: | 
			
		
	
		
			
				
					|  |  |  |                     oper_location = '未知' | 
			
		
	
		
			
				
					|  |  |  |                     print(e) | 
			
		
	
		
			
				
					|  |  |  |                 oper_location = get_ip_location(oper_ip) | 
			
		
	
		
			
				
					|  |  |  |             # 根据不同的请求类型使用不同的方法获取请求参数 | 
			
		
	
		
			
				
					|  |  |  |             content_type = request.headers.get("Content-Type") | 
			
		
	
		
			
				
					|  |  |  |             if content_type and ("multipart/form-data" in content_type or 'application/x-www-form-urlencoded' in content_type): | 
			
		
	
	
		
			
				
					|  |  | @ -175,3 +161,26 @@ def log_decorator(title: str, business_type: int, log_type: Optional[str] = 'ope | 
			
		
	
		
			
				
					|  |  |  |         return wrapper | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     return decorator | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | @lru_cache() | 
			
		
	
		
			
				
					|  |  |  | def get_ip_location(oper_ip: str): | 
			
		
	
		
			
				
					|  |  |  |     """ | 
			
		
	
		
			
				
					|  |  |  |     查询ip归属区域 | 
			
		
	
		
			
				
					|  |  |  |     :param oper_ip: 需要查询的ip | 
			
		
	
		
			
				
					|  |  |  |     :return: ip归属区域 | 
			
		
	
		
			
				
					|  |  |  |     """ | 
			
		
	
		
			
				
					|  |  |  |     oper_location = '内网IP' | 
			
		
	
		
			
				
					|  |  |  |     try: | 
			
		
	
		
			
				
					|  |  |  |         if oper_ip != '127.0.0.1' and oper_ip != 'localhost': | 
			
		
	
		
			
				
					|  |  |  |             oper_location = '未知' | 
			
		
	
		
			
				
					|  |  |  |             ip_result = requests.get(f'https://qifu-api.baidubce.com/ip/geo/v1/district?ip={oper_ip}') | 
			
		
	
		
			
				
					|  |  |  |             if ip_result.status_code == 200: | 
			
		
	
		
			
				
					|  |  |  |                 prov = ip_result.json().get('data').get('prov') | 
			
		
	
		
			
				
					|  |  |  |                 city = ip_result.json().get('data').get('city') | 
			
		
	
		
			
				
					|  |  |  |                 if prov or city: | 
			
		
	
		
			
				
					|  |  |  |                     oper_location = f'{prov}-{city}' | 
			
		
	
		
			
				
					|  |  |  |     except Exception as e: | 
			
		
	
		
			
				
					|  |  |  |         oper_location = '未知' | 
			
		
	
		
			
				
					|  |  |  |         print(e) | 
			
		
	
		
			
				
					|  |  |  |     return oper_location | 
			
		
	
	
		
			
				
					|  |  | 
 |