django 12、實現檔案上傳
阿新 • • 發佈:2019-01-24
一、實現檔案上傳
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屬性進行展示即可