资讯专栏INFORMATION COLUMN

flask入门4-文件上传与邮件发送

vvpale / 3024人阅读

摘要:文件上传邮件发送一原生文件上传修改头像提交文件上传的视图函数有文件上传了拿到文件名称图片上传保存的路径使用和渲染文件上传自定义一个文件上传的表单类修改头像文件不能为空该文件类型不允许上传提交生成随机的图片名称获取图片大小设置尺寸当前缩放

文件上传邮件发送 一、原生文件上传 form.html
    
    

修改头像

manage.py
#文件上传的视图函数
@app.route("/upload/",methods=["GET","POST"])
def icon():
    img_name = None
    if request.method == "POST" and "file" in request.files:
        # return "有文件上传了"
        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)
使用wtf和bootstrap渲染文件上传
from flask import Flask,render_template,request
from flask_script import Manager
from flask_wtf import FlaskForm
from flask_wtf.file import FileField,FileAllowed,FileRequired
from wtforms import SubmitField
from flask_uploads import UploadSet,patch_request_class,configure_uploads,IMAGES
from flask_bootstrap import Bootstrap
import os
from PIL import Image

app = Flask(__name__)
app.config["MAX_CONTENT_LENGTH"] = 1024*1024*64
app.config["SECRET_KEY"] = "abcdef"
app.config["UPLOADED_PHOTOS_DEST"] = os.path.join(os.getcwd(),"static/upload")
bootstrap = Bootstrap(app)
file = UploadSet("photos",IMAGES)
configure_uploads(app,file)
patch_request_class(app,size=None)
manager = Manager(app)

#自定义一个文件上传的表单类
class File(FlaskForm):
    photos = FileField("修改头像",validators=[FileRequired(message="文件不能为空"),FileAllowed(file,message="该文件类型不允许上传")])
    submit = SubmitField("提交")

@app.route("/")
def index():
    return render_template("index.html")

#生成随机的图片名称
def random_name(suffix,length=32):
    import string,random
    myStr = string.ascii_letters + "0123456789"
    return "".join(random.choice(myStr) for i in range(length))+suffix

@app.route("/upload/",methods=["GET","POST"])
def icon():
    form = File()
    img_url = None
    if form.validate_on_submit():
        data = request.files.get("photos")
        suffix = os.path.splitext(data.filename)[-1]
        newName = random_name(suffix)
        file.save(data,name=newName)
        img_url = file.url(newName)

        img = Image.open(os.path.join(app.config["UPLOADED_PHOTOS_DEST"],newName))
        print(img.size)  # 获取图片大小
        # 设置尺寸
        img.thumbnail((128, 128))  # 当前缩放不是等比缩放 变成等比缩放
        img.save(os.path.join(app.config["UPLOADED_PHOTOS_DEST"],"s_"+newName))
    return render_template("user/wtf-uplods.html",form=form,img_url=img_url)

if __name__ == "__main__":
    manager.run()
模板中的代码
from flask import Flask,render_template,request
from flask_script import Manager
from flask_wtf import FlaskForm
from flask_wtf.file import FileField,FileAllowed,FileRequired
from wtforms import SubmitField
from flask_uploads import UploadSet,patch_request_class,configure_uploads,IMAGES
from flask_bootstrap import Bootstrap
import os
from PIL import Image

app = Flask(__name__)
app.config["MAX_CONTENT_LENGTH"] = 1024*1024*64
app.config["SECRET_KEY"] = "abcdef"
app.config["UPLOADED_PHOTOS_DEST"] = os.path.join(os.getcwd(),"static/upload")
bootstrap = Bootstrap(app)
file = UploadSet("photos",IMAGES)
configure_uploads(app,file)
patch_request_class(app,size=None)
manager = Manager(app)

#自定义一个文件上传的表单类
class File(FlaskForm):
    photos = FileField("修改头像",validators=[FileRequired(message="文件不能为空"),FileAllowed(file,message="该文件类型不允许上传")])
    submit = SubmitField("提交")

@app.route("/")
def index():
    return render_template("index.html")

#生成随机的图片名称
def random_name(suffix,length=32):
    import string,random
    myStr = string.ascii_letters + "0123456789"
    return "".join(random.choice(myStr) for i in range(length))+suffix

@app.route("/upload/",methods=["GET","POST"])
def icon():
    form = File()
    img_url = None
    if form.validate_on_submit():
        data = request.files.get("photos")
        suffix = os.path.splitext(data.filename)[-1]
        newName = random_name(suffix)
        file.save(data,name=newName)
        img_url = file.url(newName)

        img = Image.open(os.path.join(app.config["UPLOADED_PHOTOS_DEST"],newName))
        print(img.size)  # 获取图片大小
        # 设置尺寸
        img.thumbnail((128, 128))  # 当前缩放不是等比缩放 变成等比缩放
        img.save(os.path.join(app.config["UPLOADED_PHOTOS_DEST"],"s_"+newName))
    return render_template("user/wtf-uplods.html",form=form,img_url=img_url)

if __name__ == "__main__":
    manager.run()
二、发送邮件 flask-mail

pip install flask-mail

设置临时环境变量

windows set 名=值

Ubuntu下 export 名=值
注意: 名和值都不用加引号

单线程发送邮件
from flask import Flask,render_template
from flask_script import Manager
from flask_mail import Mail,Message
import os

app = Flask(__name__)
app.config["MAIL_SERVER"] = "smtp.163.com"
# 为了保密 将邮箱账号和授权码都加入到了临时环境变量中
app.config["MAIL_USERNAME"] = os.environ.get("MAIL_USERNAME")
app.config["MAIL_PASSWORD"] = os.environ.get("MAIL_PASSWORD")

mail = Mail(app)
manager = Manager(app)

@app.route("/send_mail/")
def send_mail():
    msg = Message(subject="大郎",recipients=["793390457@qq.com"],sender=app.config["MAIL_USERNAME"])
    msg.html = render_template("email/activate.html",username="大郎")
    mail.send(message=msg)
    return "发送邮件"

if __name__ == "__main__":
    manager.run()
异步发送邮件
from flask import Flask,render_template
from flask_script import Manager
from flask_mail import Mail,Message
import os
from threading import Thread

app = Flask(__name__)
app.config["MAIL_SERVER"] = "smtp.163.com"
app.config["MAIL_USERNAME"] = os.environ.get("MAIL_USERNAME")
app.config["MAIL_PASSWORD"] = os.environ.get("MAIL_PASSWORD")

mail = Mail(app)
manager = Manager(app)

@app.route("/send_mail/")
def send_mail():
    msg = Message(subject="大郎",recipients=["793390457@qq.com"],sender=app.config["MAIL_USERNAME"])
    msg.html = render_template("email/activate.html",username="大郎")
    thr = Thread(target=async_send_mail,args=(msg,)) #创建线程 参数1为创建子线程 参数2为传递参数 类型为元组
    thr.start() #开启线程
    return "发送邮件"

def async_send_mail(msg):
    #开启程序上下文  把当前请求 作为同一个请求
    with app.app_context():
        mail.send(message=msg)

if __name__ == "__main__":
    manager.run()

flask入门5-model

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41834.html

相关文章

  • flask入门3-表单

    摘要:表单一原生表单原生表单用户名请输入用户名密码请输入密码提交接收表单的数据提交过来了将俩个路由地址合并为同一个二使用表单扩展库作用是一个用于表单处理的扩展库提供表单的校验的功能使用字段类型字段名称字段类型普通文本字段密码框提交按钮多行文本 flask 表单 一、原生表单 form.html {% extends common/base.html %} {% block title %} ...

    lijy91 评论0 收藏0
  • flask入门1

    摘要:每天的内容跑起来模板引擎表单文件上传邮件发送一框架的简介模型负责数据的操作视图负责数据的展示控制器控制你的的操作以及视图模板的渲染在中叫做模型负责数据的操作控制你的的操作以及视图模板的渲染业务逻辑的操作模板负责数据的展示二架构三概念是 flask 每天的内容 flask跑起来 模板引擎 flask表单 文件上传邮件发送 flask-sqlalchemy 一、web框架的简介 M ...

    Freelander 评论0 收藏0
  • Flask 插件系列 - Flask-Mail

    摘要:带附件的邮件有时候,我们发邮件的时候需要添加附件,比如文档和图片等,这也很简单,代码如下邮件服务器地址邮件服务器端口启用上面的代码中,我们通过打开了本机的某张图片,然后通过方法将附件内容添加到对象。 前往本文博客 简介 给用户发送邮件是 Web 应用中最常见的任务之一,比如用户注册,找回密码等。Python 内置了一个 smtplib 的模块,可以用来发送邮件,这里我们使用 Flask...

    ingood 评论0 收藏0
  • Flask Web Development —— Email

    摘要:函数携带目的地址主题邮件体模板和一组关键字参数。许多扩展操作是在假设有活动的应用程序和请求上下文的情况下进行的。但是当函数在一个不同的线程上执行,应用程序上下文需要人为地创建使用。例如,执行函数可以将邮件发送到的任务队列中。 许多类型的应用程序都会在某些事件发生的时候通知用户,常用的沟通方法就是电子邮件。尽管在Flask应用程序中,可以使用Python标准库中的smtplib包来发送电...

    SKYZACK 评论0 收藏0
  • Flaskflask-mail邮件发送

    摘要:为什么要使用发送邮件因为自带的包比较底层,使用起来比较麻烦。发送模板邮件欢迎你观看此文章,您的邮箱账号为这个程序在上述文件上进行编写给你发邮件啦还可以发送附件 为什么要使用flask-mail发送邮件? 因为python自带的email包比较底层,使用起来比较麻烦。安装Flask-Mail: pip install flask-mail 配置 Flask-Mail MAIL_SER...

    xfee 评论0 收藏0

发表评论

0条评论

vvpale

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<