基于form的django图片上传

第一种,直接上传

views

class TestimgForm(forms.Form):
    title = fields.CharField()
    img = fields.FileField()
def testimg(request):
    import os,time
    if request.method == 'GET':
        img = TestimgForm()
        return render(request, 'backend/testimg.html',{'img':img})
    else:
        obj = TestimgForm(request.POST, request.FILES)
	if obj.is_valid():
	    img = request.FILES.get('img')
            time = time.strftime('%Y%m%d%H%M%S')
             ext = os.path.splitext(img.name)[1]
	     file_path = os.path.join('upload/article',time+ext)
                #将图片重命名
             f = open(file_path,'wb')
             for line in imgs.chunks():
             f.write(line)
             f.close()
	     return HttpResponse('上传成功')

第二种,写入数据库

html

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Title</title>
</head>
<body>
<form action="testimg" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ img }}
    <input type="submit" value="提交"/>
</form>
</body>
</html>

views

class TestimgForm(forms.Form):
    title = fields.CharField()
    img = fields.FileField()
def testimg(request):
    import os,time
    if request.method == 'GET':
        img = TestimgForm()
        return render(request, 'backend/testimg.html',{'img':img})
    else:
        obj = TestimgForm(request.POST, request.FILES)
		if obj.is_valid():
		title = obj.cleaned_data['title']
            img = obj.cleaned_data['img']
        time = time.strftime('%Y%m%d%H%M%S')
        ext = os.path.splitext(img.name)[1]
		img.name = time + ext
            Imgtest.objects.create(title=title,img=img)
		return HttpResponse('上传成功')

models.py

class Imgtest(models.Model):
    title = models.CharField(verbose_name='标题',max_length=32,)
    img = models.ImageField(verbose_name='缩略图',upload_to="./article/",
                            help_text="大小200*200,不超过200k",
                            default="/upload/article/common.jpg")

完整代码

class TestimgForm(forms.Form):
    title = fields.CharField()
    img = fields.FileField()
def testimg(request):
    import os,time
    if request.method == 'GET':
        img = TestimgForm()
        return render(request, 'backend/testimg.html',{'img':img})
    else:
        obj = TestimgForm(request.POST, request.FILES)
        if obj.is_valid():
        #(request.FILES['file'])
            # title = request.FILES.get('title')
            # img = request.FILES.get('img')
            title = obj.cleaned_data['title']
            img = obj.cleaned_data['img']
            time = time.strftime('%Y%m%d%H%M%S')
            ext = os.path.splitext(img.name)[1]
            img.name = time + ext
            # Imgtest.objects.create(title=title,img=img)
            # img是对象(文件大小,文件名称,文件内容。。。)
            # file_path = os.path.join('upload/article',time+ext)
            file_path = os.path.join('upload/article', img.name)
            f = open(file_path,'wb')
            for line in img.chunks():
                f.write(line)
            f.close()
            return HttpResponse('...')

原文地址:https://www.cnblogs.com/fungitive/p/9136119.html