1. 程式人生 > 程式設計 >django 檔案上傳功能的相關例項程式碼(簡單易懂)

django 檔案上傳功能的相關例項程式碼(簡單易懂)

一、新建專案,在主配置檔案中,修改以下內容:

ALLOWED_HOSTS = ['127.0.0.1','localhost']
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'),MEDIA_ROOT]

在該專案下新建一個與 manage.py 同級的目錄檔案,目錄名為media。
在media資料夾下新建一個子目錄,作為上傳檔案的儲存位置,這裡我把該子目錄命名為headpics。即模擬儲存使用者選擇的頭像檔案。

二、新建APP(這裡我把該app命名為uploadFile)

執行如下命令將建立app:

python manage.py startapp uploadFile

在uploadFile下的models.py檔案下,貼上如下程式碼:

from django.db import models

class User(models.Model):
 name = models.CharField(max_length=12)
 file = models.FileField(upload_to='headpics')

不要忘了在主配置檔案的 INSTALLED_APPS 列表下注冊該app。

然後在控制檯執行如下命令:

python manage.py makemigrations uploadFile
python manage.py migrate uploadFile

三、編寫路由

在主路由模組下貼上如下程式碼:

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
 path('admin/',admin.site.urls),path('index/',include("uploadFile.urls")),]

admin 是pycharm自動新增的,不需要的話可以刪去。


然後在uploadFile下新建urls.py模組,即編寫二級路由。

在二級路由下貼上如下程式碼:

from django.urls import path
from . import views

app_name = 'upload'
urlpatterns = [
 path('file/',views.userfile,name='userfile'),path('file/detail/',views.detailFile,name='delfile'),]

四、編寫檢視函式

在uploadFile的views.py檔案下貼上如下程式碼:

from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse
import uuid,os
from .models import User
# Create your views here.
def userfile(request):
 return render(request,'uploadFile/uploadFile.html')
def detailFile(request):
 if request.method == "POST":
  name = request.POST.get('name')
  file = request.FILES.get('file',None)
  if not file:
   return HttpResponse("<p>您還未上傳頭像!</p>")
  file.name = getUUID(file.name)
  user = User.objects.create(name=name,file=file)
  with open(os.path.join("D:\\upload",file.name),'wb+') as relfile:
   for crunk in file.chunks():
    relfile.write(crunk)
  return HttpResponse("<p>上傳成功!</p>")
 else:
  pass
def getUUID(filename):
 id = str(uuid.uuid4())
 extend = os.path.splitext(filename)[1]
 return id+extend

五、編寫模板

在uploadFile下新建一個叫做templates的目錄,在該目錄下再新建一個叫做uploadFile的子目錄,在該子目錄下再新建一個叫做uploadFile的html檔案。

在該html檔案內貼上如下程式碼:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>upload</title>
</head>
<body>
 <form action="{% url 'upload:delfile' %}" method="post" enctype="multipart/form-data">
  {% csrf_token %}
  暱稱 :<input type="text" name="name"><br><br>
  頭像 : <input type="file" name="file"><br><br>
  <input type="submit" value="提交">
 </form>
</body>
</html>

大功告成!

執行之後,在瀏覽器 輸入 http://127.0.0.1:8000/index/file/ 可以看到介面效果,如下:

輸入之後點選提交,資料就會被實時儲存在資料庫中,不過要記得在資料庫中 file 欄位儲存的其實是檔案的路徑資訊,是一個字串。

同時,該檔案也會儲存在剛才建立的upload資料夾下。

可以嘗試新增更多內容,比如在提交成功之後返回一個效果頁面等。

總結

以上所述是小編給大家介紹的django 檔案上傳功能的相關例項程式碼,希望對大家有所幫助!