填写表格后,我得到: 1
在Qaru,reddit中,我看到了很多解决该问题的方法,但找不到解决方法
所以,这是我的文件:
webapp.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)
forms.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('Паехалиии!')
dyes_list.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-имидазольное негативное окрашивание'),
]
和 index.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。:很奇怪,但是如果您将键和值倒置到“染料”中,那么一切都会很好(至少不会出现问题)。
答案 0 :(得分:0)
这些值是从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)