三方调用接口优化
This commit is contained in:
parent
a3cb4bb34c
commit
cff1ecbe00
|
@ -4,10 +4,13 @@ from django.urls import path, include
|
||||||
from rest_framework.routers import DefaultRouter
|
from rest_framework.routers import DefaultRouter
|
||||||
from apps.develop.views import BackupDatabase, BackupMedia, ReloadServerGit, ReloadServerOnly
|
from apps.develop.views import BackupDatabase, BackupMedia, ReloadServerGit, ReloadServerOnly
|
||||||
|
|
||||||
|
API_BASE_URL = 'api/develop/'
|
||||||
|
HTML_BASE_URL = 'develop/'
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('reload_server_git/', ReloadServerGit.as_view()),
|
path(API_BASE_URL + 'reload_server_git/', ReloadServerGit.as_view()),
|
||||||
path('reload_server_only/', ReloadServerOnly.as_view()),
|
path(API_BASE_URL + 'reload_server_only/', ReloadServerOnly.as_view()),
|
||||||
path('backup_database/', BackupDatabase.as_view()),
|
path(API_BASE_URL + 'backup_database/', BackupDatabase.as_view()),
|
||||||
path('backup_media/', BackupMedia.as_view())
|
path(API_BASE_URL + 'backup_media/', BackupMedia.as_view())
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,9 @@ class ReloadServerGit(APIView):
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
"""
|
"""
|
||||||
拉取代码并重启服务
|
拉取后端代码并重启服务
|
||||||
|
|
||||||
|
拉取后端代码并重启服务
|
||||||
"""
|
"""
|
||||||
completed = reload_server_git()
|
completed = reload_server_git()
|
||||||
if completed.returncode == 0:
|
if completed.returncode == 0:
|
||||||
|
@ -25,6 +27,8 @@ class ReloadServerOnly(APIView):
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
"""
|
"""
|
||||||
|
仅重启服务
|
||||||
|
|
||||||
仅重启服务
|
仅重启服务
|
||||||
"""
|
"""
|
||||||
completed = reload_server_only()
|
completed = reload_server_only()
|
||||||
|
@ -38,6 +42,8 @@ class BackupDatabase(APIView):
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
"""
|
"""
|
||||||
|
备份数据库到指定位置
|
||||||
|
|
||||||
备份数据库到指定位置
|
备份数据库到指定位置
|
||||||
"""
|
"""
|
||||||
completed = backup_database()
|
completed = backup_database()
|
||||||
|
@ -50,6 +56,8 @@ class BackupMedia(APIView):
|
||||||
permission_classes = [IsAdminUser]
|
permission_classes = [IsAdminUser]
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
"""
|
"""
|
||||||
|
备份资源到指定位置
|
||||||
|
|
||||||
备份资源到指定位置
|
备份资源到指定位置
|
||||||
"""
|
"""
|
||||||
completed = backup_media()
|
completed = backup_media()
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import json
|
||||||
import re
|
import re
|
||||||
from django_celery_beat.models import PeriodicTask, CrontabSchedule, IntervalSchedule
|
from django_celery_beat.models import PeriodicTask, CrontabSchedule, IntervalSchedule
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
@ -9,6 +10,7 @@ from .models import (Dict, DictType, File, Dept, Permission, Post,
|
||||||
Role, User, UserPost)
|
Role, User, UserPost)
|
||||||
from rest_framework.exceptions import ParseError, APIException
|
from rest_framework.exceptions import ParseError, APIException
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
from apps.third.tapis import dhapis
|
||||||
|
|
||||||
class IntervalSerializer(CustomModelSerializer):
|
class IntervalSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -195,15 +197,9 @@ class DeptCreateUpdateSerializer(CustomModelSerializer):
|
||||||
"name":validated_data['name'],
|
"name":validated_data['name'],
|
||||||
"service":"ehs"
|
"service":"ehs"
|
||||||
}
|
}
|
||||||
ok, res = dhClient.request('/evo-apigw/evo-brm/1.0.0/department/add',
|
_, res = dhClient.request(**dhapis['dept_create'],json=data)
|
||||||
'post',json=data)
|
third_info = {'dh_id':str(res['id'])}
|
||||||
if ok == 'success':
|
validated_data['third_info'] = third_info
|
||||||
third_info = {'dh_id':str(res['id'])}
|
|
||||||
validated_data['third_info'] = third_info
|
|
||||||
elif ok == 'fail':
|
|
||||||
raise ParseError(**res)
|
|
||||||
else:
|
|
||||||
raise APIException(**res)
|
|
||||||
return super().create(validated_data)
|
return super().create(validated_data)
|
||||||
|
|
||||||
|
|
||||||
|
@ -217,14 +213,7 @@ class DeptCreateUpdateSerializer(CustomModelSerializer):
|
||||||
"parentId":1,
|
"parentId":1,
|
||||||
"name":validated_data['name']
|
"name":validated_data['name']
|
||||||
}
|
}
|
||||||
ok, res = dhClient.request('/evo-apigw/evo-brm/1.0.0/department/update',
|
dhClient.request(**dhapis['dept_update'],json=data)
|
||||||
'put',json=data)
|
|
||||||
if ok == 'success':
|
|
||||||
pass
|
|
||||||
elif ok == 'fail':
|
|
||||||
raise ParseError(**res)
|
|
||||||
else:
|
|
||||||
raise APIException(**res)
|
|
||||||
return super().update(instance, validated_data)
|
return super().update(instance, validated_data)
|
||||||
|
|
||||||
class UserSimpleSerializer(CustomModelSerializer):
|
class UserSimpleSerializer(CustomModelSerializer):
|
||||||
|
@ -244,13 +233,6 @@ class UserListSerializer(CustomModelSerializer):
|
||||||
model = User
|
model = User
|
||||||
exclude = ['password']
|
exclude = ['password']
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def setup_eager_loading(queryset):
|
|
||||||
""" Perform necessary eager loading of data. """
|
|
||||||
queryset = queryset.select_related('superior', 'belong_dept')
|
|
||||||
queryset = queryset.prefetch_related('posts')
|
|
||||||
return queryset
|
|
||||||
|
|
||||||
def phone_check(phone):
|
def phone_check(phone):
|
||||||
re_phone = '^1[358]\d{9}$|^147\d{8}$|^176\d{8}$'
|
re_phone = '^1[358]\d{9}$|^147\d{8}$|^176\d{8}$'
|
||||||
if not re.match(re_phone, phone):
|
if not re.match(re_phone, phone):
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
TAPI_CODE_WRONG = {"code":"tapi_code_wrong", "detail":"三方接口请求标识有误"}
|
|
@ -8,7 +8,8 @@ class RequestCommonSerializer(serializers.Serializer):
|
||||||
('put','put'),
|
('put','put'),
|
||||||
('delete','delete')
|
('delete','delete')
|
||||||
)
|
)
|
||||||
url = serializers.CharField(label='请求地址')
|
url = serializers.CharField(label='请求地址', required=False)
|
||||||
method = serializers.ChoiceField(label='请求方法', choices=method_choice)
|
method = serializers.ChoiceField(label='请求方法', choices=method_choice, required=False)
|
||||||
params = serializers.JSONField(label='请求参数', required=False, allow_null=True)
|
params = serializers.JSONField(label='请求参数', required=False, allow_null=True)
|
||||||
json = serializers.JSONField(label='请求body', required=False, allow_null=True)
|
json = serializers.JSONField(label='请求body(json格式)', required=False, allow_null=True)
|
||||||
|
code = serializers.CharField(label='请求短标识', required=False)
|
|
@ -0,0 +1,16 @@
|
||||||
|
# 大华API接口
|
||||||
|
dhapis = {
|
||||||
|
"dept_create":{
|
||||||
|
"url":"/evo-apigw/evo-brm/1.0.0/department/add",
|
||||||
|
"method":"post"
|
||||||
|
},
|
||||||
|
"dept_update":{
|
||||||
|
"url":"/evo-apigw/evo-brm/1.0.0/department/update",
|
||||||
|
"method":"put"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# 寻息API接口
|
||||||
|
xxapis = {
|
||||||
|
|
||||||
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
from rest_framework.exceptions import ParseError, APIException
|
from rest_framework.exceptions import ParseError, APIException
|
||||||
|
from apps.third import tapis
|
||||||
|
from apps.third.erros import TAPI_CODE_WRONG
|
||||||
from apps.utils.dahua import dhClient
|
from apps.utils.dahua import dhClient
|
||||||
from apps.utils.errors import XX_REQUEST_ERROR
|
from apps.utils.errors import XX_REQUEST_ERROR
|
||||||
from apps.utils.xunxi import xxClient
|
from apps.utils.xunxi import xxClient
|
||||||
|
@ -81,17 +83,19 @@ class XxCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
serializer = self.get_serializer(data=request.data)
|
serializer = self.get_serializer(data=request.data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
vdata = serializer.validated_data
|
vdata = serializer.validated_data
|
||||||
ok, res = xxClient.request(
|
if vdata.get('code', ''):
|
||||||
|
try:
|
||||||
|
dhapi = tapis.dhapis[vdata['code']]
|
||||||
|
except:
|
||||||
|
raise ParseError(**TAPI_CODE_WRONG)
|
||||||
|
vdata['url'] = dhapi['url']
|
||||||
|
vdata['method'] = dhapi['method']
|
||||||
|
_, res = xxClient.request(
|
||||||
url=vdata['url'],
|
url=vdata['url'],
|
||||||
method=vdata.get('method', 'post'),
|
method=vdata.get('method', 'post'),
|
||||||
params=vdata.get('params', {}),
|
params=vdata.get('params', {}),
|
||||||
json=vdata.get('data', {}))
|
json=vdata.get('data', {}))
|
||||||
if ok == 'success':
|
return Response(res)
|
||||||
return Response(res)
|
|
||||||
elif ok == 'fail':
|
|
||||||
raise ParseError(**res)
|
|
||||||
else:
|
|
||||||
raise APIException(**res)
|
|
||||||
|
|
||||||
|
|
||||||
class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
|
@ -105,14 +109,16 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet):
|
||||||
serializer = self.get_serializer(data=request.data)
|
serializer = self.get_serializer(data=request.data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
vdata = serializer.validated_data
|
vdata = serializer.validated_data
|
||||||
ok, res = dhClient.request(
|
if vdata.get('code', ''):
|
||||||
|
try:
|
||||||
|
xxapi = tapis.xxapis[vdata['code']]
|
||||||
|
except:
|
||||||
|
raise ParseError(**TAPI_CODE_WRONG)
|
||||||
|
vdata['url'] = xxapi['url']
|
||||||
|
vdata['method'] = xxapi['method']
|
||||||
|
_, res = dhClient.request(
|
||||||
url=vdata['url'],
|
url=vdata['url'],
|
||||||
method=vdata.get('method', 'post'),
|
method=vdata.get('method', 'post'),
|
||||||
params=vdata.get('params', {}),
|
params=vdata.get('params', {}),
|
||||||
json=vdata.get('data', {}))
|
json=vdata.get('data', {}))
|
||||||
if ok == 'success':
|
return Response(res)
|
||||||
return Response(res)
|
|
||||||
elif ok == 'fail':
|
|
||||||
raise ParseError(**res)
|
|
||||||
else:
|
|
||||||
raise APIException(**res)
|
|
||||||
|
|
|
@ -65,7 +65,7 @@ class DhClient:
|
||||||
self.isRuning = False
|
self.isRuning = False
|
||||||
self.t.join()
|
self.t.join()
|
||||||
|
|
||||||
def request(self, url:str, method:str, params=dict(), json=dict(), timeout=20):
|
def request(self, url:str, method:str, params=dict(), json=dict(), timeout=20, raise_exception=True):
|
||||||
if self.isGetingToken:
|
if self.isGetingToken:
|
||||||
req_num = 0
|
req_num = 0
|
||||||
while True:
|
while True:
|
||||||
|
@ -91,8 +91,13 @@ class DhClient:
|
||||||
else:
|
else:
|
||||||
if ret['code'] not in ['0', '100', '00000', '1000', 0, 100, 1000]:
|
if ret['code'] not in ['0', '100', '00000', '1000', 0, 100, 1000]:
|
||||||
detail = '{}|{}{}'.format(str(ret['code']), ret.get('errMsg',''), ret.get('desc', ''))
|
detail = '{}|{}{}'.format(str(ret['code']), ret.get('errMsg',''), ret.get('desc', ''))
|
||||||
|
err_detail = dict(detail=detail, code='dh_'+str(ret['code']))
|
||||||
|
if raise_exception:
|
||||||
|
raise ParseError(**err_detail)
|
||||||
return 'fail', dict(detail=detail, code='dh_'+str(ret['code']))
|
return 'fail', dict(detail=detail, code='dh_'+str(ret['code']))
|
||||||
return 'success', ret['data']
|
return 'success', ret['data']
|
||||||
|
if raise_exception:
|
||||||
|
raise APIException(**DH_REQUEST_ERROR)
|
||||||
return 'error', DH_REQUEST_ERROR
|
return 'error', DH_REQUEST_ERROR
|
||||||
|
|
||||||
dhClient = DhClient()
|
dhClient = DhClient()
|
|
@ -142,7 +142,7 @@ class MyLoggingMixin(object):
|
||||||
"response_ms": self._get_response_ms(),
|
"response_ms": self._get_response_ms(),
|
||||||
"response": self._clean_data(rendered_content),
|
"response": self._clean_data(rendered_content),
|
||||||
"status_code": response.status_code,
|
"status_code": response.status_code,
|
||||||
"agent": self._get_agent(),
|
"agent": self._get_agent(request),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -176,8 +176,8 @@ REST_FRAMEWORK = {
|
||||||
'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S',
|
'DATETIME_FORMAT': '%Y-%m-%d %H:%M:%S',
|
||||||
'DATE_FORMAT': '%Y-%m-%d',
|
'DATE_FORMAT': '%Y-%m-%d',
|
||||||
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
|
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
|
||||||
'UNAUTHENTICATED_USER': None,
|
# 'UNAUTHENTICATED_USER': None,
|
||||||
'UNAUTHENTICATED_TOKEN': None,
|
# 'UNAUTHENTICATED_TOKEN': None,
|
||||||
'EXCEPTION_HANDLER': 'apps.utils.exceptions.custom_exception_hander',
|
'EXCEPTION_HANDLER': 'apps.utils.exceptions.custom_exception_hander',
|
||||||
}
|
}
|
||||||
# simplejwt配置
|
# simplejwt配置
|
||||||
|
|
|
@ -46,6 +46,7 @@ urlpatterns = [
|
||||||
path('', include('apps.wf.urls')),
|
path('', include('apps.wf.urls')),
|
||||||
path('', include('apps.third.urls')),
|
path('', include('apps.third.urls')),
|
||||||
path('', include('apps.utils.urls')),
|
path('', include('apps.utils.urls')),
|
||||||
|
path('', include('apps.develop.urls')),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue