一、實現檔案上傳
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屬性進行展示即可