Flask表单问题仅以FALSE返回

时间:2019-01-24 10:05:28

标签: python flask flask-wtforms

很抱歉,我对此一无所知。我只是想用带有Python和Flask的Web开发来弄湿自己。

我正在尝试创建一个应用程序,该应用程序将从输入字段中获取一个字符串并将其转换为哈希并显示在输出页面上。但是,我不确定我的表格设置是否正确。

当我运行应用程序时,即使我输入随机字符串,它也只会返回一个假值并显示用户未输入任何内容。

app.py

from flask import Flask, render_template, request, url_for, flash, redirect
from message import MessageForm, validators, ValidationError
from cryptography.fernet import Fernet

app = Flask(__name__)
app.secret_key = 'development'

key = Fernet.generate_key()
f = Fernet(key)

@app.route('/', methods=['GET', 'POST'])
def home():
    form = MessageForm(request.form)

if request.method == 'POST' and form.validate_on_submit():
    user_message = form.message_field.data
    e = user_message.encode(encoding='UTF-8')
    token = f.encrypt(e)
    output = bytes.decode(token)
    return redirect('output.html', output=output)

return render_template('index.html', form=form)

if __name__ == ('__main__'):
    app.run(debug=True)

message.py

from wtforms import StringField, SubmitField, validators
from flask_wtf import FlaskForm
from wtforms.validators import DataRequired, ValidationError

class MessageForm(FlaskForm):
    message_field = StringField('Please enter the message you would like to 
    encrypt:', [validators.Required('Please enter a message!')])
    submit = SubmitField('Submit')

HTML表单

{% extends 'layout.html' %}

{% block body %}

{{ form.csrf_token }}

<br />
<form action="/" method="POST">
    <div class="form-group">
        <label style="font-weight: bold;">{{ form.message_field.label }}</label>
        <input type="text" class="form-control" name="message" id="message">
        <br />
        <button type="submit" class="btn btn-primary btn-lg btn-block">Encrypt Message</button>
    </div>
</form>

{% for message in form.message_field.errors %}
    <div class="alert alert-danger" role="alert">
        {{ message }}
    </div>
{% endfor %}   

{% endblock %}

我想要的是如果未输入任何内容,则使该应用程序返回错误,但如果输入了某些内容,则使该应用程序正确运行。

我希望这是有道理的,如前所述,请原谅我的无知。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

也许您可以尝试:

user_message = request.form.get("message")

代替

user_message = form.message_field.data

答案 1 :(得分:0)

在HTML表单中,尝试将csrf_token放在表单声明之后,如下所示:

<br />
<form action="/" method="POST">
    {{ form.csrf_token }}
    <div class="form-group">
        <label style="font-weight: bold;">{{ form.message_field.label }}</label>
        <input type="text" class="form-control" name="message" id="message">
        <br />
        <button type="submit" class="btn btn-primary btn-lg btn-block">Encrypt Message</button>
    </div>
</form>