From babe34d5ee6487882fe6c8e083326e2883dcb877 Mon Sep 17 00:00:00 2001 From: Brandon Rodriguez <brodriguez8774@gmail.com> Date: Sat, 2 Mar 2024 03:43:16 -0500 Subject: [PATCH] Correct API send view when json content is empty or invalid --- django_rest/test_app/views.py | 24 ++++++++++++++++++++---- django_v4/test_app/views.py | 24 ++++++++++++++++++++---- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/django_rest/test_app/views.py b/django_rest/test_app/views.py index 3e1ace1..9bab486 100644 --- a/django_rest/test_app/views.py +++ b/django_rest/test_app/views.py @@ -218,6 +218,7 @@ def api_send(request): if request.POST: # Is POST. Process data. print('Is POST submission.') + has_error = False data = request.POST form = ApiSendForm(data=data) @@ -230,7 +231,23 @@ def api_send(request): url = str(form.cleaned_data['url']).strip() get_params = str(form.cleaned_data.get('get_params', '')).strip() header_token = str(form.cleaned_data.get('header_token', '')).strip() - payload = json.loads(str(form.cleaned_data.get('payload', {})).strip()) + payload = str(form.cleaned_data.get('payload', '{}')).strip() + if len(payload) > 0: + try: + payload = json.loads(payload) + except json.decoder.JSONDecodeError: + has_error = True + payload = {} + form.add_error( + 'payload', + 'Unrecognized/invalid JSON syntax. Please double check syntax and try again.', + ) + else: + has_error = True + form.add_error( + 'payload', + 'Please provide JSON data to send. If API query is meant to be empty, use {}.', + ) # Determine url. if get_params and len(get_params) > 0: @@ -250,7 +267,6 @@ def api_send(request): data = json.dumps({'success': True}) # Generate API send object. - is_error = False try: response = requests.post( url, @@ -259,7 +275,7 @@ def api_send(request): timeout=5, ) except Exception as err: - is_error = True + has_error = True response_error['query_sent'] = False if not err.response else True response_error['message'] = str(err.message) if hasattr(err, 'message') else str(err) if 'Max retries exceeded with url' in response_error['message']: @@ -268,7 +284,7 @@ def api_send(request): 'Are you sure you entered the destination URL correctly?' ) - if not is_error: + if not has_error: # Handle for success state. response_success['status'] = response.status_code diff --git a/django_v4/test_app/views.py b/django_v4/test_app/views.py index b066c80..39d01d8 100644 --- a/django_v4/test_app/views.py +++ b/django_v4/test_app/views.py @@ -219,11 +219,28 @@ def api_send(request): # Handle for form submission. print('Submitted form data:') print('{0}'.format(form.cleaned_data)) + has_error = False url = str(form.cleaned_data['url']).strip() get_params = str(form.cleaned_data.get('get_params', '')).strip() header_token = str(form.cleaned_data.get('header_token', '')).strip() - payload = json.loads(str(form.cleaned_data.get('payload', {})).strip()) + payload = str(form.cleaned_data.get('payload', '{}')).strip() + if len(payload) > 0: + try: + has_error = True + payload = json.loads(payload) + except json.decoder.JSONDecodeError: + payload = {} + form.add_error( + 'payload', + 'Unrecognized/invalid JSON syntax. Please double check syntax and try again.', + ) + else: + has_error = True + form.add_error( + 'payload', + 'Please provide JSON data to send. If API query is meant to be empty, use {}.', + ) # Determine url. if get_params and len(get_params) > 0: @@ -243,7 +260,6 @@ def api_send(request): data = json.dumps({'success': True}) # Generate API send object. - is_error = False try: response = requests.post( url, @@ -252,7 +268,7 @@ def api_send(request): timeout=5, ) except Exception as err: - is_error = True + has_error = True response_error['query_sent'] = False if not err.response else True response_error['message'] = str(err.message) if hasattr(err, 'message') else str(err) if 'Max retries exceeded with url' in response_error['message']: @@ -261,7 +277,7 @@ def api_send(request): 'Are you sure you entered the destination URL correctly?' ) - if not is_error: + if not has_error: # Handle for success state. response_success['status'] = response.status_code -- GitLab