Django基础教程(三十二)Django模型的数据字段之文件类字段:别再用土法子存文件了!Django模型『文件字段』大冒险:从迷茫到真香

嘿,伙计们!今天咱们不聊枯燥的CRUD,也不扯复杂的视图逻辑,来点“有血有肉”的东西——Django模型中的文件类字段

想象一下这个场景:你要给自家的小站加个用户上传头像的功能。你一拍脑袋:“简单!我在用户模型里加个avatar_url的字符字段,存个图片链接不就完了?”

打住!快停下你危险的想法!

这么干,你会发现一堆烂摊子:文件往服务器哪个角落扔?怎么保证文件名不冲突?用户换了头像,旧图怎么清理?万一有人上传了个1个G的电影,你服务器硬盘不就瞬间爆炸?

所以,是时候请出Django内置的两位“文件管家”——FileFieldImageField。它们能帮你优雅地解决上述所有问题,让你高呼:“Django,不愧是你!”

第一章:认识两位“管家”——FileField vs. ImageField

这俩兄弟长得像,但本事各有侧重。

  1. FileField:全能型选手
    它是老大哥,什么文件都能接。PPT、Word、PDF、TXT、压缩包……来者不拒。它的座右铭是:“我不管你是啥,存就完了!”
  2. ImageField:图像专属顾问
    它是FileField的亲儿子,继承了他爸的所有本事,但额外附加了“图像专精”技能。它会自动验证上传的是不是有效图片(比如你没法把.mp3伪装成.jpg上传),并且贴心地在后台为你记录图片的高度宽度。要使用它,别忘了先安装Python的图像处理库Pillow
pip install Pillow
第二章:开整!基础配置与“神秘”的MEDIA_ROOT

光说不练假把式,咱们直接上代码。假设我们正在构建一个“摸鱼博客”,用户可以在上面发文章,并上传文章封面图。

首先,在models.py里定义模型:

from django.db import models

# 注意:ImageField依赖Pillow!
class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    
    # 核心角色登场!
    cover_image = models.ImageField(upload_to='covers/')
    attachment = models.FileField(upload_to='attachments/', blank=True, null=True)
    
    def __str__(self):
        return self.title

看到那个upload_to='covers/'了吗?这是最关键的一个参数。它告诉Django:“嘿,用户上传的封面图,都给我放到 covers/</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值