python測試開發django-110.ModelForm模型表單上傳文件


前言

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM