基于Django开发的SkyNet博客一——创建模型

这一段时间主要在学习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',)

下面我来一一讲解

  1. 定义了title和body两个字段,区别是定义了两个不同的Field,charField适用于短的文本,而TextField适用于存储长文本,这是一个小的区别。
  2. 定义里create_time和modify_time为DateTimeField,该Field包含Date和Time,相对应的还有DateField和TimeField,设置的属性auto_now_add当初次创建的时候设置该字段,而auto_now是每一次models被保存的时候都会更改这个值。
  3. status设置了一个属性,choices可以进行选择指定的值
  4. 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

你可能感兴趣的:(基于Django开发的SkyNet博客一——创建模型)