三方调用接口优化

This commit is contained in:
caoqianming 2022-04-11 10:41:26 +08:00
parent a3cb4bb34c
commit cff1ecbe00
11 changed files with 73 additions and 50 deletions

View File

@ -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())
]

View File

@ -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()

View File

@ -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):

1
apps/third/erros.py Normal file
View File

@ -0,0 +1 @@
TAPI_CODE_WRONG = {"code":"tapi_code_wrong", "detail":"三方接口请求标识有误"}

View File

@ -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)

16
apps/third/tapis.py Normal file
View File

@ -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 = {
}

View File

@ -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)

View File

@ -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()

View File

@ -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:

View File

@ -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配置

View File

@ -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')),