图片上传(普通+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})

 

posted @ 2022-04-19 10:38  shuqi123  阅读(14)  评论(0)    收藏  举报