django1.8使用表單上傳文件的實(shí)現(xiàn)方法
Python下有許多款不同的 Web 框架。Django是重量級選手中最有代表性的一位。許多成功的網(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é)起來會非常容易上手,所以今天我們不打算對每個(gè)表單的字段進(jìn)行逐一說明,今天只說下表單文件的上傳,因?yàn)檫@個(gè)類型比較特殊,需要一點(diǎn)特殊的處理,我們來創(chuàng)建一個(gè)簡單的一個(gè)實(shí)例:
首先我們用Form創(chuàng)建一個(gè)簡單的表單:
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請求,如果是并驗(yàn)證是有效的,然后就返回OK,在驗(yàn)證正確和返回OK的中間放我們的上傳文件代碼,因?yàn)橹挥形募蟼鞒晒δ芊祷豋K,我們一會說,如果是GET請求,就直接顯示一個(gè)空表單,讓用戶輸入。
處理上傳文件就是往服務(wù)器上生成一個(gè)文件,并將上傳的文件內(nèi)容寫到新的文件中,所以它的基本函數(shù)是這樣的,接收上傳文件對象為參數(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使用表單上傳文件,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Python實(shí)現(xiàn)自動發(fā)送測試報(bào)告郵件的示例代碼
SMTP也就是簡單郵件傳輸協(xié)議,是一種提供可靠且有效電子郵件傳輸?shù)膮f(xié)議,python的smtplib模塊就提供了一種很方便的途徑發(fā)送電子郵件,它對smtp協(xié)議進(jìn)行了簡單的封裝,下面就來和大家簡單聊聊吧2023-07-07
解讀FastAPI異步化為transformers模型打造高性能接口
這篇文章主要介紹了解讀FastAPI異步化為transformers模型打造高性能接口問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
python實(shí)現(xiàn)圖片處理和特征提取詳解
這篇文章主要介紹了python實(shí)現(xiàn)圖片處理和特征提取詳解,文中向大家分享了Python導(dǎo)入圖片,將圖像轉(zhuǎn)化為二維矩陣,模糊化圖片等Python對圖像的操作,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
如何用python實(shí)現(xiàn)結(jié)構(gòu)體數(shù)組
這篇文章主要介紹了如何用python實(shí)現(xiàn)結(jié)構(gòu)體數(shù)組,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
python淺析守護(hù)線程與非守護(hù)線程的區(qū)別與使用
守護(hù)線程,又稱后臺線程,它是在后臺運(yùn)行的,如果所有前臺線程都死亡,那么后臺線程就會自動死亡,本章我們來了解守護(hù)線程與非守護(hù)線程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-08-08
深入理解Python 關(guān)于supper 的 用法和原理
這篇文章主要介紹了Python 關(guān)于supper 的 用法和原理分析,非常不錯,具有參考借鑒價(jià)值,需要的朋友參考下吧2018-02-02
Python獲取系統(tǒng)默認(rèn)字符編碼的方法
這篇文章主要介紹了Python獲取系統(tǒng)默認(rèn)字符編碼的方法,涉及Python中sys模塊getdefaultencoding方法的使用技巧,需要的朋友可以參考下2015-06-06

