|
|
@ -1,6 +1,7 @@ |
|
|
|
import datetime |
|
|
|
import datetime |
|
|
|
import json |
|
|
|
import json |
|
|
|
import requests |
|
|
|
import requests |
|
|
|
|
|
|
|
import xml.etree.ElementTree |
|
|
|
from urllib.parse import urljoin |
|
|
|
from urllib.parse import urljoin |
|
|
|
from django.db.models import Q |
|
|
|
from django.db.models import Q |
|
|
|
from django_filters.rest_framework import DjangoFilterBackend |
|
|
|
from django_filters.rest_framework import DjangoFilterBackend |
|
|
@ -8,12 +9,14 @@ from django_redis import get_redis_connection |
|
|
|
from rest_framework import filters |
|
|
|
from rest_framework import filters |
|
|
|
from rest_framework import viewsets |
|
|
|
from rest_framework import viewsets |
|
|
|
from django.views.decorators.csrf import csrf_exempt |
|
|
|
from django.views.decorators.csrf import csrf_exempt |
|
|
|
|
|
|
|
from django.http.response import JsonResponse, HttpResponse |
|
|
|
|
|
|
|
# from rest_framework.response import Response |
|
|
|
|
|
|
|
from django.utils import timezone |
|
|
|
|
|
|
|
from dspt_api.util.sign import Sign |
|
|
|
from dspt_api.models import EcChannel, EcEnv, EcApi, EcApiParams, EcCinemaIds, EcRequestLog, EcApiGroup |
|
|
|
from dspt_api.models import EcChannel, EcEnv, EcApi, EcApiParams, EcCinemaIds, EcRequestLog, EcApiGroup |
|
|
|
from dspt_api.serializers import EcChannelSerializer, EcEnvSerializer, EcApiSerializer, EcApiParamsSerializer, \ |
|
|
|
from dspt_api.serializers import EcChannelSerializer, EcEnvSerializer, EcApiSerializer, EcApiParamsSerializer, \ |
|
|
|
EcCinemaIdsSerializer, EcRequestLogSerializer, EcApiGroupSerializer |
|
|
|
EcCinemaIdsSerializer, EcRequestLogSerializer, EcApiGroupSerializer |
|
|
|
from django.http.response import JsonResponse |
|
|
|
from dspt_api.util.xml_util import get_xml |
|
|
|
from django.utils import timezone |
|
|
|
|
|
|
|
from dspt_api.util.sign import Sign |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Create your views here. |
|
|
|
# Create your views here. |
|
|
@ -75,6 +78,7 @@ def handle_request(_request): |
|
|
|
member_type = req.get('member_type') |
|
|
|
member_type = req.get('member_type') |
|
|
|
api = req.get('api') |
|
|
|
api = req.get('api') |
|
|
|
params = json.loads(req.get('params')) |
|
|
|
params = json.loads(req.get('params')) |
|
|
|
|
|
|
|
resp_format = params['format'] |
|
|
|
try: |
|
|
|
try: |
|
|
|
base_url = EcEnv.objects.filter(Q(code=env) & Q(type=member_type)).values('host').first()['host'] |
|
|
|
base_url = EcEnv.objects.filter(Q(code=env) & Q(type=member_type)).values('host').first()['host'] |
|
|
|
except Exception as e: |
|
|
|
except Exception as e: |
|
|
@ -133,10 +137,23 @@ def general_api_url(request): |
|
|
|
api api地址 |
|
|
|
api api地址 |
|
|
|
params 请求参数 |
|
|
|
params 请求参数 |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
# req = json.loads(request.body) |
|
|
|
|
|
|
|
# params = json.loads(req.get('params')) |
|
|
|
|
|
|
|
# resp_format = params['format'] |
|
|
|
req_obj, sig = handle_request(request) |
|
|
|
req_obj, sig = handle_request(request) |
|
|
|
|
|
|
|
failed_resp_data = {'url': '请检查foramt、pid参数', 'sig': ''} |
|
|
|
|
|
|
|
result = {'url': req_obj.url, 'sig': sig} |
|
|
|
if req_obj is False: |
|
|
|
if req_obj is False: |
|
|
|
return JsonResponse({'url': '请检查foramt、pid参数', 'sig': ''}) |
|
|
|
return JsonResponse(failed_resp_data) |
|
|
|
return JsonResponse({'url': req_obj.url, 'sig': sig}) |
|
|
|
return JsonResponse(result) |
|
|
|
|
|
|
|
# if resp_format == 'xml': |
|
|
|
|
|
|
|
# if req_obj is False: |
|
|
|
|
|
|
|
# return HttpResponse(get_xml(failed_resp_data)) |
|
|
|
|
|
|
|
# return HttpResponse(get_xml(result)) |
|
|
|
|
|
|
|
# if resp_format == 'json': |
|
|
|
|
|
|
|
# if req_obj is False: |
|
|
|
|
|
|
|
# return JsonResponse(failed_resp_data) |
|
|
|
|
|
|
|
# return JsonResponse(result) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 对外接口,用于收集用户提交内容后发送请求 |
|
|
|
# 对外接口,用于收集用户提交内容后发送请求 |
|
|
@ -149,6 +166,10 @@ def send_request(request): |
|
|
|
3. 接口 api |
|
|
|
3. 接口 api |
|
|
|
4. 环境 env |
|
|
|
4. 环境 env |
|
|
|
""" |
|
|
|
""" |
|
|
|
|
|
|
|
# 获取返回类型结果 |
|
|
|
|
|
|
|
req = json.loads(request.body) |
|
|
|
|
|
|
|
params = json.loads(req.get('params')) |
|
|
|
|
|
|
|
resp_format = params['format'] |
|
|
|
# 初始化redis |
|
|
|
# 初始化redis |
|
|
|
redis_conn = get_redis_connection() |
|
|
|
redis_conn = get_redis_connection() |
|
|
|
user_ip = request.META.get('REMOTE_ADDR') |
|
|
|
user_ip = request.META.get('REMOTE_ADDR') |
|
|
@ -156,34 +177,44 @@ def send_request(request): |
|
|
|
api = web_req.get('api') |
|
|
|
api = web_req.get('api') |
|
|
|
redis_key_api = f'dspt_api_{user_ip}_{api}' |
|
|
|
redis_key_api = f'dspt_api_{user_ip}_{api}' |
|
|
|
# redis_key_user_data = f'dspt_api_{user_ip}_{api}_data' |
|
|
|
# redis_key_user_data = f'dspt_api_{user_ip}_{api}_data' |
|
|
|
|
|
|
|
|
|
|
|
# 发送请求 |
|
|
|
# 发送请求 |
|
|
|
req, sig = handle_request(request) |
|
|
|
req, sig = handle_request(request) |
|
|
|
|
|
|
|
failed_resp_data = {'url': '请检查foramt、pid参数', 'sig': ''} |
|
|
|
|
|
|
|
# if resp_format == 'xml' and req is False: |
|
|
|
|
|
|
|
# return HttpResponse(get_xml(failed_resp_data)) |
|
|
|
|
|
|
|
# if resp_format == 'json' and req is False: |
|
|
|
|
|
|
|
# return JsonResponse(failed_resp_data) |
|
|
|
if req is False: |
|
|
|
if req is False: |
|
|
|
return JsonResponse({'url': '请检查foramt、pid参数', 'sig': ''}) |
|
|
|
return JsonResponse(failed_resp_data) |
|
|
|
response = requests.Session().send(req) |
|
|
|
response = requests.Session().send(req) |
|
|
|
print('response', response) |
|
|
|
print('response', response.content) |
|
|
|
# 记录Redis |
|
|
|
# 记录Redis |
|
|
|
if redis_conn.exists(redis_key_api): |
|
|
|
if redis_conn.exists(redis_key_api): |
|
|
|
redis_conn.delete(redis_key_api) |
|
|
|
redis_conn.delete(redis_key_api) |
|
|
|
else: |
|
|
|
data = { |
|
|
|
data = { |
|
|
|
'request_url': req.url, |
|
|
|
'request_url': req.url, |
|
|
|
'format': resp_format, |
|
|
|
'response_data': response.json() |
|
|
|
'response_data': response.text |
|
|
|
} |
|
|
|
} |
|
|
|
print(data) |
|
|
|
print(data) |
|
|
|
redis_conn.set(redis_key_api, json.dumps(data), 10 * 60 * 60) |
|
|
|
redis_conn.set(redis_key_api, json.dumps(data), 10 * 60 * 60) |
|
|
|
# redis_conn.delete(redis_key_user_data) |
|
|
|
# redis_conn.delete(redis_key_user_data) |
|
|
|
# 插入数据 |
|
|
|
# 插入数据 |
|
|
|
db_data = { |
|
|
|
db_data = { |
|
|
|
'ip': user_ip, |
|
|
|
'ip': user_ip, |
|
|
|
'env': web_req.get('env'), |
|
|
|
'env': web_req.get('env'), |
|
|
|
'request': req.url, |
|
|
|
'request': req.url, |
|
|
|
'response': response.json(), |
|
|
|
'response': response.content, |
|
|
|
'request_datetime': timezone.now(), |
|
|
|
'request_datetime': timezone.now(), |
|
|
|
} |
|
|
|
} |
|
|
|
print(db_data) |
|
|
|
print(db_data) |
|
|
|
EcRequestLog.objects.create(**db_data) |
|
|
|
EcRequestLog.objects.create(**db_data) |
|
|
|
return JsonResponse(response.json()) |
|
|
|
return JsonResponse({'format': resp_format, 'data': response.text}) |
|
|
|
|
|
|
|
# if resp_format == 'xml': |
|
|
|
|
|
|
|
# return HttpResponse(response.content) |
|
|
|
|
|
|
|
# if resp_format == 'json': |
|
|
|
|
|
|
|
# return JsonResponse(response.json()) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 对外接口,用于收集用户选择的数据,例如场次,卖品等,以便后续接口直接调用 |
|
|
|
# 对外接口,用于收集用户选择的数据,例如场次,卖品等,以便后续接口直接调用 |
|
|
|