欢迎访问宙启技术站
智能推送

Python中创建带有验证码字段的表单示例

发布时间:2023-12-26 13:24:59

在Python中,可以使用Flask框架来创建带有验证码字段的表单。验证码字段通常用于确认用户提交表单时的人类操作,以区分机器人和恶意行为。以下是一个示例代码,用于创建带有验证码字段的表单:

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from flask_wtf.file import FileField, FileAllowed, FileRequired
from flask_uploads import UploadSet, configure_uploads, IMAGES
from flask_seasurf import SeaSurf
import random

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'

photos = UploadSet('photos', IMAGES)
app.config['UPLOADED_PHOTOS_DEST'] = 'static/img'
configure_uploads(app, photos)

csrf = SeaSurf(app)

class ContactForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    email = StringField('Email', validators=[DataRequired()])
    message = StringField('Message', validators=[DataRequired()])
    photo = FileField('Upload Photo', validators=[
        FileRequired(),
        FileAllowed(photos, 'Images only!')
    ])
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
def contact():
    form = ContactForm()
    
    if request.method == 'POST':
        if form.validate_on_submit():
            # Do something with the form data
            name = form.name.data
            email = form.email.data
            message = form.message.data
            photo_filename = photos.save(form.photo.data)
            return f'Thank you for your submission, {name}!'
    
    return render_template('contact.html', form=form, csrf_token=csrf.token, random_num=random.randint(100000, 999999))

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

在上述示例中,我们使用了Flask-WTF扩展来轻松地创建表单。ContactForm类是一个继承自FlaskForm的表单类,它包含了nameemailmessagephoto字段。我们还定义了一个submit字段来提交表单。

在表单类的FileField字段中,我们使用了FileRequired()验证器来确保用户上传了一个文件,并使用FileAllowed(photos, 'Images only!')验证器来限制只能上传图片文件。

contact路由中,我们首先实例化ContactForm类以获得一个表单实例,并将其传递给render_template函数以渲染模板contact.html。在渲染模板时,我们使用csrf_token=csrf.token来生成一个CSRF令牌,用于保护表单免受跨站请求伪造攻击。

当用户提交表单时,我们使用form.validate_on_submit()来验证表单数据是否有效。如果有效,我们可以在这个条件块中执行一些操作,例如保存表单数据、存储上传的文件或发送确认电子邮件。

需要注意的是,示例中使用了flask-uploads库来处理上传的文件,并将它们保存在static/img文件夹中。你需要事先安装这个库,使用以下命令:pip install Flask-Uploads

另外,我们还在模板中使用了一个名为random_num的随机数,它用于生成验证码图片。在模板中,我们可以使用{{ random_num }}来获取这个随机数,并将其显示在验证码图片上。