不是SelectField中的有效选项

2024-05-23 15:06:07 发布

您现在位置:Python中文网/ 问答频道 /正文

填完表格后我得到: 1

我在qaru和reddit看到了很多解决问题的方法,但我没有找到解决方法

这是我的档案:

网络应用程序.py

from flask import Flask, render_template, send_file, make_response
from forms import AAForm
from create_plot import ploter
import os

app = Flask(__name__)

SECRET_KEY = os.urandom(32)
app.config['SECRET_KEY'] = SECRET_KEY

@app.route('/', methods=['GET', 'POST']) 
def index():
    form = AAForm()
    if form.validate_on_submit():
        bytes_obj = ploter(form.uniprot_ids.data, form.the_dye.data)
        return send_file(bytes_obj, 
                         attachment_filename='plot.png', 
                         mimetype='image/png')
    return render_template('index.html', form=form)

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

表单.py

from flask_wtf import FlaskForm
from wtforms import StringField, SelectField, SubmitField
from wtforms.validators import DataRequired
from dyes_list import dyes

class AAForm(FlaskForm):
    uniprot_ids = StringField('Uniprot id', validators=[DataRequired()])
    the_dye = SelectField('Краситель', choices=dyes, validators=[DataRequired()])
    submit = SubmitField('Паехалиии!')

染料_列表.py

dyes = [
        (['K', 'R', 'H'], 'Кумасси бриллиантовый синий'),
        (['N', 'Q', 'C'], 'Окрашивание серебром'),
        (['K', 'R', 'H'], 'Амидо черный'),
        (['K', 'R', 'H'], 'Бромфеноловый синий'),
        (['K'], 'Пирогаллоловый красный'),
        (['K', 'R', 'H'], 'Sypro Ruby'),
        (['W'], 'Stain-free'),
        (['H', 'C', 'Q', 'N'], 'Zn-имидазольное негативное окрашивание'),
        ]

索引.html

<h1>Введите данные</h1>
    <form action="" method="post">
        {{ form.hidden_tag() }}
        <p>
            {{ form.uniprot_ids.label }}<br>
            {{ form.uniprot_ids(size=32) }}<br>
            {% for error in form.uniprot_ids.errors %}
            <span style="color: red;">[{{ error }}]</span>
            {% endfor %}
        </p>   
        <p>
            {{ form.the_dye.label }}<br>
            {{ form.the_dye(size=1) }}<br>
            {% for error in form.the_dye.errors %}
            <span style="color: red;">[{{ error }}]</span>
            {% endfor %}
        </p>
        <p>{{ form.submit() }}</p>
        {% block content %}{% endblock %}
    </form>

p.s.:这很奇怪,但是如果您将键和值反转到“染料”中,所有这些都会很好地工作(至少您不会遇到这个问题)。你知道吗


Tags: thefrompybrimportformappids
1条回答
网友
1楼 · 发布于 2024-05-23 15:06:07

这些值是从browser as strings返回的,它不会对字符串数组进行验证。你知道吗

取而代之的是将值作为CSV字符串,然后在表单验证后拆分为一个数组。你知道吗

dyes = [
        ('K,R,H', 'Кумасси бриллиантовый синий'),
        ('N,Q,C', 'Окрашивание серебром'),
        ('K,R,H', 'Амидо черный'),
        ('K,R,H', 'Бромфеноловый синий'),
        ('K', 'Пирогаллоловый красный'),
        ('K,R,H', 'Sypro Ruby'),
        ('W', 'Stain-free'),
        ('H,C,Q,N', 'Zn-имидазольное негативное окрашивание'),
        ]

@app.route('/', methods=['GET', 'POST'])
def index():
    form = AAForm()
    if form.validate_on_submit():
        _dyes = form.the_dye.data.split(',')
        bytes_obj = ploter(form.uniprot_ids.data, _dyes)
        return send_file(bytes_obj,
                         attachment_filename='plot.png',
                         mimetype='image/png')
    return render_template('index.html', form=form)

相关问题 更多 >