摘要:Python下有許多款不同的 Web 框架。Django是重量級選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。Django是一個開放源代碼的Web應用框架,由Python寫成。在django中我們可以采用Form類來處理表單,通過實例化處理和在模板中渲染,就可以輕松完成表單的需求,采用django的表單處理方式,能幫我們省去很多的工作,比如驗證不能為空,或者要符合某種模式的輸入
Python下有許多款不同的 Web 框架。Django是重量級選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。
Django是一個開放源代碼的Web應用框架,由Python寫成。
在django中我們可以采用Form類來處理表單,通過實例化處理和在模板中渲染,就可以輕松完成表單的需求,采用django的表單處理方式,能幫我們省去很多的工作,比如驗證不能為空,或者要符合某種模式的輸入才有效,這些處理起來非常方便,不用自己再單獨寫代碼去驗證表單的數(shù)據(jù)正確性,所以在開發(fā)中比較常用,F(xiàn)orm提供了很多表單字段,比如日期,文本類型等,如果你熟悉基本的html,學起來會非常容易上手,所以今天我們不打算對每個表單的字段進行逐一說明,今天只說下表單文件的上傳,因為這個類型比較特殊,需要一點特殊的處理,我們來創(chuàng)建一個簡單的一個實例:
首先我們用Form創(chuàng)建一個簡單的表單:
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個字段,要求用戶輸入用戶名和上傳一個文件或圖片。
接下來我們放到模板中去渲染,這時候就可以看到一個基本表單了,視圖函數(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})
這個函數(shù)判斷用戶的是否為POST請求,如果是并驗證是有效的,然后就返回OK,在驗證正確和返回OK的中間放我們的上傳文件代碼,因為只有文件上傳成功能返回OK,我們一會說,如果是GET請求,就直接顯示一個空表單,讓用戶輸入。
處理上傳文件就是往服務器上生成一個文件,并將上傳的文件內(nèi)容寫到新的文件中,所以它的基本函數(shù)是這樣的,接收上傳文件對象為參數(shù),然后本地打開一個文件,從上傳的文件中讀出文件,寫入新的文件中,代碼如下:
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)
有了這個上傳文件的處理函數(shù),我們就可以進一步完善我們的視圖函數(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})
這樣就完成了一個文件的上傳,完畢。
更多關于django1.8使用表單上傳文件的實現(xiàn)方法請關注PHP中文網(wǎng)(ipnx.cn)其他文章!