这一段时间主要在学习Django开发, 同时巩固一下自己的python语言。
Django是一个功能强大的python web框架,基于此我开发了一个SkyNet博客系统,其中html也使用了semantic ui前端框架,有兴趣的可以去学习一下。
至于django的基础内容我就不赘述了,不熟悉的同学可以去查看我的另外一篇Django初识也有很多比我写的好的博客。
models
首先第一篇我打算写一下模型,在Django中叫做models,一个模型就是一个单一的数据来源,可以简单的理解就是在数据库的一个表,并且models有如下的基本概念:
- 每一个models都是jango.db.models.Model的子类
- models的每一个属性代表这数据库的一个字段
- Django给你自动生成数据库访问API
我定义了三个模型
首先是Blog模型,具体定义如下:
class Blog(models.Model):
POST_STATUS = (
('P', '已发布'),
('D', '已删除'),
('E', '正在编辑'),
)
title = models.CharField('标题',max_length=150)
body = models.TextField('正文')
create_time = models.DateTimeField('创建时间',auto_now_add=True)
modify_time = models.DateTimeField('最后一次修改',auto_now=True)
status = models.CharField('文章状态',max_length=1, choices=POST_STATUS)
views = models.PositiveIntegerField('浏览量', default=0)
likes = models.PositiveIntegerField('喜欢', default=0)
praises = models.PositiveIntegerField('点赞', default=0)
category = models.ManyToManyField('Category',blank=True)
user = models.ForeignKey('User',verbose_name='作者')
def __str__(self):
return self.title
class Meta:
ordering = ('-create_time',)
下面我来一一讲解
- 定义了title和body两个字段,区别是定义了两个不同的Field,charField适用于短的文本,而TextField适用于存储长文本,这是一个小的区别。
- 定义里create_time和modify_time为DateTimeField,该Field包含Date和Time,相对应的还有DateField和TimeField,设置的属性auto_now_add当初次创建的时候设置该字段,而auto_now是每一次models被保存的时候都会更改这个值。
- status设置了一个属性,choices可以进行选择指定的值
- category设置的是ManyToManyField,也就是多对多,而user就设置了外键。
接下来就需要创建Category和User了:
#models.py
class Category(models.Model):
names = models.CharField('类型名称',max_length=20)
desc = models.TextField('分类描述',blank=True, null=True)
def __str__(self):
return self.names
class User(AbstractUser):
pass
这里User是继承了AbstractUser使用Django自带的用户,比较方便。
最后定义了BlogComment用来记录用户评论
#models.py
class BlogComment(models.Model):
user = models.ForeignKey('User', verbose_name='用户')
post = models.ForeignKey('BlogPost', verbose_name='文章')
comment = models.TextField('评论内容',blank=True, null=True)
comment_time = models.DateTimeField('评论时间',auto_now_add=True)
class Meta:
ordering = ('-comment_time',)
基本上SkyNet博客的模型创建到这里就可以了,最后来配置一下admin,在admin展示我们的模型。
#admin.py
class BlogUserAdmin(UserAdmin):
pass
class BlogAdmin(admin.ModelAdmin):
list_display = ('title', 'create_time')
admin.site.register(models.Post, BlogAdmin)
admin.site.register(models.Category)
admin.site.register(models.BlogComment)
admin.site.register(models.User,BlogUserAdmin)
这里要说一下,为了让我们的User能在admin中显示,还需要在settings.py中添加AUTH_USER_MODEL = 'blog.User',是默认的User为我们自定义的User,当然你也可以添加不同的字段来扩充User。
模型创建就先介绍到这了吧!
下一篇:
基于Django开发的SkyNet博客二——base Template