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