· 6 years ago · Jun 30, 2019, 11:02 AM
1# -*- coding: utf-8 -*-
2
3from flask import Flask, request, render_template, current_app
4from flask_wtf import Form
5from wtforms.validators import DataRequired
6from wtforms import SelectField, SelectMultipleField, SubmitField
7
8
9app = Flask(__name__)
10
11app.config.update(dict(
12 SECRET_KEY = 'your_secret_key',
13 CSRF_ENABLED = True,
14))
15
16
17class Select2MultipleField(SelectMultipleField):
18
19 def pre_validate(self, form):
20 # Prevent "not a valid choice" error
21 pass
22
23 def process_formdata(self, valuelist):
24 if valuelist:
25 self.data = ",".join(valuelist)
26 else:
27 self.data = ""
28
29
30class DemoForm(Form):
31 single_select = SelectField(u"单选", [DataRequired()],
32 choices=[("py", "python"), ("rb", "ruby"), ("js", "javascript")],
33 description=u"有限选项。无效化。",
34 render_kw={"disabled": "true"})
35 single_dynamic_select = SelectField(u"单选", [DataRequired()],
36 choices=[("0", "")],
37 description=u"动态加载选项。",
38 render_kw={})
39 multi_select = Select2MultipleField(u"选择框", [],
40 choices=[("py", "python"), ("rb", "ruby"), ("js", "javascript")],
41 description=u"多选。有限选项。",
42 render_kw={"multiple": "multiple"})
43 tags = Select2MultipleField(u'标签', [],
44 choices=[("py", "python"), ("rb", "ruby"), ("js", "javascript")],
45 description=u"多选。无限选项。",
46 render_kw={"multiple": "multiple", "data-tags": "1"})
47 submit = SubmitField()
48
49
50@app.route("/demo", methods=["GET", "POST"])
51def demo():
52 form = DemoForm(request.form)
53
54 if form.validate_on_submit():
55 current_app.logger.debug(form.data)
56
57 return render_template("demo.html", form=form)
58
59
60if __name__ == "__main__":
61 app.run(debug=True)