1. 程式人生 > >django 12、實現檔案上傳

django 12、實現檔案上傳

一、實現檔案上傳

1定義模型

#上傳作品表:作品名稱,使用者名稱
class Upload(models.Model):
    #注意這裡的使用者名稱是FileField型別
    name = models.FileField(upload_to = './upload/')
    username = models.CharField(max_length = 20)

    def __str__(self):
        return self.name

2定義模版

    <form method="post" enctype="multipart/form-data" >
        {{uf.as_p}}
        <input type="submit" value="上傳"/>
    </form>

3定義檢視

def user(request):
    print "user"
    if request.method == "POST":
        uf = UploadFileForm(request.POST,request.FILES)
        if uf.is_valid():
            #獲取表單資訊
            #username = uf.cleaned_data['username']
            headImg = uf.cleaned_data['headImg']
            print str(headImg)
            #寫入資料庫
            upload = Upload()
            upload.name = headImg
            upload.username = request.user.username
            upload.save()
            return HttpResponse('upload ok!')
        else:
            return HttpResponse("表單驗證失敗")
    else:
        uf = UploadFileForm()
        return render_to_response('user.html',{'uf':uf , "user":request.user})

4配置url

 url(r'^user/$' , 'account.views.user'),


這樣就實現了檔案上傳功能

二、展示上傳的檔案

(例如圖片等)

我們定義的模型中一個欄位name是檔案欄位,但是其實儲存的是上傳的圖片或檔案的路徑

name = models.FileField(upload_to = './upload/')

我們需要配置upload上傳路徑

1在settings.py中新增

MEDIA_ROOT = os.path.join(BASE_DIR, 'upload')
MEDIA_URL = '/upload/'


2在url中配置路徑:

達成的效果是: 讓 MEDIA_URL 等同於 MEDIAA_ROOT

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = patterns('',
    # Examples:

    url(r'^admin/', include(admin.site.urls)),

) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)


注意:在 patterns(....)後面加上 static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

3在模板中設定圖片或檔案路徑

<body>
    {% if upload %}
        <!--在你的欄位中獲取url屬性進行展示-->
        <img src="{{upload.name.url}}" />
    {% endif %}
</body>


關鍵在於: 比如你從後臺獲取查詢的資料叫做upload , upload.name是FileField的欄位,只需要獲取其url屬性進行展示即可