Flask框架教程汇总(4)---其中有原生文件上传+uploads+ mail 等

本节目录:
1 原生文件上传
2 flask-uploads
3 flask-mail 邮件发送

本教程的flask环境都是在ubuntu 16.04下 —python3.5—IDE为pycharm 如果有任何问题可以留言哦 !


一、原生文件上传

模板文件

    {% if newName %}
        <img src="{{ url_for('static',filename=newName) }}" alt="">
    {% endif %}
    <form action="{{ url_for('upload') }}" enctype="multipart/form-data" method="post">
        <input type="file" name="file">
        <p><input type="submit" value="submit"></p>
    </form>

manage.py 文件中

    from flask import Flask,render_template,request
    from flask_script import Manager
    from flask_bootstrap import Bootstrap
    import os
    from PIL import Image
    #pip3 install pillow  #图片处理库

    app = Flask(__name__)
    #允许上传的后缀
    app.config['ALLOWED_EXTENSIONS'] = ['.jpg','.jpeg','.png','.gif']
    #上传的大小
    app.config['MAX_CONTENT_LENGTH'] = 1024*1024*64 #64兆
    #配置文件上传的路径
    app.config['UPLOAD_FOLDER'] = os.getcwd()+'/static'

    bootstrap = Bootstrap(app)
    manager = Manager(app)

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

    #生成随机图片名称的函数
    def new_name(shuffix,length=32):
        import string, random
        myStr = string.ascii_letters + '0123456789'
        newName = ''.join(random.choice(myStr) for i in range(length))
        return newName+shuffix

    def allowed_file(shuffix):
        return shuffix in app.config['ALLOWED_EXTENSIONS']

    # 处理
    #1 获取后缀 判断是否所允许
    #2 设置上传大小
    #3 生成随机的图片名称
    @app.route('/upload',methods=['GET','POST'])
    def upload():
        img_name = None
        if request.method == 'POST':
            # print(request.files)
            file = request.files.get('file') #拿到文件对象
            filename = file.filename #获取上传的图片名称
            shuffix = os.path.splitext(filename)[-1]
            #获取到名称的后缀
            #为真 则继续处理
            if allowed_file(shuffix):
                #调用生成随机图片名称的函数
                while True:
                    newName = new_name(shuffix)
                    newPath = os.path.join(app.config['UPLOAD_FOLDER'],newName)
                    if not os.path.exists(newPath)
                    break
                img_name = newName
                #拼凑完整的图片上传路径
                file.save(newPath) #保存图片

                #处理图片的缩放
                img = Image.open(newPath)
                print(img.size)
                #重新设置大小和尺寸
                img.thumbnail((200,200))
                #等比例缩放, 第一个数确定后, 会自动按照比例和第一个数进行缩放, 第二个数其实控制不了大小
                #400 200
                #200 300
                #200 100
                img.save(newPath)
            # return '上传成功 名称为{}'.format(newName)
        return render_template('upload.html',newName=img_name)

二、flask-uploads

文件上传的第三方模块

pip3 install flask-uploads

导入

from flask_uploads import UploadSet,IMAGES,configure_uploads,patch_request_class

完整

    from flask import Flask,render_template,request
    from flask_script import Manager
    from flask_bootstrap import Bootstrap
    import os
    from flask_uploads import UploadSet,IMAGES,configure_uploads,patch_request_class
    from flask_wtf import FlaskForm
    from wtforms import FileField,SubmitField
    from flask_wtf.file import FileAllowed,FileRequired

    app = Flask(__name__)
    #允许上传的后缀
    app.config['SECRET_KEY'] = 'image'
    app.config['MAX_CONTENT_LENGTH'] = 1024*1024*64 #64兆
    #配置文件上传的路径
    app.config['UPLOADED_PHOTOS_DEST'] = os.getcwd()+'/static/upload'

    file = UploadSet('photos',IMAGES)
    configure_uploads(app,file)
    patch_request_class(app,size=None)


    bootstrap = Bootstrap(app)
    manager = Manager(app)

    class File(FlaskForm):
        file = FileField('文件上传',validators=[FileRequired(message='您还没有选择文件'),FileAllowed(file,message='只能上擦图片')])
        submit = SubmitField('上传')

    #生成随机图片名称的函数
    def new_name(shuffix,length=32):
        import string, random
        myStr = string.ascii_letters + '0123456789'
        newName = ''.join(random.choice(myStr) for i in range(length))
        return newName+shuffix

    @app.route('/upload',methods=['GET','POST'])
    def upload():
        form = File()
        img_url = None
        # if request.method == 'POST' and 'file' in request.files:
        if form.validate_on_submit():
            shuffix = os.path.splitext(form.file.data.filename)[-1]
            newName = new_name(shuffix=shuffix)
            file.save(form.file.data,name=newName)
            img_url = file.url(newName)
        return  render_template('boot_upload.html',newName=img_url,form=form)

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

三、flask-mail 邮件发送

安装

pip3 install flask-mail

    from flask import Flask,render_template_string
    from flask_mail import Mail,Message
    import os

    app = Flask(__name__)

    app.config['MAIL_SERVER'] = os.environ.get('MAIL_SERVER','这儿写邮箱的SMTP服务器: 例如:smtp.163.com')

    app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME','自己邮箱的登录账户')

    app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD','这儿是邮箱授权码, 不是登录密码')
    mail = Mail(app)

    @app.route('/')
    def index():
        msg = Message(subject='邮件激活',recipients=['发件人邮箱地址,和上边那个一致'],sender=app.config['MAIL_USERNAME'])
        msg.html = render_template_string('<h2>大郎啊 我是金莲</h2>')
        mail.send(message=msg)
        return '发送邮件'

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

使用线程异步发送邮件 避免用户在等待(也就是防止当前页面没有很快响应的问题)

    from flask import Flask,render_template_string,render_template
    from flask_mail import Mail,Message
    import os
    from threading import Thread

    app = Flask(__name__)

    app.config['MAIL_SERVER'] = os.environ.get('MAIL_SERVER','这儿写邮箱的SMTP服务器: 例如:smtp.163.com
')
    app.config['MAIL_USERNAME'] = os.environ.get('MAIL_USERNAME','自己邮箱的登录账户')
    app.config['MAIL_PASSWORD'] = os.environ.get('MAIL_PASSWORD','这儿是邮箱授权码, 不是登录密码')
    mail = Mail(app)
    #异步发送邮件
    def async_send_mail(app,msg):
        #获取当前程序的上下文
        with app.app_context():
            mail.send(message=msg)

    def send_mail(subject,to,tem,**kwargs):
        msg = Message(subject=subject, recipients=[to], sender=app.config['MAIL_USERNAME'])
        msg.html = render_template(tem+'.html',**kwargs)
        send = Thread(target=async_send_mail,args=(app,msg))
        send.start()

    @app.route('/')
    def index():
        send_mail('邮件激活','发件人邮箱地址,和上边那个一致','mail',username='zhangsan')
        return '发送邮件'

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

技术交流可以留言评论哦 ! 虚心学习, 不忘初心, 共同奋进 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask是一个轻量级的Python Web框架,它提供了一种简单且灵活的方法来建立Web应用程序。而GPT-2是一个自然语言处理模型,可以进行自动生成文本的任务。 使用Flask框架建立GPT-2涉及以下几个步骤: 1. 准备环境:首先,需要在Python中安装Flask和GPT-2所需的依赖库。可以使用pip命令来安装这些库。 2. 初始化Flask应用:在Python文件中导入Flask库,并创建一个Flask应用实例。可以使用app.route()装饰器来指定URL路径,并定义相应的处理函数。 3. 模型加载:在Flask应用中,可以在启动时加载GPT-2模型,并将其保存在全局变量中,以便在处理请求时使用。 4. 处理请求:当接收到来自前端的请求时,Flask应用会自动调用相应的处理函数。可以在处理函数中使用GPT-2模型来生成所需的文本。然后将生成的文本返回给前端。 5. 前端展示:可以使用HTML和CSS来设计前端界面,通过Flask的模板引擎来渲染页面,并将生成的文本显示在页面上。 6. 启动应用:最后,通过运行Python文件来启动Flask应用。可以使用flask run命令或者指定一个入口文件来启动应用。 需要注意的是,使用Flask框架建立GPT-2只是一个简单的示例,实际应用中可能还需要处理用户的输入、进行数据预处理等更多的操作。而且GPT-2模型的加载和使用可能会消耗大量的计算资源,所以在实际应用中需要考虑模型的性能和部署方式等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值