利用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