python測試開發django-110.ModelForm模型表單上傳檔案
阿新 • • 發佈:2021-07-15
前言
django開發頁面上的檔案上傳功能
模型
models.py 設計資料模型,upload_to引數是指定檔案上傳的路徑
# 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ class Upfile(models.Model): """上傳檔案""" file = models.FileField(upload_to="upload") title = models.CharField(max_length=30) timestamp = models.DateTimeField(auto_now_add=True)
在setting中新增2個引數,檔案上傳到專案的media目錄
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
檢視功能
post提交資料的時候,通過request.FILES
獲取檔案引數
from .models import Upfile from django.views import View from django import forms # 作者-上海悠悠 QQ交流群:717225969 # blog地址 https://www.cnblogs.com/yoyoketang/ class UpFileModelForm(forms.ModelForm): """上傳檔案""" class Meta: model = Upfile fields = ["file", "title"] class UpFileModelView(View): def get(self, request): form_obj = UpFileModelForm() return render(request, "upfile.html", locals()) def post(self, request): form_obj = UpFileModelForm(request.POST, request.FILES) if form_obj.is_valid(): f = form_obj.save() msg = "儲存成功" return JsonResponse({"code": 0, "msg": "success", "data": "/media/"+str(f.file)}) else: msg = "引數不合法" return render(request, "upfile.html", locals())
模板
form表單需設定enctype="multipart/form-data"
屬性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <body> <form action="" method="POST" id="detail-form" enctype="multipart/form-data"> {% csrf_token %} {% for field in form_obj %} <p> {{ field.label_tag }} {{ field }} {{ field.errors }} </p> {% endfor %} <p> {% if msg %} {{ msg }} {% endif %} </p> <p> <input type="submit" value="提交" > </p> </form> </body> </body> </html>
urls.py設定訪問地址
from django.conf.urls import url
from django.views.static import serve
from . import settings
urlpatterns = [
url('^upimage$', views.UpFileModelView.as_view()),
url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
]
實現效果
訪問頁面
選擇檔案上傳
上傳成功返回
複製返回的圖片地址,拼接請求可以訪問上傳的圖片http://localhost:8000/media/upload/21_fyErshM.png