用Django搭建一个简单的个人博客
环境介绍
python3.8.5
windows 10 ( 64位 )
Django 3.1.2
pycharm
我们用pycharm来开始我们项目的开发
首先打开 pycharm 点击左上角的 File 按钮,出现下拉框点击 New Project
出现如上图,依此点击 Django >> location命名:csdn_lx>>Application name命名:csdn>>Create
我们的django项目就创建好了
csdn_lx是项目名
csdn是App名
框住的文件介绍:
models.py:这里构建与数据库相关的各种信息表。
views.py:是里构建我们的视图层,与来与用户交互。
settings.py:配置文件
urls.py:路由控制文件
templates:存放各种 Html 文件
此时我们需要在 settings.py 文件中配置上我们的数据库,我用到的是 mysql
需要在settings.py 进行以下操作
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'csdn_lx', # 要连接的数据库,连接前需要创建好
'USER': 'root', # 连接数据库的用户名
'PASSWORD': '', # 连接数据库的密码
'HOST': '127.0.0.1', # 连接主机,默认本级
'PORT': 3306 # 端口 默认3306
}
}
此时,我们就可以开始在models.py中构建出我们项目中所要用到的表。
我们需要创建的表如下:
用户信息表、个人站点表、文章表、文章问类表、文章标签表、点赞表、评论表
from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.
class UserInfo(AbstractUser):
'''
用户信息表
'''
nid = models.AutoField(primary_key=True)
phone = models.CharField(max_length=11, null=True, unique=True)
avatar = models.FileField(upload_to='avatars/', default='/avatars/default.png')
email = models.EmailField(verbose_name='邮箱')
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
blog = models.OneToOneField(to='Blog', to_field='nid', null=True, on_delete=models.CASCADE)
def __str__(self):
return self.username
class Blog(models.Model):
'''
个人站点信息表
'''
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='个人博客标题', max_length=32)
site_name = models.CharField(verbose_name='站点名称', max_length=32)
def __str__(self):
return self.title
class Category(models.Model):
'''
文章分类
'''
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='分类标题', max_length=32)
blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid', on_delete=models.CASCADE)
def __str__(self):
return self.title
class Tag(models.Model):
'''
标签表
'''
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='标签名称', max_length=32)
blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid', on_delete=models.CASCADE)
def __str__(self):
return self.title
class Aticle(models.Model):
'''
文章表
'''
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='文章标题', max_length=50)
desc = models.CharField(verbose_name='文章描述', max_length=255)
create_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)
content = models.TextField()
comment_count = models.IntegerField(default=0) # 这四张表分别记录 评论数、阅读数、点赞和踩灭数
read_count = models.IntegerField(default=0)
up_count = models.IntegerField(default=0)
down_count = models.IntegerField(default=0)
user = models.ForeignKey(verbose_name='作者', to='UserInfo', to_field='nid', on_delete=models.CASCADE)
category = models.ForeignKey(verbose_name='文章分类', to='Category', to_field='nid', on_delete=models.CASCADE)
tag = models.ManyToManyField(verbose_name='文章标签', to='Tag', through='Aticle2Tag', through_fields=('article', 'tag'))
def __str__(self):
return self.title
class Aticle2Tag(models.Model):
'''
文章与标签多对多关系
'''
nid = models.AutoField(primary_key=True)
article = models.ForeignKey(verbose_name='文章', to='Aticle', to_field='nid', on_delete=models.CASCADE)
tag = models.ForeignKey(verbose_name='标签', to='Tag', to_field='nid', on_delete=models.CASCADE)
class Meta:
unique_together = [
('article', 'tag'),
]
class ArticleUpDown(models.Model):
'''
点赞表
'''
nid = models.AutoField(primary_key=True)
user = models.ForeignKey(to='UserInfo', null=True, on_delete=models.CASCADE)
article = models.ForeignKey(to='Aticle', null=True, on_delete=models.CASCADE)
is_up = models.BooleanField(default=True)
class Meta:
unique_together = [
('user', 'article'),
]
class Comment(models.Model):
'''评论表'''
nid = models.AutoField(primary_key=True)
ariticle = models.ForeignKey(verbose_name='评论文章', to='Aticle', to_field='nid', on_delete=models.CASCADE)
user = models.ForeignKey(verbose_name='评论者', to='UserInfo', to_field='nid', on_delete=models.CASCADE)
content = models.CharField(verbose_name='评论内容', max_length=255)
create_time = models.DateTimeField(verbose_name='评论时间', auto_now_add=True)
parent_comment = models.ForeignKey('self', null=True, on_delete=models.CASCADE) # 子关联,区分父评论和子评论
def __str__(self):
return self.content
因为我们的UserInfo继承了AbstractUser ,所以需要在settings.py中添加
AUTH_USER_MODEL='csdn.UserInfo’
接下来我们开始进行数据迁移
首先在settings.py所在的那个文件夹中的__init__.py中加入
import pymysql
pymysql.install_as_MySQLdb()
然后就在 D:\Pycharm2019.3\csdn_lx> 后面输入以下指令
python manage,py makemigrations
python manage.py migrate
此时我们就完成了数据迁移
接下来我们让数据能够在pycharm中显示
点击pycharm左上方向有一个 Database
然后依此点击以下按钮
然后进行以下配置
然后我们再次点击Database就可以看到数据库中的每张表了
我们先来创建一个超级用户(管理员账户)
点击Terminal 输入指令:python manage.py createsuperuser
接下来按照指示填写对应内容即可。
好啦,第一部分就到这里。