Django项目 ------支持Markdown语法和代码高亮的个人博客系统

本文介绍了如何使用Django构建一个支持Markdown语法和代码高亮的个人博客系统,涵盖从数据库模型创建、Django Admin后台发布文章到前端页面的完整实现,包括模板继承、静态文件处理、自定义模板标签等关键步骤,以及Markdown渲染和Pygments代码高亮的集成。此外,还涉及页面侧边栏、分类与归档、文章阅读量统计等功能的实现。
摘要由CSDN通过智能技术生成

文章目录

支持Markdown语法和代码高亮的个人博客系统

完整代码在:https://gitee.com/dadadaliuliuliiu/BlogProject

零、Django

在这里插入图片描述
在这里插入图片描述

面视问 :站点有没有做防护,遇到什么问题,怎么解决?

在这里插入图片描述

一、项目介绍

随着互联网的飞速发展,让Internet应用在全球范围内日趋普及,当今社会也正快速向信息化社会发展,开发个人博客有着非常重要的意义。

1.本文采用的技术

本系统采用 Django 技术,后台开发工具为Pycharm ,前台开发工具为Pycharm ,数据库采用 MySQL 来进行开发。

2.本文实现的功能

  • 该文主要包含游客前台阅读、留言博文功能。后台用户登录、注册、管理个人博客, 精确地记录一篇文章的阅读量, 自动生成文章摘要等功能。
  • 为了让博客文章具有良好的排版,显示更加丰富的格式,支Markdown 语法和代码高亮。 这种博客是一种可以快速发布并且及时更新信息的网站,用户可以简洁快速地完成博客的书写、公布和更新,很好实现用户体验,大大提高了用户的工作效率。

3.系统环境

  • python3.7
  • Django2.2

二、项目准备

1.建立 Django 工程

新建一个django项目自动生成的目录:
在这里插入图片描述

2.项目配置

设置中文和时区
在这里插入图片描述
浏览器端测试
在这里插入图片描述

3.创建admin后台管理的用户及测试

(base) F:\ziliao\python_kaifa\my_code\12_django项目\BlogProject>python manage.py createsuperuser  #创建后台管理的用户
用户名 (leave blank to use 'daliu'): admin
电子邮件地址: admin@qq.com
Password:westos123
Password (again):

(base) F:\ziliao\python_kaifa\my_code\12_django项\BlogProject>python manage.py runserver


浏览器端测试:
登陆刚才创建的用户,进入后台管理:
admin
westos123
在这里插入图片描述

4.创建blog应用 及 注册应用

blog 是整个BlogProject项目的一个功能

(base) F:12_django项目\BlogProject>python manage.py startapp blog

目录中出现blog应用

在BlogProject里注册
在这里插入图片描述
以上是项目准备

三、项目

第一步 数据库模型的创建

1.数据库需求分析

博客最主要的功能就是展示我们写的文章,它需要从某个地方获取博客文章数据才能把文章展示出来,通常来说这个地方就是数据库。我们把写好的文章永久地保存在数据库里,当用户访问我们的博客时,Django 就去数据库里把这些数据取出来展现给用户。

数据库存储的数据其实就是表格的形式。
存储博客文章的数据库表如下所示:
在这里插入图片描述
分析一下我们就会发现一个问题,这 3 篇文章的分类和标签都是相同的,这会产生很多重复数据,当数据量很大时就浪费了存储空间。
我们把分类和标签提取出来,做成单独的数据库表,再把文章和分类、标签关联起来。

下面分别是分类和标签的数据库表:
在这里插入图片描述

2.博客模型代码

#blog/models.py

from datetime import datetime
from django.db import models

# Create your models here.

class Category(models.Model):
    """分类表"""
    #一个类就是一个数据库表
    # Django的数据库模型默认会添加id作为主键
    name=models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Tag(models.Model):
    """标签表"""
    name=models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Post(models.Model):
    """ 博客表 """
    # 文章标题
    title = models.CharField(max_length=70)
    # 文章正文,我们使用了 TextField。
    body = models.TextField()
    # 这两个列分别表示文章的创建时间和最后一次修改时间,存储时间的字段用 DateTimeField 类型。
    # auto_now=True,每次对像更新时更新时间。auto_now_add=True对象第一次创建时设置的时间
    created_time = models.DateTimeField(auto_now_add=True)
    modified_time = models.DateTimeField(auto_now=True)
    # 文章摘要,可以没有文章摘要,但默认情况下 CharField 要求我们必须存入数据,否则就会报错。
    # 指定 CharField 的 blank=True 参数值后就可以允许空值了。
    excerpt = models.CharField(max_length=200, blank=True)
    # on_delete=False在Django1.x版本默认是不级联删除的,可以不做设置. Django2.x一定要自 行指定.
    category = models.ForeignKey(Category, on_delete=False)
    # 多对多关系。 blank=True标签可以不做设置
    tags = models.ManyToManyField(Tag, blank=True)
    # 文章作者,这里 User 是从 django.contrib.auth.models 导入的。
    # 因为我们规定一篇文章只能有一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关 系,和 Category 类似。
    # author = models.ForeignKey(User)

    def __str__(self):
        return self.title

3.数据库迁移

数据库做了改变,就要写入数据库,所以要产生一个迁移文件

(base) F:12_django项目\BlogProject>python manage.py makemigrations  #生成迁移脚本
Migrations for 'blog':
  blog\migrations\0001_initial.py
    - Create model Category
    - Create model Tag
    - Create model Post

(base) F:\12_django项目\BlogProject>python manage.py migrate  # 将迁移信息写入数据库
Operations to perform:
  Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
  Applying blog.0001_initial... OK

第二步 Django Admin 后台发布文章

1.在 Admin 后台注册模型

要在后台注册我们自己创建的几个模型,这样 Django Admin 才能知道它们的存在,注册非常简单,只需要在 blog\admin.py 中加入下面的代码:

blog 是整个BlogProject项目的一个功能 ,Post, Category, Tag是一个类,他们分别对应一个数据库表,表示博文的正文、分类以及标签信息。因此,要在后台注册我们自己创建的几个模型,这样 Django Admin 才能知道它们的存在

# blog/admin.py

from django.contrib import admin
from blog.models import Post, Category, Tag

admin.site.register(Post)
admin.site.register(Category)
admin.site.register(Tag)

运行程序
访问网址 http://127.0.0.1:8000/admin/ 测试是否设置成功?
在这里插入图片描述

2.定制 Admin 后台

在 admin post 列表页面,我们只看到了文章的标题,但是我们希望它显示更加详细的信息,这需要我们来定制 Admin 了,在 admin.py 添加如下代码:

from django.contrib import admin
from blog.models import Post, Category, Tag

class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'created_time', 'modified_time', 'category']
    list_display_links = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值