最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

flask入門之文件上傳與郵件發(fā)送示例

 更新時間:2018年07月18日 09:32:21   作者:rottengeek  
本篇文章主要介紹了flask入門之文件上傳與郵件發(fā)送示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

文件上傳郵件發(fā)送

一、原生文件上傳

form.html

  <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

#文件上傳的視圖函數(shù)
@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) # 獲取圖片大小
    # 設(shè)置尺寸
    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) # 獲取圖片大小
    # 設(shè)置尺寸
    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()

二、發(fā)送郵件 flask-mail

pip install flask-mail

設(shè)置臨時環(huán)境變量

windows set 名=值

Ubuntu下 export 名=值

注意: 名和值都不用加引號

單線程發(fā)送郵件

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'
# 為了保密 將郵箱賬號和授權(quán)碼都加入到了臨時環(huán)境變量中
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 '發(fā)送郵件'

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

異步發(fā)送郵件

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,)) #創(chuàng)建線程 參數(shù)1為創(chuàng)建子線程 參數(shù)2為傳遞參數(shù) 類型為元組
  thr.start() #開啟線程
  return '發(fā)送郵件'

def async_send_mail(msg):
  #開啟程序上下文 把當前請求 作為同一個請求
  with app.app_context():
    mail.send(message=msg)

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 基于Python實現(xiàn)虛假評論檢測可視化系統(tǒng)

    基于Python實現(xiàn)虛假評論檢測可視化系統(tǒng)

    這篇文章主要為大家詳細介紹了如何基于Python實現(xiàn)一個簡單的虛假評論檢測可視化系統(tǒng),文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-04-04
  • Python 解決中文寫入Excel時拋異常的問題

    Python 解決中文寫入Excel時拋異常的問題

    下面小編就為大家分享一篇Python 解決中文寫入Excel時拋異常的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python數(shù)據(jù)結(jié)構(gòu)之循環(huán)鏈表詳解

    Python數(shù)據(jù)結(jié)構(gòu)之循環(huán)鏈表詳解

    循環(huán)鏈表 (Circular Linked List) 是鏈式存儲結(jié)構(gòu)的另一種形式,它將鏈表中最后一個結(jié)點的指針指向鏈表的頭結(jié)點,使整個鏈表頭尾相接形成一個環(huán)形,使鏈表的操作更加方便靈活。本文將詳細介紹一下循環(huán)鏈表的相關(guān)知識,需要的可以參考一下
    2022-01-01
  • OpenCV2.3.1+Python2.7.3+Numpy等的配置解析

    OpenCV2.3.1+Python2.7.3+Numpy等的配置解析

    這篇文章主要介紹了OpenCV2.3.1+Python2.7.3+Numpy等的配置解析,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Python中協(xié)程coroutine適用場景分析

    Python中協(xié)程coroutine適用場景分析

    多線程中可能出現(xiàn)多個線程爭搶變量,所以變量需要加鎖;協(xié)程中任一時刻都只有一個線程,所以變量不需要加鎖,這篇文章主要介紹了Python中協(xié)程(coroutine)詳解,需要的朋友可以參考下
    2024-04-04
  • Python實戰(zhàn)小項目之身份證信息校驗

    Python實戰(zhàn)小項目之身份證信息校驗

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Python做一個身份證信息校驗的小項目,大家可以在過程中查缺補漏,提升水平
    2021-10-10
  • 簡單了解django處理跨域請求最佳解決方案

    簡單了解django處理跨域請求最佳解決方案

    這篇文章主要介紹了簡單了解django處理跨域請求最佳解決方案,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Django框架實現(xiàn)逆向解析url的方法

    Django框架實現(xiàn)逆向解析url的方法

    這篇文章主要介紹了Django框架實現(xiàn)逆向解析url的方法,結(jié)合實例形式分析了Django逆向解析URL的原理、步驟、相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2018-07-07
  • python通過裝飾器檢查函數(shù)參數(shù)數(shù)據(jù)類型的方法

    python通過裝飾器檢查函數(shù)參數(shù)數(shù)據(jù)類型的方法

    這篇文章主要介紹了python通過裝飾器檢查函數(shù)參數(shù)數(shù)據(jù)類型的方法,涉及Python裝飾器的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • django2用iframe標簽完成網(wǎng)頁內(nèi)嵌播放b站視頻功能

    django2用iframe標簽完成網(wǎng)頁內(nèi)嵌播放b站視頻功能

    這篇文章主要介紹了django2 用iframe標簽完成 網(wǎng)頁內(nèi)嵌播放b站視頻功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06

最新評論

诸城市| 阳谷县| 大城县| 吐鲁番市| 托里县| 贡嘎县| 开原市| 黑龙江省| 济南市| 秦皇岛市| 静乐县| 尉犁县| 台州市| 辉南县| 富民县| 嵊州市| 比如县| 专栏| 仙桃市| 宁化县| 水城县| 三河市| 海宁市| 社旗县| 黔西| 阿巴嘎旗| 仙游县| 武夷山市| 高州市| 广元市| 叙永县| 洞口县| 玉龙| 阿尔山市| 泰和县| 安新县| 南部县| 胶州市| 中卫市| 镇巴县| 绥江县|