gpt4 book ai didi

flask入门之文件上传与邮件发送示例

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章flask入门之文件上传与邮件发送示例由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

文件上传邮件发送 。

1、原生文件上传 。

form.html 。

?
1
2
3
4
5
< img src = "{{ url_for('static',filename='img/17.jpg') }}" width = "300" alt = "" >
< form action = "" method = "post" enctype = "multipart/form-data" >
   < p >修改头像 < input type = "file" name = "file" ></ p >
   < p >< input type = "submit" value = "提交" ></ p >
</ form >

manage.py 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#文件上传的视图函数
@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渲染文件上传 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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()

模板中的代码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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()

2、发送邮件 flask-mail 。

?
1
pip install flask - mail

设置临时环境变量 。

windows set 名=值 。

Ubuntu下 export 名=值 。

注意: 名和值都不用加引号 。

单线程发送邮件 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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()

异步发送邮件 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:https://segmentfault.com/a/1190000015240818 。

最后此篇关于flask入门之文件上传与邮件发送示例的文章就讲到这里了,如果你想了解更多关于flask入门之文件上传与邮件发送示例的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com