首頁 >後端開發 >Python教學 >django1.8使用表單上傳檔案的實作方法

django1.8使用表單上傳檔案的實作方法

高洛峰
高洛峰原創
2017-02-22 11:04:261469瀏覽

Python下有許多款不同的 Web 框架。 Django是重量級選手中最具代表性的一位。許多成功的網站和APP都基於Django。

Django是一個開放原始碼的Web應用框架,由Python寫成。

在django中我們可以採用Form類別來處理表單,透過實例化處理和在範本中渲染,就可以輕鬆完成表單的需求,採用django的表單處理方式,能幫我們省去很多的工作,例如驗證不能為空,或是要符合某種模式的輸入才有效,這些處理起來非常方便,不用自己再單獨寫程式碼去驗證表單的資料正確性,所以在開發中比較常用,Form提供了很多表單字段,例如日期,文字類型等,如果你熟悉基本的html,學起來會非常容易上手,所以今天我們不打算對每個表單的字段進行逐一說明,今天只說下表單文件的上傳,因為這個類型比較特殊,需要一點特殊的處理,我們來建立一個簡單的一個實例:

首先我們用Form建立一個簡單的表單:

class UserForm(forms.Form):
username = forms.CharField(required=False)
headImg = forms.FileField()
class UserForm(forms.Form):
username = forms.CharField(required=False)
headImg = forms.FileField()

這個表單就2個字段,要求使用者輸入使用者名稱和上傳一個檔案或圖片。

接下來我們放到模板去渲染,這時候就可以看到一個基本表單了,視圖函數如下:

##

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})

這個函數判斷用戶的是否為POST請求,如果是並驗證是有效的,然後就返回OK,在驗證正確和返回OK的中間放我們的上傳文件代碼,因為只有文件上傳成功能返回OK,我們一會說,如果是GET請求,就直接顯示空表單,讓使用者輸入。

處理上傳文件就是往伺服器上產生一個文件,並將上傳的文件內容寫到新的文件中,所以它的基本函數是這樣的,接收上傳文件物件為參數,然後本地開啟一個文件,從上傳的文件中讀出文件,寫入新的文件中,程式碼如下:

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)

有了這個上傳文件的處理函數,我們就可以進一步完善我們的視圖函數裡,最終的程式碼如下:

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})

這樣就完成了一個檔案的上傳,完畢。

以上所述是小編給大家介紹的django1.8使用表單上傳文件,希望對大家有幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對PHP中文網的支持!

更多django1.8使用表單上傳檔案的實作方法相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn