在单个页面和单个视图中烧瓶多个 Wtforms

时间:2021-01-28 04:03:31

标签: python flask flask-wtforms

我正在使用使用两种形式的烧瓶。主页中的一种形式和引导模式中的另一种形式。

HTML-

<form method="POST" action="" enctype="multipart/form-data">
    {{ form.hidden_tag() }}
    <fieldset class="form-group">
        <div class="form-group">
          <div class="dropdown">
              <button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                {{ form.sn.label(class="form-control-label") }}
              </button>
              <div class="dropdown-menu" aria-labelledby="dropdownMenuButton" id="ddb">
                {% for i in form.sn%}
                <p class="dropdown-item">{{ i }}{{ i.label }}</p>
                {% endfor %}
              </div>
             <span id="dst"></span>
          </div>
        </div>

        <div class="form-group">
            {{ form.rd.label(class="form-control-label") }}
                {{ form.rd(class="form-control form-control-lg") }}
        </div>
    </fieldset>
    <div class="form-group">
        {{ form.submit1(class="btn btn-outline-info") }}
    </div>
</form>
</div>
<!-- Modal -->
<div class="modal fade"  id="exampleModal" tabindex="-1" role="dialog" aria- 
labelledby="exampleModalCenterTitle" aria-hidden="true">
 <div class="modal-dialog modal-dialog-centered" role="document">
   <div class="modal-content">
    <div class="modal-header">
    <h5 class="modal-title" id="exampleModalCenterTitle">Create Study Name</h5>
    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
  <div class="modal-body">
        <form method="POST" action="" enctype="multipart/form-data">
        {{ form1.hidden_tag() }}
            <fieldset class="form-group">
                <div class="form-group">
                    {{ form1.sn.label(class="form-control-label") }}

                    {% if form1.sn.errors %}
                        {{ form1.sn(class="form-control form-control-lg is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form1.studynames.errors %}
                                <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                    {% else %}
                        {{ form1.sn(class="form-control form-control-lg") }}
                    {% endif %}
                </div>
            </fieldset>
            <div class="form-group">
                {{ form1.submit2(class="btn btn-outline-info") }}
            </div>
        </form>
      </div>
    </div>
  </div>
</div>

烧瓶中的forms.py

class studyForms(FlaskForm):
    studynames = StringField('Study Name')
    submit2 = SubmitField('Add')


class Raw(FlaskForm):
    choice = [value[0] for value in db.session.query(stt.snn)]
    print(choice)
    choices = []
    for i in choice:
        choices.append((i,i))
    print(choices)
    sn= checkbox("Study Name", choices=choices, validators=[DataRequired()])
    rd= FileField('Upload File', validators=[DataRequired()])
    submit1 = SubmitField('Submit')

    @classmethod
    def new(cls):
        # Instantiate the form
        form = cls()
        choice = [value[0] for value in db.session.query(stt.snn)]
        print(choice)
        choices = []
        for i in choice:
            choices.append((i,i))
        print(choices)

        # Update the choices for the agency field
        form.sn.choices = choices
        return form

routes.py

@app.route("/raw", methods=['GET', 'POST'])
@login_required(role="enduser")
def raw():
    form = Raw()
    if form.submit1.data and form.validate_on_submit():
        try:
            os.mkdir(os.path.join(os.getcwd(), 'ui', 'static', 'users', current_user.email, form.sn.data[0]))
        except Exception as e:
            print(e)
            print('study name is already created for the user')
        try:
            os.mkdir(os.path.join(os.getcwd(), 'ui', 'static', 'users', current_user.email, form.sn.data[0], 'RAW'))
        except:
            print('RAW is created already already for the user')
        f = form.rd.data
        print('f.fil', f.filename)
        filename = secure_filename(f.filename)
        print(os.path.isdir(os.path.join(os.getcwd(), 'ui', 'static', 'users', current_user.email, form.sn.data[0], 'RAW')))
        dt = datetime.datetime.now()
        filename = filename.split('.')[0]+"_dt_"+str(dt.day)+"_"+str(dt.month)+"_"+str(dt.year)+"_"+str(dt.hour)+"_"+str(dt.minute)+"_"+str(dt.second)+"."+filename.split('.')[1]
        print(filename)
        f.save(os.path.join(os.getcwd(), 'ui', 'static', 'users', current_user.email, form.sn.data[0], 'RAW', filename))
        flash('Your Info is Saved', 'success')
        return redirect(url_for('raw'))

    form1 = studyForms()
    if form1.submit2.data and form1.validate_on_submit():
        print(form1.sn.data)
        sn = study_names.query.filter_by(study_name=form1.sn.data).first()
        print(sn)
        if sn == None:
            user_info1 = study_names(
                    study_name=form1.sn.data,
                )
            db.session.add(user_info1)
            db.session.commit()
        else:
            print('study name is already registered')

    choice = [value[0] for value in db.session.query(stt.snn)]
    print(choice)
    choices = []
    for i in choice:
        choices.append((i,i))
    print(choices)

    form = Raw.new()
    home_links = [
                Markup("""<a class="nav-item nav-link" href="/raw" style=""><b>Upload RAW Data</b></a>"""),
                Markup("""<a class="nav-item nav-link" href="/adam">Generate ADAM</a>"""),
                Markup("""<a class="nav-item nav-link" data-toggle="modal" data-target="#exampleModal">
                    Add Study Name</a>"""),
                Markup('''<a class="nav-item nav-link" href="/logout">Logout</a>'''),                    
    ]
    return render_template('raw.html', form=form, form1=form1, home_links=home_links, role='enduser', title="Client Login", address="Client")

当我提交 form1 时,它运行良好,但当我提交 form 时,有时它会转到 form1.validate_on_submit() 或什么都不做,而不是执行 form.validate_on_submit()。

我浏览了所有博客,因为他们说添加 {{form.hidden_​​tag}} 或 {{form.csrf_tken}}。

我什至有两个 csrf_token 在 html 中具有相同的 id,我也尝试在 html 中更改第一个表单的 csrf_token id,例如 - {{form.csrf_token(id="some text")}}

但是,没有任何作用...

这是什么问题,我一直在努力解决,帮帮我,谢谢

0 个答案:

没有答案