Django - JSONDecodeError при обработки request.body

мне необходимо из формы передать много данных. Для этого при помощи JS я упаковал их в JSON-форма. В console.log все данные выглядят так как нужно. Вот

$('#generatorsData').submit(function() {
            event.preventDefault();
    
            function getTableData(table, keys) {
                const rows = table.querySelectorAll('tbody tr');
    
                return Array.from(rows).slice(1).map(row => {
                    const columns = row.querySelectorAll('td');
                
                  return keys
                    .reduce((acc, key, index) => {
                            const value = columns[index] && columns[index].textContent;
    
                            return {...acc, [key]: value};
                        }, {})
                })
            }
    
            var percent_4_5_data = getTableData( $('#percent-4-5')[0], ['subject', 'year', 'all_count', 'stud_5', 'stud_4', 'percent'] );
const data = new FormData($(this)[0]);
            const value = Object.fromEntries(data.entries());
            var tables = {
                percent_4_5_table: percent_4_5_data
            }
            var obj = $.extend({}, value, tables);
            const json_values = JSON.stringify(obj, null, 2);
            console.log(json_values);
            
            var response;
    
            if(response){
                response.abort();
            }
    
            response = $.ajax({
                url: {% url 'generate' %},
                data: json_values,
                type: 'GET',
                contentType: 'application/json; charset=utf-8',
                success: function(){
                    console.log('success');
                },
                error: function(){
                    console.log('failure');
                }
            });
});

В tables будет больше таблиц, данные которых будут сформированы с помощью getTableData
views.py:

from __future__ import print_function
from email import message
import json
from django.shortcuts import render, redirect, HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.signals import user_logged_in, user_logged_out
from django.contrib.staticfiles import finders
from django.contrib import messages
from django.core.files.storage import FileSystemStorage
from django.views.decorators.csrf import csrf_protect
from .portfolio import generate


user_logged = False
# Create your views here.
def index(request):
    list(messages.get_messages(request))
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            return redirect('generator')
        else:
            messages.error(request, 'Неправильный логин или пароль')
            return redirect('index')
    else:
        return render(request , 'main/index.html')

def record_user_logged_in(sender, user, request, **kwargs):
    global user_logged
    user_logged = True

def record_user_logged_out(sender, user, request, **kwargs):
    global user_logged
    user_logged = False

user_logged_in.connect(record_user_logged_in)
user_logged_out.connect(record_user_logged_out)

def logout_user(request):
    logout(request)

    return redirect('index')

def is_ajax(request):
    return request.META.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest'

def generator(request):
    if user_logged:

        """ upload = request.FILES['diplom_image']
        fss = FileSystemStorage()
        file = fss.save(upload.name, upload)
        file_url = fss.url(file)
        doc_path = finders.find('media/docs/template.docx') """
            
        return render(request, 'main/generator.html')
    else:
        return redirect('index')
@csrf_protect
def generate(request):
    if is_ajax(request):
        req = json.loads(request.body.decode("utf-8"))
    else:
        return HttpResponse('No Data')

urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('generator/', views.generator, name='generator'),
    path('generate/', views.generate, name='generate'),
    path('logout', views.logout_user, name='logout')
]

Traceback:

Internal Server Error: /generate/
Traceback (most recent call last):
  File "C:\Users\EmperorBeliver\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\exception.py", line 55, in inner
    response = get_response(request)
  File "C:\Users\EmperorBeliver\AppData\Local\Programs\Python\Python310\lib\site-packages\django\core\handlers\base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\EmperorBeliver\AppData\Local\Programs\Python\Python310\lib\site-packages\django\utils\decorators.py", line 133, in _wrapped_view
    response = view_func(request, *args, **kwargs)
  File "C:\OpenServer\django test\mysite\main\views.py", line 67, in generate
    req = json.loads(request.body.decode("utf-8"))
  File "C:\Users\EmperorBeliver\AppData\Local\Programs\Python\Python310\lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:\Users\EmperorBeliver\AppData\Local\Programs\Python\Python310\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\EmperorBeliver\AppData\Local\Programs\Python\Python310\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
[30/May/2022 12:04:17] "GET /generate/?{%20%20%22csrfmiddlewaretoken%22:%20%22Gv0fCUS2lGSwZLl4NVqsJw77VuGqL9DjKW8kjHVLOeJkzVm4HN2REYMokYE6aCeh%22,%20%20%22fio%22:%20%22%22,%20%20%22short_fio%22:%20%22%22,%20%20%22teacher_type%22:%20%22%22,%20%20%22year%22:%20%22%22,%20%20%22date_birth%22:%20%22%22,%20%20%22hire_date%22:%20%22%22,%20%20%22teacher_exp%22:%20%22%22,%20%20%22cur_post_exp%22:%20%22%22,%20%20%22cur_comp_exp%22:%20%22%22,%20%20%22education%22:%20%22%22,%20%20%22academic_degree%22:%20%22%22,%20%20%22additional_prof_info%22:%20%22%22,%20%20%22last_qualiton_certification%22:%20%22%22,%20%20%22category_num%22:%20%22%22,%20%20%22author_courses%22:%20%22%22,%20%20%22extra_activites%22:%20%22%22,%20%20%22acitivity_in_olympic%22:%20%22%22,%20%20%22olympic_winner_exists%22:%20%22%22,%20%20%22awarded_exists%22:%20%22%22,%20%20%22paric_dev_org%22:%20%22%22,%20%20%22self_improve_activ%22:%20%22%22,%20%20%22prov_assis%22:%20%22%22,%20%20%22using_modern_tech%22:%20%22%22,%20%20%22implamin_individ_program%22:%20%22%22,%20%20%22use_ikt_tech%22:%20%22%22,%20%20%22work_exp_other_level%22:%20%22%22,%20%20%22screen_home%22:%20%22%22,%20%20%22acc_screen%22:%20%22%22,%20%20%22involved_other_lvl%22:%20%22%22,%20%20%22exec_master%22:%20%22%22,%20%20%22perf_seminar%22:%20%22%22,%20%20%22conduct_traning_session%22:%20%22%22,%20%20%22expert_commision%22:%20%22%22,%20%20%22avail_research_activ%22:%20%22%22,%20%20%22perct_year_1%22:%20%22%22,%20%20%22perct_year_2%22:%20%22%22,%20%20%22perct_year_3%22:%20%22%22,%20%20%22perct_1%22:%20%22%22,%20%20%22perct_2%22:%20%22%22,%20%20%22perct_3%22:%20%22%22,%20%20%22percent_description%22:%20%22%22,%20%20%22dynamic_description%22:%20%22%22,%20%20%22ratio_description%22:%20%22%22,%20%20%22courses_description%22:%20%22%22,%20%20%22fio3%22:%20%22%22,%20%20%22year3%22:%20%22%22,%20%20%22classes3%22:%20%22%22,%20%20%22program_list%22:%20%22%22,%20%20%22order_date%22:%20%22%22,%20%20%22order_num%22:%20%22%22,%20%20%22protocol_num%22:%20%22%22,%20%20%22protocol_date%22:%20%22%22,%20%20%22program_name%22:%20%22%22,%20%20%22program_subject%22:%20%22%22,%20%20%22program_object%22:%20%22%22,%20%20%22program_hours%22:%20%22%22,%20%20%22year4%22:%20%22%22,%20%20%22subject%22:%20%22%22,%20%20%22student_subject%22:%20%22%22,%20%20%22subject_year%22:%20%22%22,%20%20%22subject_name%22:%20%22%22,%20%20%22subject_start_perc%22:%20%22%22,%20%20%22subject_end_perc%22:%20%22%22,%20%20%22qual_fperc%22:%20%22%22,%20%20%22qual_enqual%22:%20%22%22,%20%20%22qual_fclass%22:%20%22%22,%20%20%22qual_sclass%22:%20%22%22,%20%20%22qual_sec_fperc%22:%20%22%22,%20%20%22qual_sec_enperc%22:%20%22%22,%20%20%22stud_perc%22:%20%22%22,%20%20%22fyear%22:%20%22%22,%20%20%22syear%22:%20%22%22,%20%20%22fio_get4%22:%20%22%22,%20%20%22year2%22:%20%22%22,%20%20%22some_class%22:%20%22%22,%20%20%22some_class_count%22:%20%22%22,%20%20%22alpha_count%22:%20%22%22,%20%20%22prefer_count%22:%20%22%22,%20%20%22accept_count%22:%20%22%22,%20%20%22poor_count%22:%20%22%22,%20%20%22lead_class%22:%20%22%22,%20%20%22leader_name%22:%20%22%22,%20%20%22diag_year%22:%20%22%22,%20%20%22special_stud_names%22:%20%22%22,%20%20%22special_stud_ex%22:%20%22%22,%20%20%22special_olympic%22:%20%22%22,%20%20%22spravka_date%22:%20%22%22,%20%20%22get_town_activity%22:%20%22%22,%20%20%22trainer_list%22:%20%22%22,%20%20%22mod_program_list%22:%20%22%22,%20%20%22passport_image%22:%20{},%20%20%22labor_image%22:%20{},%20%20%22diplom_image%22:%20{},%20%20%22load_image%22:%20{},%20%20%22qual_image%22:%20{},%20%20%22attectat_image%22:%20{},%20%20%22add_program_image%22:%20{},%20%20%22olympic_winner_image%22:%20{},%20%20%22qual_system_image%22:%20{},%20%20%22order_image%22:%20{},%20%20%22spravka_image%22:%20{},%20%20%22screen_home_image%22:%20{},%20%20%22acc_screen_image%22:%20{},%20%20%22percent_4_5_table%22:%20[%20%20%20%20{%20%20%20%20%20%20%22subject%22:%20%22ALDFI%22,%20%20%20%20%20%20%22year%22:%20%222902%22,%20%20%20%20%20%20%22all_count%22:%20%2260%22,%20%20%20%20%20%20%22stud_5%22:%20%2220%22,%20%20%20%20%20%20%22stud_4%22:%20%2220%22,%20%20%20%20%20%20%22percent%22:%20%2266.67%%22%20%20%20%20}%20%20]} HTTP/1.1" 500 114371 
Вернуться на верх