Чтение 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})