Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么';我的WTForms JSON表单更新是否正确?_Python_Flask_Wtforms_Wtforms Json - Fatal编程技术网

Python 为什么';我的WTForms JSON表单更新是否正确?

Python 为什么';我的WTForms JSON表单更新是否正确?,python,flask,wtforms,wtforms-json,Python,Flask,Wtforms,Wtforms Json,我正在开发一个web页面,该页面读取JSON并使用WTForms JSON以表单形式呈现。提交表单时,form.data不会更新。为什么这不起作用 views.py: from flask import render_template, flash, redirect, request from app import app from .forms import PolicyForm import json import urllib2 @app.route('/policy', method

我正在开发一个web页面,该页面读取JSON并使用WTForms JSON以表单形式呈现。提交表单时,
form.data
不会更新。为什么这不起作用

views.py

from flask import render_template, flash, redirect, request
from app import app
from .forms import PolicyForm
import json
import urllib2

@app.route('/policy', methods=['GET', 'POST'])
def policy():
    url = 'http://dcdemoappsrv1:8081/direct/policy?policyNumber=000000005&everything=true&discounts=true&coverages=true&vehicles=true&nonDescribedVehicle=true&applicant=true&drivers=true&namedInsureds=true&additionalListedInsureds=true'
    response = urllib2.urlopen(url).read()
    pol_json = json.loads(response) 

    form = PolicyForm.from_json(pol_json)

    if form.validate_on_submit():
        flash('data=%s' % str(form.data))
        flash('form pol no =%s' % str(form.policyNumber.data))
        return redirect('/index')

    flash('inital data=%s' % str(form.data))
    return render_template('policy.html',  title='Policy Form', form=form)
from wtforms import Form
from wtforms.fields import BooleanField, StringField, TextField, FloatField, FormField, IntegerField, DateField, SubmitField
from wtforms.validators import DataRequired, InputRequired

class Address(Form):
    street = TextField('Street', validators=[InputRequired()])
    street2 = TextField('Street2')
    city = TextField('City', validators=[InputRequired()])
    state = TextField('State', validators=[InputRequired()])
    zip = TextField('Zip', validators=[InputRequired()])
    county = TextField('County', validators=[InputRequired()])
    latitude = FloatField('Latitude')
    longitude = FloatField('Longitude')
    id = StringField('ID')

class Applicant(Form):
    firstName = TextField('First Name', validators=[InputRequired()])
    lastName = TextField('Last Name', validators=[InputRequired()])
    birthDate = DateField('Birth Date', validators=[InputRequired()])
    age = IntegerField('Age', validators=[InputRequired()])
    id = StringField('ID')

class PolicyForm(Form):
    policyNumber = TextField('Policy Number')
    applicant = FormField(Applicant, label='Applicant')
    address = FormField(Address, label='Address')
forms.py

from flask import render_template, flash, redirect, request
from app import app
from .forms import PolicyForm
import json
import urllib2

@app.route('/policy', methods=['GET', 'POST'])
def policy():
    url = 'http://dcdemoappsrv1:8081/direct/policy?policyNumber=000000005&everything=true&discounts=true&coverages=true&vehicles=true&nonDescribedVehicle=true&applicant=true&drivers=true&namedInsureds=true&additionalListedInsureds=true'
    response = urllib2.urlopen(url).read()
    pol_json = json.loads(response) 

    form = PolicyForm.from_json(pol_json)

    if form.validate_on_submit():
        flash('data=%s' % str(form.data))
        flash('form pol no =%s' % str(form.policyNumber.data))
        return redirect('/index')

    flash('inital data=%s' % str(form.data))
    return render_template('policy.html',  title='Policy Form', form=form)
from wtforms import Form
from wtforms.fields import BooleanField, StringField, TextField, FloatField, FormField, IntegerField, DateField, SubmitField
from wtforms.validators import DataRequired, InputRequired

class Address(Form):
    street = TextField('Street', validators=[InputRequired()])
    street2 = TextField('Street2')
    city = TextField('City', validators=[InputRequired()])
    state = TextField('State', validators=[InputRequired()])
    zip = TextField('Zip', validators=[InputRequired()])
    county = TextField('County', validators=[InputRequired()])
    latitude = FloatField('Latitude')
    longitude = FloatField('Longitude')
    id = StringField('ID')

class Applicant(Form):
    firstName = TextField('First Name', validators=[InputRequired()])
    lastName = TextField('Last Name', validators=[InputRequired()])
    birthDate = DateField('Birth Date', validators=[InputRequired()])
    age = IntegerField('Age', validators=[InputRequired()])
    id = StringField('ID')

class PolicyForm(Form):
    policyNumber = TextField('Policy Number')
    applicant = FormField(Applicant, label='Applicant')
    address = FormField(Address, label='Address')

{%extends“base.html”%}
{%block content%}
政策
{%import“\uu formhelpers.html”作为表单%}
{{forms.render(form)}

{%endblock%}
formhelpers.html

{%macro render(form)%}
{如果field.type不在[“HiddenField”,“CSRFTokenField”]%中,则表单中的字段为%
{{field.label}
{{field}}
{%if field.errors%}
    {%字段中有错误。错误%}
  • {{error}}
  • {%endfor%}
{%endif%} {%endfor%} {{form.hidden_tag()}} {%endmacro%}
您总是用远程JSON数据填充表单。您只应在首次提交表单时执行此操作,而不应在处理提交的数据时执行此操作

# ...
if not form.is_submitted():
    data = json.load(urllib2.urlopen(url))
    form = PolicyForm.from_json(data)
else:
    form = PolicyForm()  # will populate from submitted data

if form.validate_on_submit():
# ...