Просмотр исходного кода

Fixes #7109: Ensure human readability of exceptions raised during REST API requests

jeremystretch 4 лет назад
Родитель
Сommit
d2fe59ae8f
3 измененных файлов с 7 добавлено и 5 удалено
  1. 1 0
      docs/release-notes/version-3.0.md
  2. 4 4
      netbox/netbox/middleware.py
  3. 2 1
      netbox/utilities/api.py

+ 1 - 0
docs/release-notes/version-3.0.md

@@ -23,6 +23,7 @@
 * [#7101](https://github.com/netbox-community/netbox/issues/7101) - Enforce `MAX_PAGE_SIZE` for table and REST API pagination
 * [#7106](https://github.com/netbox-community/netbox/issues/7106) - Fix incorrect "Map It" button URL on a site's Physical Address field
 * [#7107](https://github.com/netbox-community/netbox/issues/7107) - Fix missing search button and search results in IP Address assignment "Assign IP" tab
+* [#7109](https://github.com/netbox-community/netbox/issues/7109) - Ensure human readability of exceptions raised during REST API requests
 
 ---
 

+ 4 - 4
netbox/netbox/middleware.py

@@ -113,6 +113,10 @@ class ExceptionHandlingMiddleware(object):
 
     def process_exception(self, request, exception):
 
+        # Handle exceptions that occur from REST API requests
+        if is_api_request(request):
+            return rest_api_server_error(request)
+
         # Don't catch exceptions when in debug mode
         if settings.DEBUG:
             return
@@ -121,10 +125,6 @@ class ExceptionHandlingMiddleware(object):
         if isinstance(exception, Http404):
             return
 
-        # Handle exceptions that occur from REST API requests
-        if is_api_request(request):
-            return rest_api_server_error(request)
-
         # Determine the type of exception. If it's a common issue, return a custom error page with instructions.
         custom_template = None
         if isinstance(exception, ProgrammingError):

+ 2 - 1
netbox/utilities/api.py

@@ -48,7 +48,8 @@ def is_api_request(request):
     Return True of the request is being made via the REST API.
     """
     api_path = reverse('api-root')
-    return request.path_info.startswith(api_path)
+
+    return request.path_info.startswith(api_path) and request.content_type == 'application/json'
 
 
 def get_view_name(view, suffix=None):