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 檔案上傳功能的相關例項程式碼,希望對大家有所幫助!