django實現檔案上傳

來源:互聯網
上載者:User

一、實現檔案上傳

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'),


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

二、展示上傳的檔案

(例如圖片等)

 

根據django官方文檔的說明:https://docs.djangoproject.com/en/1.7/topics/files/#using-files-in-models

我們定義的模型中一個欄位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 settingsfrom django.conf.urls.static import staticurlpatterns = 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屬性進行展示即可

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.