Compare commits

...

2 Commits

2 changed files with 49 additions and 0 deletions

View File

@ -8,6 +8,7 @@ from django.views.static import serve
from rest_framework import routers
from users import views, api
from .views import forward_to_getToken, forward_to_getDataset, forward_to_exportDataset
router = routers.DefaultRouter()
router.register(r'users', api.UserAPI, basename='user')
@ -30,4 +31,8 @@ urlpatterns = [
path('api/current-user/token', api.UserGetTokenAPI.as_view(), name='current-user-token'),
path('api/current-user/whoami', api.UserWhoAmIAPI.as_view(), name='current-user-whoami'),
path('forward/getToken/', forward_to_getToken, name='forward_to_getToken'),
path('forward/getDateset/', forward_to_getDataset, name='forward_to_getDateset'),
path('forward/exportDateset/', forward_to_exportDataset, name='forward_to_exportDateset'),
]

View File

@ -14,8 +14,52 @@ from core.utils.common import load_func
from users.functions import proceed_registration
from organizations.models import Organization
from organizations.forms import OrganizationSignupForm
import requests
from django.http import JsonResponse
import json
def forward_request_to_target(request, target_url):
"""
处理来自前端的请求并将其转发到目标URL
Args:
request: 前端请求对象
target_url: 目标URL
Returns:
JsonResponse: 包含目标接口的响应数据的JSON响应
"""
try:
# 获取请求方法和请求体
method = request.method
payload = request.body
# 设置Authorization头部如果存在
headers = {}
if 'Authorization' in request.headers:
headers['Authorization'] = request.headers['Authorization']
headers['Content-Type'] = request.headers['Content-Type']
# 转发请求到目标URL
query_params = request.GET
target_url_with_params = f"{target_url}?{'&'.join([f'{key}={value}' for key, value in query_params.items()])}"
print(target_url_with_params)
response = requests.request(method, target_url_with_params, headers=headers, data=payload)
data = response.text # 获取目标接口的响应数据
employee_data = json.loads(data)
return JsonResponse(employee_data,status=response.status_code)
except requests.RequestException:
return JsonResponse({'error': 'Failed to forward request.'}, status=500)
# 示例用法
def forward_to_getToken(request):
target_url = "http://172.20.32.150:8082/auth/loginByKey"
return forward_request_to_target(request, target_url)
def forward_to_getDataset(request):
target_url = "http://172.20.32.150:8082/mmp/dataset"
return forward_request_to_target(request, target_url)
def forward_to_exportDataset(request):
target_url = "http://172.20.32.150:8082/mmp/datasetVersion/addDatasetVersionsFromLabel"
return forward_request_to_target(request, target_url)
logger = logging.getLogger()