django1.8使用表單上傳文件的實(shí)現(xiàn)方法
Python下有許多款不同的 Web 框架。Django是重量級(jí)選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。
Django是一個(gè)開放源代碼的Web應(yīng)用框架,由Python寫成。
在django中我們可以采用Form類來處理表單,通過實(shí)例化處理和在模板中渲染,就可以輕松完成表單的需求,采用django的表單處理方式,能幫我們省去很多的工作,比如驗(yàn)證不能為空,或者要符合某種模式的輸入才有效,這些處理起來非常方便,不用自己再單獨(dú)寫代碼去驗(yàn)證表單的數(shù)據(jù)正確性,所以在開發(fā)中比較常用,F(xiàn)orm提供了很多表單字段,比如日期,文本類型等,如果你熟悉基本的html,學(xué)起來會(huì)非常容易上手,所以今天我們不打算對(duì)每個(gè)表單的字段進(jìn)行逐一說明,今天只說下表單文件的上傳,因?yàn)檫@個(gè)類型比較特殊,需要一點(diǎn)特殊的處理,我們來創(chuàng)建一個(gè)簡(jiǎn)單的一個(gè)實(shí)例:
首先我們用Form創(chuàng)建一個(gè)簡(jiǎn)單的表單:
class UserForm(forms.Form): username = forms.CharField(required=False) headImg = forms.FileField() class UserForm(forms.Form): username = forms.CharField(required=False) headImg = forms.FileField()
這個(gè)表單就2個(gè)字段,要求用戶輸入用戶名和上傳一個(gè)文件或圖片。
接下來我們放到模板中去渲染,這時(shí)候就可以看到一個(gè)基本表單了,視圖函數(shù)如下:
def register(request): if request.method == "POST": uf = UserForm(request.POST, request.FILES) if uf.is_valid(): #放上傳文件的代碼 return HttpResponse('ok') else: uf = UserForm() return render(request, 'register.html', {'uf': uf}) def register(request): if request.method == "POST": uf = UserForm(request.POST, request.FILES) if uf.is_valid(): #放上傳文件的代碼 return HttpResponse('ok') else: uf = UserForm() return render(request, 'register.html', {'uf': uf})
這個(gè)函數(shù)判斷用戶的是否為POST請(qǐng)求,如果是并驗(yàn)證是有效的,然后就返回OK,在驗(yàn)證正確和返回OK的中間放我們的上傳文件代碼,因?yàn)橹挥形募蟼鞒晒δ芊祷豋K,我們一會(huì)說,如果是GET請(qǐng)求,就直接顯示一個(gè)空表單,讓用戶輸入。
處理上傳文件就是往服務(wù)器上生成一個(gè)文件,并將上傳的文件內(nèi)容寫到新的文件中,所以它的基本函數(shù)是這樣的,接收上傳文件對(duì)象為參數(shù),然后本地打開一個(gè)文件,從上傳的文件中讀出文件,寫入新的文件中,代碼如下:
def handle_uploaded_file(f): with open('/server/testform/upload/' + f.name, 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) def handle_uploaded_file(f): with open('/server/testform/upload/' + f.name, 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk)
有了這個(gè)上傳文件的處理函數(shù),我們就可以進(jìn)一步完善我們的視圖函數(shù)里,最終的代碼如下:
def register(request): if request.method == "POST": uf = UserForm(request.POST, request.FILES) if uf.is_valid(): handle_uploaded_file(request.FILES['headImg']) return HttpResponse('ok') else: uf = UserForm() return render(request, 'register.html', {'uf': uf}) def register(request): if request.method == "POST": uf = UserForm(request.POST, request.FILES) if uf.is_valid(): handle_uploaded_file(request.FILES['headImg']) return HttpResponse('ok') else: uf = UserForm() return render(request, 'register.html', {'uf': uf})
這樣就完成了一個(gè)文件的上傳,完畢。
以上所述是小編給大家介紹的django1.8使用表單上傳文件,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Python程序設(shè)計(jì)入門(5)類的使用簡(jiǎn)介
這篇文章主要介紹了Python類的使用,需要的朋友可以參考下2014-06-06Python中循環(huán)后使用list.append()數(shù)據(jù)被覆蓋問題的解決
這篇文章主要給大家介紹了關(guān)于Python中循環(huán)后使用list.append()數(shù)據(jù)被覆蓋問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07numpy.random.seed()的使用實(shí)例解析
這篇文章主要介紹了numpy.random.seed()的使用實(shí)例解析,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02tensorflow1.0學(xué)習(xí)之模型的保存與恢復(fù)(Saver)
這篇文章主要介紹了tensorflow1.0學(xué)習(xí)之模型的保存與恢復(fù)(Saver) ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04Python庫coala代碼分析和自動(dòng)化檢查改進(jìn)工具使用探索
Python的coala工具是一個(gè)強(qiáng)大的代碼分析和自動(dòng)化改進(jìn)工具,它可以幫助開發(fā)人員自動(dòng)化地檢查代碼并提供改進(jìn)建議,本文將詳細(xì)介紹coala的功能和用法,并提供豐富的示例代碼來幫助大家深入了解它2024-01-01Python圖像處理庫PIL的ImageEnhance模塊使用介紹
這篇文章主要介紹了Python圖像處理庫PIL的ImageEnhance模塊使用介紹,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Python函數(shù)中的可變長(zhǎng)參數(shù)詳解
在本篇文章里小編給大家整理的是關(guān)于Python函數(shù)中的可變長(zhǎng)參數(shù)的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們參考下。2019-09-09