Преглед на файлове

项目中间件和序列化工具实现,设备分配接口实现

yf_fyh преди 3 години
родител
ревизия
c7b945bbef
променени са 6 файла, в които са добавени 109 реда и са изтрити 3 реда
  1. 16 0
      apps/SearchEquip/serializers.py
  2. 9 0
      apps/SearchEquip/urls.py
  3. 31 1
      apps/SearchEquip/views.py
  4. 49 0
      bigdataAPI/middleware.py
  5. 1 0
      bigdataAPI/settings.py
  6. 3 2
      bigdataAPI/urls.py

+ 16 - 0
apps/SearchEquip/serializers.py

@@ -0,0 +1,16 @@
+
+# coding:utf-8
+import datetime
+
+from rest_framework import serializers
+
+
+class SearchEquipSerializer(serializers.Serializer):
+    device_id = serializers.CharField(help_text="搜索设备号", required=True)
+    isfullId = serializers.IntegerField(help_text="是否完整搜索固定值1", required=False)
+
+    def validate_device_id(self, value):
+        if len(value) < 5:
+            raise serializers.ValidationError("设备号长度不能小于5位")
+        else:
+            return value

+ 9 - 0
apps/SearchEquip/urls.py

@@ -0,0 +1,9 @@
+from django.conf.urls import url
+
+from . import views
+
+app_name = 'apps.SearchEquip'
+
+urlpatterns = [
+    url(r'search', views.SearchEquip.as_view(), name='equip_search'),
+]

+ 31 - 1
apps/SearchEquip/views.py

@@ -1,3 +1,33 @@
-from django.shortcuts import render
+from rest_framework.generics import GenericAPIView
+from rest_framework.response import Response
+
+import json
+import requests
+
+from .serializers import SearchEquipSerializer
 
 # Create your views here.
+
+class SearchEquip(GenericAPIView):
+    serializer_class = SearchEquipSerializer
+    def post(self, request):
+        serializer = self.get_serializer(data=request.data)
+        serializer.is_valid(raise_exception=True)
+        request_data = serializer.validated_data
+        d_id = request_data.get("device_id")
+        if request_data.get("isfullId"):
+            bigdata_res = requests.post("http://8.136.98.49:8002/search/equip",data={"device_id":d_id,"isfullId":"1"})
+            siqing_res = requests.post("http://127.0.0.1:8001/search/equip",data={"device_id":d_id,"isfullId":"1"})
+        else:
+            bigdata_res = requests.post("http://8.136.98.49:8002/search/equip",data={"device_id":d_id})
+            siqing_res = requests.post("http://127.0.0.1:8001/search/equip",data={"device_id":d_id})
+        
+        django_data = json.loads(bigdata_res.content.decode()).get("data",[])
+        siqing_data = json.loads(siqing_res.content.decode()).get("data",[])
+        data = []
+        data.extend(django_data)
+        data.extend(siqing_data)
+
+        data = sorted(data, key=lambda e: e.__getitem__('uptime'), reverse=True)
+        data = sorted(data, key=lambda e: e.__getitem__('device_id'), reverse=True)
+        return Response(data)

+ 49 - 0
bigdataAPI/middleware.py

@@ -0,0 +1,49 @@
+from django.utils.deprecation import MiddlewareMixin
+from rest_framework.exceptions import ErrorDetail
+from django.http import JsonResponse
+
+
+class ResponseMiddleware(MiddlewareMixin):
+    def process_response(self, request, response):
+        """在每个响应返回给客户端之前自动调用"""
+        if request.path.startswith('/equipmanager/'):
+            # if isinstance(response, JsonResponse):
+            #     return response
+            status_code = response.status_code
+            rsp_data = response.data
+            if status_code == 200:
+                response = JsonResponse(
+                    status=200,
+                    data={"code":status_code,"msg":"success","data":rsp_data}
+                )
+            elif status_code == 400:
+                if isinstance(rsp_data, dict):
+                    try:
+                        for key, value in rsp_data.items():
+                            print(key, value, type(value[0]))
+                            if value and isinstance(value, list):
+                                value = value[0]
+                                if isinstance(value, ErrorDetail):
+                                    value = f"{key} {value}"
+                            response = JsonResponse(
+                                status=200, 
+                                data={'msg': str(value),'code': status_code,'data': ""}
+                            )
+                            break
+                    except Exception as e:
+                        pass
+            elif status_code == 404:
+                response = JsonResponse(
+                    status=200,
+                    data={"code":status_code,"msg":"请求接口不存在","data":""}
+                )
+        return response
+
+
+    def process_exception(self, request, exception):
+        data = {
+            'msg': str(exception),
+            'code': 500,
+            'data': ""
+        }
+        return JsonResponse(status=500, data=data)

+ 1 - 0
bigdataAPI/settings.py

@@ -49,6 +49,7 @@ MIDDLEWARE = [
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
+    'bigdataAPI.middleware.ResponseMiddleware'
 ]
 
 ROOT_URLCONF = 'bigdataAPI.urls'

+ 3 - 2
bigdataAPI/urls.py

@@ -14,8 +14,9 @@ Including another URLconf
     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
 """
 from django.contrib import admin
-from django.urls import path
+from django.urls import path,include
 
 urlpatterns = [
-    path('admin/', admin.site.urls),
+    # path('admin/', admin.site.urls),
+    path('equipmanager/',include('apps.SearchEquip.urls'))
 ]