flask入门之文件上传与邮件发送示例
文件上传邮件发送
一、原生文件上传
form.html
修改头像
manage.py
#文件上传的视图函数 @app.route('/upload/',methods=['GET','POST']) deficon(): img_name=None ifrequest.method=='POST'and'file'inrequest.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 returnrender_template('user/change_icon.html',img_name=img_name)
使用wtf和bootstrap渲染文件上传
fromflaskimportFlask,render_template,request fromflask_scriptimportManager fromflask_wtfimportFlaskForm fromflask_wtf.fileimportFileField,FileAllowed,FileRequired fromwtformsimportSubmitField fromflask_uploadsimportUploadSet,patch_request_class,configure_uploads,IMAGES fromflask_bootstrapimportBootstrap importos fromPILimportImage 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) #自定义一个文件上传的表单类 classFile(FlaskForm): photos=FileField('修改头像',validators=[FileRequired(message='文件不能为空'),FileAllowed(file,message='该文件类型不允许上传')]) submit=SubmitField('提交') @app.route('/') defindex(): returnrender_template('index.html') #生成随机的图片名称 defrandom_name(suffix,length=32): importstring,random myStr=string.ascii_letters+'0123456789' return''.join(random.choice(myStr)foriinrange(length))+suffix @app.route('/upload/',methods=['GET','POST']) deficon(): form=File() img_url=None ifform.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)) returnrender_template('user/wtf-uplods.html',form=form,img_url=img_url) if__name__=='__main__': manager.run()
模板中的代码
fromflaskimportFlask,render_template,request fromflask_scriptimportManager fromflask_wtfimportFlaskForm fromflask_wtf.fileimportFileField,FileAllowed,FileRequired fromwtformsimportSubmitField fromflask_uploadsimportUploadSet,patch_request_class,configure_uploads,IMAGES fromflask_bootstrapimportBootstrap importos fromPILimportImage 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) #自定义一个文件上传的表单类 classFile(FlaskForm): photos=FileField('修改头像',validators=[FileRequired(message='文件不能为空'),FileAllowed(file,message='该文件类型不允许上传')]) submit=SubmitField('提交') @app.route('/') defindex(): returnrender_template('index.html') #生成随机的图片名称 defrandom_name(suffix,length=32): importstring,random myStr=string.ascii_letters+'0123456789' return''.join(random.choice(myStr)foriinrange(length))+suffix @app.route('/upload/',methods=['GET','POST']) deficon(): form=File() img_url=None ifform.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)) returnrender_template('user/wtf-uplods.html',form=form,img_url=img_url) if__name__=='__main__': manager.run()
二、发送邮件flask-mail
pipinstallflask-mail
设置临时环境变量
windowsset名=值
Ubuntu下export名=值
注意:名和值都不用加引号
单线程发送邮件
fromflaskimportFlask,render_template fromflask_scriptimportManager fromflask_mailimportMail,Message importos 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/') defsend_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()
异步发送邮件
fromflaskimportFlask,render_template fromflask_scriptimportManager fromflask_mailimportMail,Message importos fromthreadingimportThread 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/') defsend_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'发送邮件' defasync_send_mail(msg): #开启程序上下文把当前请求作为同一个请求 withapp.app_context(): mail.send(message=msg) if__name__=='__main__': manager.run()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。