flask_wtf制作有多个按钮的复杂表单实例

1、定义表单,forms.py

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField,TextAreaField,SelectField,SelectMultipleField
from wtforms.validators import DataRequired, EqualTo, Length
from models import Locals


Select_LIST={}
Select_LIST ['sum'] = {'10个':10,'20个':20,'50个':50}#定义字典给select作选项


class inputForm(FlaskForm):
#从数据库中取列表,给select作选项
locals = Locals.query.all()
Selectlocal=[local.local for local in locals]
#单行文本框
newstitle = StringField('标题', validators=[DataRequired(), Length(1,50)],render_kw={'class':'form-control'})
stopwords = StringField('停用词', validators=[DataRequired(), Length(0, 100)], render_kw={'class': 'form-control'})
#多行文本框
newscontent = TextAreaField('正文', render_kw={'class':'form-control','style':'height:100px'})
#下拉列表框
sumselect=SelectField('提取关键词数',choices = Select_LIST['sum'],description ='请选择要提取的词数',render_kw={'class':'form-control'})
localselect=SelectField('所属区域',choices = Selectlocal,description ='请选择所属区域',render_kw={'class':'form-control'})
#按钮
getwords = SubmitField('提取',render_kw={'class':'form-control'}) # 保存按钮
save = SubmitField('保存',render_kw={'class':'form-control'}) # 发布按钮
#多行选择框
selectwords=SelectMultipleField('提取结果',choices=[],render_kw={'class':'form-control'})

2、制作html,bootstrap框架。temp.html

<form action="" method="post">
{{ form.csrf_token }}
<div class="form-container">

<div class="form-group">
{{ form.sumselect.label }}{{ form.sumselect }}
</div>
<div class="form-group">
{{ form.localselect.label }}{{ form.localselect }}
</div>
<div class="form-group">
{{ form.stopwords.label }}{{ form.stopwords }}
</div>
<div class="form-group">
{{ form.newstitle.label }}{{ form.newstitle }}
</div>

<div class="form-group">
{{ form.newscontent.label }}{{ form.newscontent }}
</div>

{{ form.getwords }}
<div class="form-group">
{{ form.selectwords.label }}{{ form.selectwords }}
</div>
{{ form.save }}

</div>
</form>


3、主页面 run.py
from flask import Flask, render_template,request,redirect,url_for,session
from ext import db
from models import Users,Words,Articles,Locals

from forms import inputForm

app = Flask(__name__)
app.config.from_pyfile("config.py") # 指定配置文件

db.app=app #因为前面db = SQLAlchemy()中是没有使用app参数的,如果使用了app参数,则这句才可以不要
db.init_app(app=app)

@app.route('/temp',methods=['POST','GET'])
def temp():
if request.method=='GET':
form=inputForm()
form.newstitle.data='this is title'#给文本框赋初始值
form.selectwords.choices=[('cpp','C++'),('py','Python'),('text','Plain Text')]#给多行选择框增加选项
return render_template('temp.html',form=form)
else:
form = inputForm()
if form.validate_on_submit(): #验证是否通过
if form.getwords.data: # 保存按钮被单击

return 'You click the button getwords.'
elif form.save.data: # 发布按钮被单击

return 'You click the "save" button.'
return '错误的提交'
else:
return '输入验证有误'
 
posted @ 2020-12-02 17:26  风中的太阳  阅读(85)  评论(0)    收藏  举报