图片上传(普通+Form+ModelForm)
1,简单图片上传



2,Form上传





def upload_form(request): title = "Form上传" if request.method == "GET": form = UpForm() return render(request, 'upload_form.html', {"form": form, "title": title}) form = UpForm(data=request.POST, files=request.FILES) if form.is_valid(): # {'name': '武沛齐', 'age': 123, 'img': <InMemoryUploadedFile: 图片 1.png (image/png)>} # 1.读取图片内容,写入到文件夹中并获取文件的路径。 image_object = form.cleaned_data.get("img") #file_path="app01/static/img/{}".format(image_object.name) 把路径写死,但是网站显示图片时 路径不要app01 db_file_path=os.path.join("static","img",image_object.name) #避免写分隔符 / file_path=os.path.join("app01",db_file_path) f = open(file_path, mode='wb') for chunk in image_object.chunks(): f.write(chunk) f.close() # 2.将图片文件路径写入到数据库 models.Boss.objects.create( name=form.cleaned_data['name'], age=form.cleaned_data['age'], img=db_file_path, ) return HttpResponse("...") return render(request, 'upload_form.html', {"form": form, "title": title})




3,ModelForm上传(最好)
static:存放静态文件的目录,包括CSS,JS,项目图片
media:用户上传的数据
启用media:
(1)配置url.py

from django.urls import path,re_path
from django.views.static import serve
from django.conf import settings
re_path(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}, name='media'),
(2)配置setting

import os MEDIA_ROOT = os.path.join(BASE_DIR, "media") MEDIA_URL = "/media/"



from app01.utils.bootstrap import BootStrapModelForm class UpModelForm(BootStrapModelForm): bootstrap_exclude_fields = ['img'] class Meta: model = models.City fields = "__all__" def upload_model_form(request): """ 上传文件和数据(modelForm)""" title = "ModelForm上传文件" if request.method == "GET": form = UpModelForm() return render(request, 'upload_form.html', {"form": form, 'title': title}) form = UpModelForm(data=request.POST, files=request.FILES) if form.is_valid(): # 对于文件:自动保存; # 字段 + 上传路径写入到数据库 form.save() return HttpResponse("上传成功") return render(request, 'upload_form.html', {"form": form, 'title': title})

浙公网安备 33010602011771号