利用django搭建一个简单的博客系统,记录下整个过程。

建立项目blog,项目文件如下:

博客系统实现

首先建立数据模型,包括用户,博客,文章,文章内容,评论,点赞,分类,标签八张表,代码如下:

#coding:utf-8
from __future__ import unicode_literals

from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.

class UserInfo(AbstractUser):
    phone = models.CharField(max_length=11,null=True,unique=True)
    avatar = models.ImageField(upload_to='avatars/',default='avatars/default.png', verbose_name='头像')#储存在设置的MEDIA_ROOT下的avatars文件夹下
    blog = models.OneToOneField(to='Blog', to_field='nid',null=True)
    def __str__(self):
        return self.username
    class Meta:
        verbose_name = '用户'
        verbose_name_plural = verbose_name

class Article(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=50,verbose_name='文章标题')
    summary = models.CharField(max_length=255)
    create_date = models.DateTimeField(auto_now_add=True)
    comment_count = models.IntegerField(verbose_name='评论数', default=0)
    up_count = models.IntegerField(verbose_name='点赞数', default=0)
    down_count = models.IntegerField(verbose_name='踩数', default=0)
    author = models.ForeignKey(to='UserInfo')
    category = models.ForeignKey(to='Category', to_field='nid', null=True)
    tag = models.ManyToManyField(to='Tag')

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "文章"
        verbose_name_plural = verbose_name

class ArticleContent(models.Model):
    nid = models.AutoField(primary_key=True)
    content = models.TextField()
    article = models.OneToOneField(to='Article',to_field='nid')

    class Meta:
        verbose_name = "文章详情"
        verbose_name_plural = verbose_name

class Comment(models.Model):
    nid = models.AutoField(primary_key=True)
    content = models.CharField(max_length=255)
    article = models.ForeignKey(to='Article',to_field='nid')
    user = models.ForeignKey(to='UserInfo')
    create_date = models.DateTimeField(auto_now_add=True)
    parent_comment = models.ForeignKey('self',null=True,blank=True)  #blank=True设置后 django admin后台可以不填
    # 一条父评论对应多条子评论,设置为自己的外键

    def __str__(self):
        return self.content
    class Meta:
        verbose_name = '评论'
        verbose_name_plural = verbose_name

class ArticleUpDown(models.Model):
    nid = models.AutoField(primary_key=True)
    user = models.ForeignKey(to='UserInfo',null=True)
    article = models.ForeignKey(to='Article', to_field='nid',null=True)
    is_up = models.BooleanField(default=True)

    class Meta:
        unique_together=(('article','user'))     #对于一篇文章,一个用户只能有一个记录,up或down,不能同时出现
        verbose_name = '文章点赞'
        verbose_name_plural = verbose_name

class Category(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    blog = models.ForeignKey(to='Blog',to_field='nid') #一个博客站点包括多个分类

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "文章分类"
        verbose_name_plural = verbose_name

class Tag(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    blog = models.ForeignKey(to='Blog',to_field='nid')

    def __str__(self):
        return self.name
    class Meta:
        verbose_name = '标签'
        verbose_name_plural = verbose_name

class Blog(models.Model):
    nid = models.AutoField(primary_key=True)
    desc = models.CharField(max_length=64)
    site = models.CharField(max_length=32, unique=True) #个人博客站点url唯一
    theme = models.CharField(max_length=32) #个人博客主题样式

    def __str__(self):
        return self.desc
    class Meta:
        verbose_name = '个人博客站点'
        verbose_name_plural = verbose_name
models

相关文章: