Django檔案上傳

2021-10-01 07:24:40 字數 2937 閱讀 9394

檔案上傳是**開發中非常常見的功能。這裡詳細講述如何在django中實現檔案的上傳功能。

前端**部分:

action=""

enctype

="multipart/form-data"

method

="post"

>

type

="file"

name

="file"

>

type

="submit"

value

="提交"

>

form

>

後端**部分:

後端的主要工作是接收檔案。然後儲存檔案。接收檔案的方式跟接收post的方式是一樣的,只不過是通過files來實現。示例**如下:

# 檔案上傳(form表單的形式)

)

html**部分:

type

="file"

name

="file"

id="btn"

>

js**部分:

因為csrf的問題,所以引用了xfzajax

""

>

<

/script>

"">

<

/script>

var btn =$(

'#btn');

btn.

change

(function()

}})}

);<

/script>

後端部分**:

後端**和form表單的**一致,只不過返回值需要和符合規範

def

upload_file

(request)

:if request.method ==

'get'

:return render(request,

'cms/test.html'

)else

:file

= request.files.get(

'file'

)print

(file

)with

open

('1111'

,'wb'

)as fp:

for i in

file

.chunks():

fp.write(i)

return restful.ok(

)

如果想要想上傳的檔案歸納到一起,就需要指定media_root和media_url

media_root = os.path.join(base_dir,

'media'

)media_url = '/media/

然後我們可以在urls.py中新增media_root目錄下的訪問路徑。示例**如下:

from django.conf.urls.static import static

from django.conf import settings

urlpatterns =

[ path(

'', views.index),]

+ static(settings.media_url,document_root=settings.media_root)

最後在檢視函式中修改一下檔案路徑,示例**如下:

from django.conf import settings

import os

defupload_file

(request)

:if request.method ==

'get'

:return render(request,

'cms/test.html'

)else

:file

= request.files.get(

'file'

)print

(file

)with

open

(os.path.join(settings.media_root,

file

.name)

,'wb'

)as fp:

for i in

file

.chunks():

fp.write(i)

return restful.ok(

)

django 檔案上傳

檔案上傳 當django處理上傳乙個檔案的時候,檔案資料被放在request.files中。這個文件解釋檔案怎麼樣被儲存在磁碟上或者記憶體中,怎樣定製預設的行為。基本檔案上傳 考慮乙個包含filefield的簡單的表單 from django import forms class uploadfil...

django 檔案上傳

檔案上傳 當django處理上傳乙個檔案的時候,檔案資料被放在request.files中。這個文件解釋檔案怎麼樣被儲存在磁碟上或者記憶體中,怎樣定製預設的行為。基本檔案上傳 考慮乙個包含filefield的簡單的表單 from django import forms class uploadfil...

Django檔案上傳

lang en charset utf 8 titletitle head action home method post enctype multipart form data type file name file type submit value 提交 p form div body htm...