前言
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
