我已经使用 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 值。希望你能帮忙。谢谢!
所以你正在做的是, 首先,您收到一个 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})