关于Django项目中,创建类(class)的相关书写代码
上一节我们把项目的"地基"搭好了,这一节来做 Django 中最核心、也最有意思的一步——创建 Class(类)。在 Django 里,我们说的"创建类",通常指的是在models.py中创建数据模型类(Model)。它一句话概括就是:
一句话理解:模型类 = 数据库表。你用 Python 写一个类,Django 就帮你自动生成一张对应的数据库表,一个属性对应一列字段。
一、为什么用 Class 而不是直接写 SQL?
刚学编程时,很多人第一次接触"类"会觉得抽象。其实在 Django 里很好理解:
- 写一个类
Article(文章)→ 数据库里就有一张article表 - 类里的属性
title、content→ 表里的列(字段) - 创建一个类的实例 → 往表里插入一行数据
这种方式叫ORM(对象关系映射):你只管写 Python,SQL 交给 Django。好处是不会写 SQL 也能操作数据库,而且换数据库(MySQL ↔ PostgreSQL)几乎不用改代码。
二、创建一个模型类
打开你的应用目录下的models.py(例如blog/models.py),我们来创建一个博客文章类:
# blog/models.py from django.db import models class Article(models.Model): # 文章标题,字符串类型,最长 100 字符 title = models.CharField('标题', max_length=100) # 文章正文,长文本类型,可以为空(blank=True 表示表单中可不填) content = models.TextField('正文', blank=True) # 阅读量,整数类型,默认为 0 views = models.IntegerField('阅读量', default=0) # 发布时间,创建时自动记录当前时间 created_at = models.DateTimeField('发布时间', auto_now_add=True) def __str__(self): # 让对象在后台和命令行里显示为文章标题,而不是 "Article object (1)" return self.title逐行拆解(新手重点看这里)
class Article(models.Model):继承models.Model是关键!继承了它,Django 才会把这个类当成数据表来处理。CharField(max_length=100):短文本,必须指定最大长度。TextField():长文本,没有长度限制,适合存文章内容。IntegerField(default=0):整数,default给了默认值。DateTimeField(auto_now_add=True):数据第一次保存时自动填入当前时间。- 每个字段的第一个参数(如
'标题')是"人类可读名称",会显示在后台管理界面里。
三、常用字段类型速查表
CharField:短字符串(用户名、标题)TextField:长文本(正文、简介)IntegerField:整数(阅读量、库存)FloatField/DecimalField:小数(价格)BooleanField:真 / 假(是否发布)DateTimeField:日期 + 时间(发布时间)ForeignKey:外键,关联另一张表(文章的作者)
四、让模型生效:两条命令
类写好了,但数据库里还没有这张表。Django 用"迁移(Migration)"机制把模型同步到数据库,在项目根目录的终端里依次执行:
python manage.py makemigrations
这条命令的意思是:"Django,帮我检查模型改动,生成一个迁移文件"。你会看到类似输出:
Migrations for 'blog': blog\migrations\0001_initial.py - Create model Articlepython manage.py migrate
这条命令把迁移文件真正应用到数据库,创建出表。看到一串OK就成功了。
记住口诀:改了models.py→makemigrations→migrate。先"记账",再"执行",两步缺一不可。
五、验证一下:把模型注册到后台
打开blog/admin.py,注册我们的类:
# blog/admin.py from django.contrib import admin from .models import Article admin.site.register(Article)然后创建一个超级管理员账号:
python manage.py createsuperuser
启动开发服务器,浏览器访问http://127.0.0.1:8000/admin:
python manage.py runserver
登录后你就能看到Articles模块,可以像填表单一样添加文章——不需要写一行 SQL!
六、在代码里使用这个类
进入python manage.py shell,体验一下 ORM 的威力:
from blog.models import Article # 创建一篇文章(相当于 INSERT) a = Article(title='我的第一篇博客', content='Hello Django!') a.save() # 查询所有文章(相当于 SELECT *) Article.objects.all() # <QuerySet [<Article: 我的第一篇博客>]> # 按标题查询(相当于 WHERE) Article.objects.get(title='我的第一篇博客')看到没有?这就是__str__方法的功劳——查询结果显示的是文章标题,而不是冷冰冰的 "Article object (1)"。
小结
- 模型类写在
models.py里,必须继承models.Model - 一个类 = 一张表,一个属性 = 一列字段
- 改动模型后记得
makemigrations+migrate - 写
__str__方法让对象显示更友好 - 在
admin.py里注册后可直接用后台管理数据
下一篇:第二章第五节「数据的增删改查」——我们将深入学习 QuerySet 的过滤、排序与分页。有问题欢迎在评论区留言!