22-Django上传图片(后台管理上传和用户自己上传)

用户自己上传

项目的setting里面配置MEDIA_ROOT = os.path.join(BASE_DIR,'static/media') #设置上传文件的保存目录
在static文件夹里新建media文件夹
在这里插入图片描述

写上传的html的页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" enctype="multipart/form-data" action="/upload_handle">
    {% csrf_token %}
    <input type="file" name="pic"><br/>
    <input type="submit" value="上传">
</form>
</body>
</html>

注意表单一定要是post方式,还有enctype参数,以及csrf防护.

到项目的urls.py里配置upload_handle对应的视图,省略.

models.py里写上传图片的类:

class PicTest(models.Model):
    '''上传图片'''
    good_pic = models.ImageField(upload_to='booktest')

直接看uploa的_handle视图函数:(为了使用setting,要先导入from django.conf import settings)

def upload_handle(request):
    '''上传图片处理'''
    # 1.拿到上传文件的处理对象
    pic = request.FILES['pic']

    # 2.创建文件
    save_path = '%s/booktest/%s'%(settings.MEDIA_ROOT,pic.name)
    with open(save_path,'wb') as f:

        # 3.获取上传文件的内容,并写到创建的文件中
        for content in pic.chunks():
            f.write(content)

    # 4.在数据库中保存上传记录
    PicTest.objects.create(good_pic='booktest/%s'%pic.name)
    # 5.返回
    return HttpResponse('ok')

后台管理上传

from booktest.models import AreaInfo,PicTest

导入

admin.site.register(PicTest)

注册

127.0.0.1/admin访问就可以看了

猜你喜欢

转载自blog.csdn.net/qq_34788903/article/details/87989007