基于Django框架的博客平台开发与实现(一)
感谢
感谢锋哥的指导。由于我使用的是MySQL 5.7版本,因此对项目代码进行了相应的调整。详细修改过程及源代码,请参考锋哥在B站发布的视频教程:基于Django框架的博客系统的开发与实现https://www.bilibili.com/video/BV1GJ6uYpEwK在此,也向锋哥表示诚挚的谢意!
摘要
本项目利用Django框架,结合现代Web开发的最佳实践,构建了一个功能全面、易于扩展的博客平台。通过此项目,开发者可以学习到如何使用Django进行模型设计、视图逻辑编写、模板渲染以及静态文件管理等核心技能,同时掌握了用户认证、文章管理等博客系统必备功能的实现方法。
环境配置要求
- Python版本:3.9
- 编程软件:pycharm
- Django框架:3.1.14
- 数据库:MySQL5.7
- 其他依赖:根据requirements.txt安装相应Python包
准备工作:
打开数据库:
本项目采用虚拟环境机制,为每个项目创建独立的Python运行环境(pycharm可以轻松做到这一点)。这种方式不仅避免了不同项目间依赖包版本的冲突,还确保了系统安装的Python版本不会因其他项目的变更而受到影响,从而提升了开发环境的稳定性和项目的可移植性。
后端架构搭建
功能模块细分:
新建Django项目:
直接用pycharm左上角的File新建一个Django项目,命名为Vlog_system。这里注意一下Run manage.py Task的位置:
点击 Run manage.py Task ,然后分别输入这五个指令:
startapp user
startapp album
startapp link
startapp message
startapp article
这样就创建好了5个模块。
在项目的settings.py中的 INSTALLED_APPS列表中加入刚刚建立的五个模块项目。
然后在每个模块项目下新建一个urls.py。
项目总urls.py配置:
# 记得要导入include,即
# from django.urls import path, include
path('user/', include('user.urls')), # 用户模块
path('link/', include('link.urls')), # 友情链接模块
path('album/', include('album.urls')), # 相册模块
path('message/', include('message.urls')), # 留言模块
path('', include('article.urls')), # 帖子模块
这段代码表示什么呢?举个例子:user/xxx开头的请求,全部分发到用户模块去,具体xxx请求再去user.urls里去匹配处理。其它模块同理;
Admin后台系统支持中文配置,settings.py文件MIDDLEWARE中间件配置。
# 使用中文
'django.middleware.locale.LocaleMiddleware',
数据库配置,使用mysql,我这里是用的Navicat来管理数据库,大家也可以用其它的。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_blog2',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': '3306', # 默认3306,根据navicat上的
},
}
数据库相关配置:
新建一个数据库,命名为db_blog2。
下载安装pymysql和mysqlclient(注意要看它是否支持MySQL5.0);
直接运行的话会报错:
原因:新建模块中的urls.py是空的,所以会报错。
因此,为了能够边编写边测试,我们可以先注释掉它们。
编写测试接口:
MySQL5.7 兼容性修改
由于我使用的MySQL数据库版本是5.7.17,在后续执行makemigrations时会报错,错误信息为:django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.17),这通常是因为使用的 Django 版本或者某个依赖库(例如 mysqlclient)设定了最低支持的 MySQL 版本是 8.0。
因此,我们需要降级Django以及相关依赖。
Django<3.2 # 根据实际情况调整版本号
mysqlclient==2.0.3 # 或其他已知兼容 MySQL 5.7 的版本
原来的包版本(不兼容MySQL 5.7,会报错)
现在的包版本
写测试接口:
现在我们可以先写一个测试接口:
先打开article模块的models.py 创建ArticleType
class ArticleType(models.Model):
"""
博客类别实体
"""
id = models.AutoField(primary_key=True)
name = models.CharField('类别名称', max_length=50)
def __str__(self):
return self.name
class Meta:
verbose_name = '博客类别管理'
verbose_name_plural = '博客类别管理'
点击Run manage.py Task,输入makemigrations article生成迁移文件
makemigrations article
执行成功后:
然后再用 manager.py命令工具输入migrate article执行迁移文件。
migrate article
数据库表已经生成,我们再加点数据:
接口的开发方式尽可能的去遵循Restful规范:
然后在article模块下的views.py里新建TestView
from django.views import View
from django.http import JsonResponse
class TestView(View):
def get(self, request):
return JsonResponse({'code': 200, 'info': '测试!'})
article模块下的urls.py定义下请求映射:
from django.urls import path
from article.views import TestView
urlpatterns = [
path('test', TestView.as_view(), name='test'), # 测试
]
Vlog_system的urls.py中关于article的url配置:(解除注释就行)
测试开始:
我们启动项目:
然后在浏览器输入: http://localhost:8000/article/test :
到这里,说明我们整体项目架构没问题。
继续开发:
我们继续开发业务接口,查询所有博客类别。
from article.models import ArticleType
def get(self, request):
articleTypeList_obj = ArticleType.objects.all()
articleTypeList_dict = articleTypeList_obj.values() # 转存字典
print(articleTypeList_dict, type(articleTypeList_dict))
articleTypeList = list(articleTypeList_dict) # 把外层的容器转成list
return JsonResponse({'code': 200, 'info': '测试!', 'data': articleTypeList})
这里我们通过调用all()方法,返回QuerySet类型的对象数据集,然后通过values方法转存字典类型数据 集,最后通过list方法,转成List集合,再返回给前端。否则会出现序列化报错问题。
再用浏览器打开: http://localhost:8000/article/test
后续
持续更新中。。。