一、编辑blog目录下的***models.py***文件
默认的“models.py”文件中,只有一条语句:
from django.db import models
因为有日期方面的处理timezone,先安装一个模块(大概需要吧,不安装试试)
pip install pytz
我们在后边添加一个class类,用作文章发布。完整语句如下:
from django.db import models#所有数据库类都继承这个
from django.utils import timezone#导入时区模块
from django.comtrib.auth.models import User#导入用户模块
class Post(models.model):#数据库类,必须是model的子类
title=models.CharField(max_length=250)#文章标题定义为字符串,长度不超过250
slug=models.SlugField(max_length=250,unique_for_date='publish')#短网址(这个翻译不好),用SlugField 构建语义化url,“unique_for_date”表示日期约束,用日期和帖子的名字来构建url,“publish”是等一下要定义的发布日期,
#暂时有点疑问?slug自动生成了个什么格式的东西呢?
#其实slug是数据模型中的一个字段,存储博文名称的
#title在这里可以作为分类使用
author=models.ForeighKey(User,related_name="blog_posts")#作者就是登陆用户,是个外键,等一下要定义用户表,从那里边找数据,多对一的方式。
#暂时有个疑问,用户表是啥?电脑是怎么知道的?这个在下一课,“4 创建后台管理站点”中有。User应该是需要定义的class表,在User字表中定义外键时,增加related_name字段(反向名称)指定这个字表在主表中对应的外键属性
body=models.TextField()#发布的文章内容,定义成了一个大容量的文本字段,只有文字。
publish=models.DateTimeField(default=timezone.now)#发布时间,默认为当前日期。
created=models.DateTimeField(auto_now_add=True)#文章创建时间,以后修改时,这个时间不会变化
updated=models.DateTimeField(auto_now=True)#文章修改的时间,每次修改都会变化
STATUS_CHOICES=(('draft','Draft'),('published','Published'),)#设置一个状态选项,草稿或者已发布
status=models.CharField=(max_length=10,choices=STATUS_CHOICES,default='draft')#定义一个当前状态,只能从“已发布”和“草稿”里选择一个,默认是“草稿”
class Meta:#在模型类中的Meta子类中定义元数据,Mata是class Post的子类
ordering=('-publish',)#以发布日期排序
def _Str_(self):
return self.title
#默认返回title标题吗?
#这个方法用于后台显示文章,在第五课,后台编辑用到
关于title和slug的问题
title=models.CharField(max_length=250)#文章所在分类
slug=models.SlugField(max_length=250,unique_for_date=‘publish’)#文章标题
比如
title:python目录,里边可以有很多文章
slug:就是这个Python目录下的某一篇文章名字
“models.py”中的字段必须是 models.Xxx.Field() 这样的格式,括号里是属性。
Meta的元数据包括:“数据库表名称”和“数据库字段排序”
abstract——True 或 False ,标识本类是否为抽象的基类
app_label——定义这个类所属的应用,app_label=‘blog’
db_tabel——映射数据表名
ordering——按照默认的字段进行排序,+升序,-降序
二、数据迁移
在一级目录mysite下运行两条cmd命令:
python manage.py makemigrations
此时给数据做规范,会生成一些0001之类的文件夹
python manage.py migrate
此时会生成一个数据库文件db.sqlite3