|
9 | 9 | an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the |
10 | 10 | specific language governing permissions and limitations under the License. |
11 | 11 | """ |
12 | | - |
| 12 | +import json |
13 | 13 | import logging |
14 | 14 | import re |
15 | 15 |
|
@@ -41,6 +41,12 @@ class PluginAPIDispatchParamsSerializer(serializers.Serializer): |
41 | 41 | method = serializers.CharField(help_text="调用方法", required=True) |
42 | 42 | username = serializers.CharField(help_text="用户名", required=True) |
43 | 43 | data = serializers.DictField(help_text="接口数据", required=False, default={}) |
| 44 | + dumped_data = serializers.CharField(help_text="json dumps后的接口数据", required=False) |
| 45 | + |
| 46 | + def validate(self, values): |
| 47 | + if values.get("dumped_data"): |
| 48 | + values["data"].update(json.loads(values["dumped_data"])) |
| 49 | + return values |
44 | 50 |
|
45 | 51 | def validate_url(self, value): |
46 | 52 | if not value.startswith("/bk_plugin/plugin_api/"): |
@@ -105,13 +111,20 @@ def post(self, request): |
105 | 111 | # get apigw jwt info |
106 | 112 | custom_headers["HTTP_X_BKAPI_JWT"] = request.META.get("HTTP_X_BKAPI_JWT", "") |
107 | 113 |
|
108 | | - fake_request = getattr(RequestFactory(), request_data["method"].lower())( |
109 | | - path=request_data["url"], content_type=request.content_type, data=request_data["data"], **custom_headers |
110 | | - ) |
111 | | - |
112 | | - # inject upload FILES |
113 | | - for f in request.FILES: |
114 | | - fake_request.FILES[f] = request.FILES[f] |
| 114 | + if request.FILES: |
| 115 | + fake_request = getattr(RequestFactory(), request_data["method"].lower())( |
| 116 | + path=request_data["url"], data=request_data["data"], **custom_headers |
| 117 | + ) |
| 118 | + # inject upload FILES |
| 119 | + for f in request.FILES: |
| 120 | + fake_request.FILES[f] = request.FILES[f] |
| 121 | + else: |
| 122 | + fake_request = getattr(RequestFactory(), request_data["method"].lower())( |
| 123 | + path=request_data["url"], |
| 124 | + content_type=request.content_type, |
| 125 | + data=request_data["data"], |
| 126 | + **custom_headers |
| 127 | + ) |
115 | 128 |
|
116 | 129 | # inject APIGW jwt |
117 | 130 | fake_request.jwt = request.jwt |
|
0 commit comments