嘿,伙计们!今天咱们不聊枯燥的CRUD,也不扯复杂的视图逻辑,来点“有血有肉”的东西——Django模型中的文件类字段。
想象一下这个场景:你要给自家的小站加个用户上传头像的功能。你一拍脑袋:“简单!我在用户模型里加个avatar_url的字符字段,存个图片链接不就完了?”
打住!快停下你危险的想法!
这么干,你会发现一堆烂摊子:文件往服务器哪个角落扔?怎么保证文件名不冲突?用户换了头像,旧图怎么清理?万一有人上传了个1个G的电影,你服务器硬盘不就瞬间爆炸?
所以,是时候请出Django内置的两位“文件管家”——FileField和ImageField。它们能帮你优雅地解决上述所有问题,让你高呼:“Django,不愧是你!”
第一章:认识两位“管家”——FileField vs. ImageField
这俩兄弟长得像,但本事各有侧重。
FileField:全能型选手
它是老大哥,什么文件都能接。PPT、Word、PDF、TXT、压缩包……来者不拒。它的座右铭是:“我不管你是啥,存就完了!”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/</

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



