flask表单标签

 环境:python2.7+flask+flask_wtf

内容:flask的部分常用表单标签

test.py

# -*- coding: utf-8 -*-
# flask web_form 表单控件
import flask
from flask_wtf import FlaskForm
from wtforms import *
from wtforms.fields import (StringField, PasswordField, DateField, BooleanField,
                            SelectField, SelectMultipleField, TextAreaField,
                            RadioField, IntegerField, DecimalField, SubmitField)
from wtforms.validators import DataRequired, Length, Email, EqualTo, NumberRange
from flask_wtf.file import FileField, FileRequired, FileAllowed
from flask import Flask, render_template, redirect
app = Flask(__name__)
#from flask_uploads import UploadSet, configure_uploads, IMAGES, patch_request_class
import os
from os import path
d = path.dirname(__file__)
###保护字段

app.config['SECRET_KEY'] = 'a random string'
'''
app.config['UPLOADED_PHOTOS_DEST'] = os.getcwd()
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)
patch_request_class(app)
'''
###定义表单
class NewsForm(FlaskForm):
    # Text Field类型,文本输入框,必填,用户名长度为4到25之间
    username = StringField('Username', validators=[Length(min=4, max=25)])
    # Text Field类型,文本输入框,Email格式
    email = StringField('Email Address', validators=[Email()])
    # Text Field类型,密码输入框,必填,必须同confirm字段一致
    password = PasswordField('Password', [
        DataRequired(),
        EqualTo('confirm', message='Passwords must match')
    ])
    # Text Field类型,密码输入框
    confirm = PasswordField('Repeat Password')
    id = HiddenField('id', default='123')
    image = FileField(validators=[
            FileRequired('no files'),
            FileAllowed(['jpg', 'png'], 'Images only!')
            ])
    # Text Field类型,文本输入框,必须输入整型数值,范围在16到70之间
    age = IntegerField('Age', validators=[NumberRange(min=16, max=70)])
    # Text Field类型,文本输入框,必须输入数值,显示时保留一位小数
    height = DecimalField('Height (Centimeter)', places=1)
    # Text Field类型,文本输入框,必须输入是"年-月-日"格式的日期
    birthday = DateField('Birthday', format='%Y-%m-%d')
    # Radio Box类型,单选框,choices里的内容会在ul标签里,里面每个项是(值,显示名)对
    gender = RadioField('Gender', choices=[('m', 'Male'), ('f', 'Female')],validators=[DataRequired()])
    # Select类型,下拉单选框,choices里的内容会在Option里,里面每个项是(值,显示名)对
    job = SelectField('Job', choices=[
        ('teacher', 'Teacher'),
        ('doctor', 'Doctor'),
        ('engineer', 'Engineer'),
        ('lawyer', 'Lawyer')
    ])
 
    # Select类型,多选框,choices里的内容会在Option里,里面每个项是(值,显示名)对
    hobby = SelectMultipleField('Hobby', choices=[
        ('swim', 'Swimming'),
        ('skate', 'Skating'),
        ('hike', 'Hiking')
    ])
    # Text Area类型,段落输入框
    description = TextAreaField('Introduction of yourself')
    # Checkbox类型,加上default='checked'即默认是选上的
    accept_terms = BooleanField('I accept the Terms of Use', default='checked',
                                validators=[DataRequired()])
    # Submit按钮
    submit = SubmitField('Register')
###控制器
@app.route('/test/news_form', methods=['GET','POST'])
def NewsFormViews():
    form  = NewsForm()
    if flask.request.method == "GET":
        return render_template('news_form.html',form=form)
    else:
        #print form.image.data
        if form.validate_on_submit():
            if form.id.data:
                print form.id.data
            if form.image.data:
                filename = form.image.data.filename
                form.image.data.save(path.join(d,filename))
            return redirect('/test/news_form')
        else:
            print form.errors
            ###把错误信息返回到页面
            return render_template('news_form.html',form=form,error=form.errors)

if __name__ == '__main__':
    app.run(host='127.0.0.1',port='8888', debug=False)
原文地址:https://www.cnblogs.com/shuangzikun/p/taotao_python_flask_flask_wtf.html