笔记10-Django上传图片

本文介绍了Django中处理静态文件的方法,特别是如何上传和管理图片。内容涵盖静态文件配置,后台上传图片的步骤,包括在models.py定义模型类、配置图片保存路径,以及在admin.py注册模型。同时,还讲解了自定义form表单上传图片的视图函数实现,包括获取图片对象、读写二进制数据等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

静态文件

Django中静态文件包括css, 图片, js等文件,一般需要将静态文件放到一个单独的目录中,在html页面中调用需要指定路径. 可以发到项目根目录下也可以放到应用目录下,在settings,py配置目录

STATIC_URL='/static/' 
# 静态文件目录 
STATICFILES_DIRS=[os.path.join(BASE_DIR,"static"),]

然后在目录下创建static目录,主要文件名必须是static,要与settings.py文件中的文件名一致, 在创建images, css , js目录,在项目views.py文件编写相应视图函数和配置相应路径渲染到页面上,然后在templates目录下的.html文件调用即可

上传图片

在Django中上传图片有两种, 一是在后台管理页面上上传图片, 二是在自定义form表单中上传图片, 当上传图片后将图片存在在服务器上,然后将图片的路径存储放在数据表中,并再次建项目调整为调试模式.

后台上传图片 :

首先创建包含图片的模型类PostImg,并将模型类的一个属性值定义成models.ImageField类型
第一步: 在models.py文件下定义模型类PostImg,同时设定一个属性picture,avatar保存图片的文件名,

class PostImg(models.Model):
    picture = models.ImageField(upload_to='avatar')

定义了模型类后,不要忘了生成迁移文件和执行迁移文件
第二步: 配置图片保存路径,因为图片也属于静态文件,因此可以保存到static目录下

# 访问上传资源media路径
MEDIA_URL = "/media/"
# # 存储上传资源的路径
MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")

**第三步:**进入后台上传图片需要建一个管理员
①打开admin.py文件,进行注册PostImg

class PostImgAdmin(admin.ModelAdmin):
    list_display = ['id','picture']
admin.site.register(PostImg,PostImgAdmin)

②运行服务器,输入网址进入admin后台管理找到PostImg,点击add添加数据,选择添加图片,即可在static目录下找到刚才所添加的图片,说明图片成功被添加到服务器目录下。

自定义form表单上传图片

①创建视图函数test_upload
逻辑:
1. 获取图片对象 imgObj=request.FILES.get(‘avatar’)
2. 获取图片的原始名字imgObj.name --pcauto-59.png
3. 一次性获取图片的二进制代码 imgObj.file
4. 读取代码
5. 写入文件

def test_upload(request):
    if request.method=='GET':
        return render(request,'book/test_upload.html')
    else:
        imgObj=request.FILES.get('avatar')
        fname=os.path.join(settings.MEDIA_ROOT,imgObj.name)
        print(fname)
        with open(fname,"wb") as rfile:
            data = imgObj.file.read()
            rfile.write(data)
        return HttpResponse("上传成功")

添加路径

url(r"^test_upload",test_upload),

在templates目录下创建htnl文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/book/test_upload" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="avatar">
    <button>提交</button>
</form>
</body>
</htm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值