从传入的 Django 请求读取 JSON 数据并将数据显示为 HTML

问题描述 投票:0回答:1

我已经使用 Django 一个月了,我想创建一个注册表单,其中的数据来自 POST 请求(来自微型阅读器,它将向 Django 视图端点抛出 JSON 数据)。收到响应后,我需要获取 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 用于注册表格。

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 返回一些值,但我无法在 HTML 中显示 data_id 值。希望你能帮忙。谢谢!

django django-rest-framework django-views
1个回答
0
投票

所以你正在做的是, 首先,您收到一个 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})

© www.soinside.com 2019 - 2024. All rights reserved.