Чтение JSON-данных из входящего запроса Django и отображение данных в HTML

Я месяц как использую Django и хочу создать форму регистрации, где данные будут поступать из POST-запроса (от микроридера, который будет бросать JSON-данные, идущие в конечную точку Django View). Получив ответ, я должен получить data_id, а пользователь должен ввести имя и отдел, и отобразить это в виде формы в HTML, которая будет отправлена в базу данных после отправки. Однако у меня возникают трудности с созданием этой штуки в views.py и его шаблоне.

Вот брошенный JSON-ответ: {"station":"XXXXXXXX","type":"TYPE-XXX","data_id":"9198491920"}

Это views.py

@csrf_exempt
def registration_form(request):
    if request.method == "POST":
        # Process the JSON data
        json_data = json.loads(request.body)
        dataid = json_data.get('data_id')

        # Initialize the form with the received dataid
        form = RegistrationForm(initial={'data_id': dataid)
        
        if form.is_valid():
            name = form.cleaned_data['name']
            department = form.cleaned_data['department']

            return render(request,'registration.html',{'form':form})
    else:
        # If GET request, initialize form
        form = RegistrationForm()
        
        return render(request, 'registration.html', {'form': form})

Это мой registration.html. Хотя, вы можете не ожидать некоторых вещей в моем HTML, так как я пробую все формы отображения, но успеха нет.

{% extends 'base.html' %}
{% load static %}
{% load widget_tweaks %}

{% block content %}

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit">
</form>

{% endblock content %}

Это мой forms.py для RegistrationForm.

class RegistrationForm(forms.Form):
    dataid = forms.CharField(label='Data ID', max_length=100)
    name = forms.CharField(label='Name', max_length=100)
    department = forms.CharField(label='Department', max_length=100)

Я не уверен, где я упускаю, поскольку формы возвращают некоторые значения из JSON, но я не могу отобразить значение data_id в HTML. Надеюсь, вы сможете помочь. Спасибо!

Итак, вы делаете следующее, Сначала вы получаете POST-запрос, который представляет собой data-id. Поэтому после инициализации формы данными вы проверяете, является ли форма действительной. Пользователь не отправил форму, поэтому форма будет недействительной, и form.is_valid вернет False.

Вы можете добавить <input type="hidden" name="mode" value="get-dataid">, чтобы отличить два POST-запроса.

@csrf_exempt
def registration_form(request):
    if request.method == "POST":
        if request.POST.get("mode") == "get-dataid":
            # Process the JSON data
            json_data = json.loads(request.body)
            dataid = json_data.get('data_id')

            # Initialize the form with the received dataid
            form = RegistrationForm(initial={'data_id': dataid})
        else:
            # If form is not submitted, it will be invalid
            form = RegistrationForm(request.POST)
            
            if form.is_valid():
                name = form.cleaned_data['name']
                department = form.cleaned_data['department']

        return render(request, 'registration.html', {'form': form})
    else:
        # If GET request, initialize form
        form = RegistrationForm()
        
        return render(request, 'registration.html', {'form': form})

Вернуться на верх