用Django搭建个人博客(1)

用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
接下来按照指示填写对应内容即可。
好啦,第一部分就到这里。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值