Flask初学者教程:文件上传与邮件发送实战

0 下载量 173 浏览量 更新于2024-09-01 收藏 49KB PDF 举报
“flask入门之文件上传与邮件发送示例 - 学习如何在Flask应用中实现文件上传和邮件发送功能。” 在这个教程中,我们将探讨如何使用Python的Flask框架来处理文件上传以及发送电子邮件。Flask是一个轻量级的Web服务器网关接口(WSGI)Web应用框架,适合构建小型到中型的应用。 ### 一、原生文件上传 文件上传是Web应用中常见的需求。在Flask中,我们可以使用`request`对象来处理上传的文件。首先,我们需要创建一个HTML表单,让用户选择要上传的文件。在`form.html`中,我们看到一个`<form>`标签,它设置为`multipart/form-data`编码类型,这是上传文件所必需的: ```html <form action="" method="post" enctype="multipart/form-data"> <p>修改头像 <input type="file" name="file"></p> <p><input type="submit" value="提交"></p> </form> ``` 当用户选择文件并提交表单后,Flask应用中的视图函数将接收这个请求。在`manage.py`中,定义了一个名为`icon`的视图函数,它检查请求方法是否为`POST`,并且`file`字段是否存在。如果满足条件,就从`request.files`中获取文件,保存到服务器,并返回渲染后的页面: ```python @app.route('/upload/', methods=['GET', 'POST']) def icon(): img_name = None if request.method == 'POST' and 'file' in request.files: file = request.files.get('file') filename = file.filename # 拿到文件名称 imgPath = os.path.join(os.getcwd(), 'static/upload/' + filename) file.save(imgPath) img_name = filename return render_template('user/change_icon.html', img_name=img_name) ``` ### 二、使用WTForms和Bootstrap进行文件上传 为了增强用户体验和表单验证,可以使用`Flask-WTF`库。首先导入所需的库,然后创建一个表单类,包含`FileField`用于文件上传,以及`SubmitField`用于提交表单: ```python from flask_wtf import FlaskForm from flask_wtf.file import FileField, FileAllowed, FileRequired from wtforms import SubmitField class UploadForm(FlaskForm): file = FileField('选择文件', validators=[FileAllowed(['jpg', 'png'], '只能上传.jpg或.png文件!'), FileRequired('请选择文件')]) submit = SubmitField('上传') ``` 接着,可以在模板中使用Bootstrap样式渲染这个表单,提供更美观的界面。 ### 三、发送邮件 在Flask应用中发送邮件,通常会使用`Flask-Mail`库。首先安装该库,然后配置SMTP服务器信息,创建一个邮件实例,编写邮件内容,最后通过SMTP发送邮件: ```python from flask_mail import Mail, Message app.config['MAIL_SERVER'] = 'smtp.example.com' app.config['MAIL_PORT'] = 587 app.config['MAIL_USE_TLS'] = True app.config['MAIL_USERNAME'] = 'your_email@example.com' app.config['MAIL_PASSWORD'] = 'your_password' mail = Mail(app) def send_email(subject, sender, recipients, body): msg = Message(subject, sender=sender, recipients=recipients) msg.body = body mail.send(msg) ``` 在需要发送邮件的地方,调用`send_email`函数即可。 总结,本教程涵盖了Flask应用中两个关键功能:文件上传和邮件发送。通过原生方法和WTForms库,我们可以创建用户友好的文件上传表单;通过`Flask-Mail`,我们可以轻松地发送邮件。这两个功能对于许多Web应用来说都是必不可少的,学习和掌握它们对提升Flask应用的实用性大有裨益。