亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

django1.8使用表單上傳文件的實(shí)現(xiàn)方法

Original 2017-01-09 14:10:53 381
abstract:Python下有許多款不同的 Web 框架。Django是重量級(jí)選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成。在django中我們可以采用Form類(lèi)來(lái)處理表單,通過(guò)實(shí)例化處理和在模板中渲染,就可以輕松完成表單的需求,采用django的表單處理方式,能幫我們省去很多的工作,比如驗(yàn)證不能為空,或者要符合某種模式的輸入

Python下有許多款不同的 Web 框架。Django是重量級(jí)選手中最有代表性的一位。許多成功的網(wǎng)站和APP都基于Django。

Django是一個(gè)開(kāi)放源代碼的Web應(yīng)用框架,由Python寫(xiě)成。

在django中我們可以采用Form類(lèi)來(lái)處理表單,通過(guò)實(shí)例化處理和在模板中渲染,就可以輕松完成表單的需求,采用django的表單處理方式,能幫我們省去很多的工作,比如驗(yàn)證不能為空,或者要符合某種模式的輸入才有效,這些處理起來(lái)非常方便,不用自己再單獨(dú)寫(xiě)代碼去驗(yàn)證表單的數(shù)據(jù)正確性,所以在開(kāi)發(fā)中比較常用,F(xiàn)orm提供了很多表單字段,比如日期,文本類(lèi)型等,如果你熟悉基本的html,學(xué)起來(lái)會(huì)非常容易上手,所以今天我們不打算對(duì)每個(gè)表單的字段進(jìn)行逐一說(shuō)明,今天只說(shuō)下表單文件的上傳,因?yàn)檫@個(gè)類(lèi)型比較特殊,需要一點(diǎn)特殊的處理,我們來(lái)創(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è)字段,要求用戶(hù)輸入用戶(hù)名和上傳一個(gè)文件或圖片。

接下來(lái)我們放到模板中去渲染,這時(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ù)判斷用戶(hù)的是否為POST請(qǐng)求,如果是并驗(yàn)證是有效的,然后就返回OK,在驗(yàn)證正確和返回OK的中間放我們的上傳文件代碼,因?yàn)橹挥形募蟼鞒晒δ芊祷豋K,我們一會(huì)說(shuō),如果是GET請(qǐng)求,就直接顯示一個(gè)空表單,讓用戶(hù)輸入。

處理上傳文件就是往服務(wù)器上生成一個(gè)文件,并將上傳的文件內(nèi)容寫(xiě)到新的文件中,所以它的基本函數(shù)是這樣的,接收上傳文件對(duì)象為參數(shù),然后本地打開(kāi)一個(gè)文件,從上傳的文件中讀出文件,寫(xiě)入新的文件中,代碼如下:

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è)文件的上傳,完畢。

更多關(guān)于django1.8使用表單上傳文件的實(shí)現(xiàn)方法請(qǐng)關(guān)注PHP中文網(wǎng)(ipnx.cn)其他文章!

Release Notes

Popular Entries