Python中创建带有验证码字段的表单示例
在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的表单类,它包含了name,email,message和photo字段。我们还定义了一个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 }}来获取这个随机数,并将其显示在验证码图片上。
