0

路线

from flask import Flask, render_template, request, flash, redirect
from flask_wtf import FlaskForm
# from flask.ext.sqlalchemy import SQLAlchemy
import logging
from logging import Formatter, FileHandler
from forms import *
import os

@app.route('/wallthickness')
def wallthickness():
    form = WallThicknessCalc()
    return render_template('forms/wallthickness.html', form = form)
    
@app.route('/result', methods = ['POST','GET'])
def result():
    form = WallThicknessCalc()
    diameter = ''
    diameter = request.form.get('PipeOD')
    if request.method == 'POST':
        return render_template ('pages/result.html', form = form, diameter = diameter)

这是表单代码所在的 python 文件。

from flask_wtf import Form
from wtforms import TextField, PasswordField, FloatField, SubmitField
from wtforms.validators import DataRequired, EqualTo, Length


class WallThicknessCalc(Form):
    PipeOD = TextField('Pipe Outer Diameter', 
                        validators=[DataRequired()]
    )
    DesignPressure = TextField(
        'Design Pressure', validators=[DataRequired()]
    )
    DesignFactor = TextField(
        'Design Factor', validators=[DataRequired()]
    )
    SMYS = TextField(
        'Specified Minimum Yield Stress', validators=[DataRequired()]
    )
    Calculate = SubmitField(
        'Calculate', validators=[DataRequired()]
    )

这是带有输入字段的表单。

{% extends 'layouts/main.html' %}
{% block title %}{% endblock %}
{% block content %}
<div class="container-fluid">
    <div class="row">
        <div class="col-md-6">
            <form action="/result" method=[POST] class="form-group">
              <fieldset>
              <div>
              {{ form.PipeOD.label(class="form-control-label") }}
              {{ form.PipeOD(class = "form-control form-control-lg")}}
              <br>
              {{ form.DesignPressure.label(class="form-control-label") }}
              {{ form.DesignPressure(class = "form-control form-control-lg")}}
              <br>
              {{ form.DesignFactor.label(class="form-control-label") }}
              {{ form.DesignFactor(class = "form-control form-control-lg")}}
              <br>
              {{ form.SMYS.label(class="form-control-label") }}          
              {{ form.SMYS(class = "form-control form-control-lg")}}
              <br>
              {{ form.Calculate(class = "form-control form-control-lgbtn btn-primary")}}
              </div>
              </fieldset>
                
            </form>
        </div>
            
    </div>
{% endblock %}

我试图在这里显示结果:

{% extends 'layouts/main.html' %}
{% block title %}{% endblock %}
{% block content %}
<div class="container-fluid">
    <div class="row">
        <div class="col-md-6">
            <h4>The mininmum wall thickness is {{ diameter }} mm</h4>
        </div>
    </div>
{% endblock %}

我无法检索输入到表单字段中的值。我收到错误 TypeError TypeError:视图函数没有返回有效响应。该函数要么返回 None ,要么在没有 return 语句的情况下结束。

4

1 回答 1

0

可能让你绊倒的是CSRF Protection。特别是,缺乏

{{ form.csrf_token }}

以你的形式。

此外,您是子类Form化,不赞成使用FlaskForm,但这是不相关的。这也是推荐的做法

if form.validate_on_submit():
    ...
于 2020-07-19T17:13:07.283 回答