參考: http://www.cnblogs.com/himir/p/5940705.html https://zhuanlan.zhihu.com/p/24423891 flask-uploads flask的一個(gè)文件上傳擴(kuò)展, 提供了UploadSet這個(gè)概念 flask-wtf(中文) 很強(qiáng)大的表單的擴(kuò)展 flask-bootstrap bootstrap的flask擴(kuò)展, 結(jié)合模版使用, 此處用到quick_form功能 from flask import Flask, render_templatefrom flask_uploads import UploadSet, IMAGES, configure_uploadsfrom flask_wtf import Formfrom wtforms import SubmitFieldfrom flask_wtf.file import FileField, FileAllowed, FileRequiredfrom flask_bootstrap import Bootstrap from werkzeug.utils import secure_filenameapp = Flask(__name__)# 新建一個(gè)set用于設(shè)置文件類(lèi)型、過(guò)濾等set_mypic = UploadSet('mypic') # mypic# 用于wtf.quick_form()模版渲染bootstrap = Bootstrap(app)# mypic 的存儲(chǔ)位置, # UPLOADED_xxxxx_DEST, xxxxx部分就是定義的set的名稱(chēng), mypi, 下同app.config['UPLOADED_MYPIC_DEST'] = './static/img'# mypic 允許存儲(chǔ)的類(lèi)型, IMAGES為預(yù)設(shè)的 tuple('jpg jpe jpeg png gif svg bmp'.split()) #DOCUMENTS = tuple('rtf odf ods gnumeric abw doc docx xls xlsx'.split()) #AUDIO = tuple('wav mp3 aac ogg oga flac'.split()) #TEXT = ('txt',) #DATA = ... #SCRIPTS = ... #ARCHIVES = ... #EXECUTABLES = ... #DEFAULT = TEXT + DOCUMENTS + IMAGES + DATAapp.config['UPLOADED_MYPIC_ALLOW'] = IMAGES# 把剛剛app設(shè)置的config注冊(cè)到set_mypicconfigure_uploads(app, set_mypic) # 此處WTF的SCRF密碼默認(rèn)為和flask的SECRET_KEY一樣 # app.config['WTF_CSRF_SECRET_KEY'] = 'wtf csrf secret key'app.config['SECRET_KEY'] = 'xxxxx' #允許上傳的文件大為10Mpatch_request_class(app,10*1024*1024) class UploadForm(Form): # 文件field設(shè)置為‘必須的’,過(guò)濾規(guī)則設(shè)置為‘set_mypic’ upload = FileField('p_w_picpath', validators=[FileRequired('文件未選擇!'), FileAllowed(set_mypic, '只能上傳圖片!')]) submit = SubmitField('上傳') @app.route('/', methods=('GET', 'POST'))def index(): form = UploadForm() url = None if form.validate_on_submit(): filename = secure_filename(form.upload.data.filename) fileupload = set_mypic.save(form.upload.data, name=filename) url = set_mypic.url(fileupload) return render_template('index.html', form=form, url=url)if __name__ == '__main__': app.run(debug=True) ----------------------------------------- 安全上傳方法: from flask_wtf import FlaskFormfrom flask_wtf.file import FileField, FileRequiredfrom werkzeug.utils import secure_filename form = FlaskForm(csrf_enabled=False) WTF_CSRF_ENABLED = False WTF_CSRF_SECRET_KEY = 'a random string' class PhotoForm(FlaskForm): photo = FileField(validators=[FileRequired()]) @app.route('/upload', methods=['GET', 'POST'])def upload(): if form.validate_on_submit(): f = form.photo.data filename = secure_filename(f.filename) f.save(os.path.join(app.instance_path, 'photos', filename)) return redirect(url_for('index')) return render_template('upload.html', form=form) ------------------------------------------------ html文件: {% extends "base.html" %} {% import "bootstrap/wtf.html" as wtf %} {% block page_content %} {{ wtf.quick_form(form, enctype="multipart/form-data") }} <h5>文件上傳成功!</h5> {% if url %} <br><img src="{{ url }}"> {% endif %} {% endblock page_content %} 注: 上傳文件的 form 必須是 POST 方法,并且 enctype=multipart/form-data。type=file。 如果使用 GET 方法,則只會(huì)上傳文件名。 如何將照片資源與用戶進(jìn)行綁定? 使用輕量級(jí) ORM 框架,peewee,使用兩個(gè)字段 use_id、photo_name。將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)表格中。需要時(shí)可根據(jù)登錄 user 的 id 獲取到對(duì)應(yīng)的 photo_name,然后使用 photos.url(photo_name) 進(jìn)行加載。
創(chuàng)新互聯(lián)www.cdcxhl.cn,專(zhuān)業(yè)提供香港、美國(guó)云服務(wù)器,動(dòng)態(tài)BGP最優(yōu)骨干路由自動(dòng)選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機(jī)房獨(dú)有T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確進(jìn)行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動(dòng)現(xiàn)已開(kāi)啟,新人活動(dòng)云服務(wù)器買(mǎi)多久送多久。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了東方免費(fèi)建站歡迎大家使用!
分享題目:flask-uploads擴(kuò)展的使用-創(chuàng)新互聯(lián)
本文鏈接:http://bm7419.com/article40/dioheo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、網(wǎng)站策劃、企業(yè)網(wǎng)站制作、響應(yīng)式網(wǎng)站、企業(yè)建站、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容