基于Django的博客BBS项目
基于Django的博客BBS项目
- 项目流程内容概要
- 第一部分
- 第二部分
- 第三部分
- 第四部分
- 项目具体流程
- 1.数据库表创建及同步
- 1.1创建项目
- 1.2创建数据库
- 1.3修改配置文件与__init__文件
- 1.3.1修改数据库配置
- 1.3.2修改任意__init__文件
- 1.4models中创建相关表以及字段
- 1.5同步到数据库
- 1.6forms组件的创建使用
- 2.书写注册功能
- 2.1froms组件实现注册
- 2.2注册页面简单搭建
- 2.2.1静态文件配置
- 2.2.2简单样式:
- 2.3动态显示图像
- 2.4ajax发送post请求并将返回信息显示
- 2.5给所有的input框绑定获取焦点事件
- 2.6python后端逻辑代码
- 3 验证码
- 4 首页搭建
- 1.动态展示用户名称
- 2.更多操作
- 5 admin后台管理
- 6 media配置及用户头像展示
- 6.1用户头像展示
- 7 个人站点搭建
- 7.1 图片防盗链
- 7.2 侧边栏筛选功能
- 8 文章详情页
- 8.1url设计
- 8.2业务逻辑设计
- 8.3试图表达设计
- 9 文章点赞点踩
- 9.1 提前了解
- 9.2 文章点赞点踩业务逻辑
- 10 文章评论功能
- 11 后台管理
- 11.1 后台管理地址
- 12 添加文章
- 12.1 有两个需要注意的问题
- 13 上传图片
- 14 bbs项目总结
- 主要功能总结
项目流程内容概要
第一部分
bbs是一个前后端不分离的全栈项目,前端和后端都需要我们自己-步步的完成
●表创建及同步
●注册功能。forms组件。用户头像前端实时展示ajax
●登陆功能。自己实现图片验证码
●搭建bbs首页。导航条根据用户是否登陆展示不同的内容
第二部分
●登陆功能
●bbs首页搭建。导航条用户功能
●admin后台管理
●首页文章展示
●用户头像展示(media配置)
●图片防盗链
●个人站点页面搭建
●侧边栏展示功能。标签。分类。日期
●侧边栏筛选功能
●将侧边栏制作成inclusion_tag
第三部分
●侧边栏制作成inclusion. tag
●文章的点赞点踩(重点)
●文章的评论(重点)。先只做根评论。之后再做子评论。小bug完善后面内容
●后台管理
●xss攻击
●用户头像修改
第四部分
●后台管理文章查增 改删前端编辑器(kindeditor富文本编辑器)
●处理XSS攻击以及文章摘要的处理
●编辑器上传图片
●修改用户头像
●bbs小总结
项目具体流程
1.数据库表创建及同步
由于django自带的sqlite数据库对日期不敏感,所以我们换成MySQL
1.1创建项目
左栏选Django, 右边选本地环境, 打上项目名称, 配上默认应用名, 点击创建
1.2创建数据库
打开Navicat for MySQL 打开连接, 在某一数据库处右键创建数据库, 字符集选择 'utf8'
1.3修改配置文件与__init__文件
1.3.1修改数据库配置
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'bbslib','USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1','PORT': 3306,'CHARSET': 'utf8'}
}
1.3.2修改任意__init__文件
import pymysql
pymysql.install_as_MySQLdb()
1.4models中创建相关表以及字段
from django.db import models# Create your models here.'''
创表思路:先写普通字段之后再写外键字段
'''
from django.contrib.auth.models import AbstractUserclass UserInfo(AbstractUser):# 手机号字段phone = models.BooleanField(verbose_name='手机号', null=True)# 头像字段avatar = models.FileField(upload_to='avatar/', default='avatar/default.png', verbose_name='用户头像')'''给avatar字段传文件对象该文件会自动存储到avatar文件下然后avatar字段只保存文件路径avatar/default.png'''# 创建时间creat_time = models.DateField(auto_now_add=True)# 外键字段blog = models.OneToOneField(to='Blog', null=True, on_delete=models.CASCADE)class Blog(models.Model):site_name = models.CharField(verbose_name='站点标题', max_length=32)sist_title = models.CharField(verbose_name='站点标题', max_length=32)# 简单模拟带你认识样式内部原理的操作sist_theme = models.CharField(verbose_name='站点样式', max_length=64) # 存css/js的文件路径class Category(models.Model):name = models.CharField(verbose_name='文章分类', max_length=32)# 外键字段blog = models.ForeignKey(to='Blog', null=True, on_delete=models.CASCADE)class Tag(models.Model):name = models.CharField(verbose_name='文章标签', max_length=32)# 外键字段blog = models.ForeignKey(to='Blog', null=True, on_delete=models.CASCADE)class Article(models.Model):title = models.CharField(verbose_name='文章标题', max_length=64)desc = models.CharField(verbose_name='文章简介', max_length=255)# 文章内容有很多-般情况下都是使用TextFieldcontent = models.TextField(verbose_name='文章内容')create_time = models.DateField(auto_now_add=True)# 数据库字段设计优化up_num = models.BigIntegerField(verbose_name='点赞数', default=0)down_num = models.BigIntegerField(verbose_name='点踩数', default=0)comment_num = models.BigIntegerField(verbose_name='评论数', default=0)# 外键字段(3个)blog = models.ForeignKey(to='Blog', null=True, on_delete=models.CASCADE)category = models.ForeignKey(to='Category', null=True, on_delete=models.CASCADE)# 文章跟标签是多对多关系, 三种多对多创建方式, 我们选择自己创建第三张表tags = models.ManyToManyField(to='Tag',through='Article2Tag',through_fields=('article', 'tag'))class Article2Tag(models.Model):article = models.ForeignKey(to='Article', on_delete=models.CASCADE)tag = models.ForeignKey(to='Tag', on_delete=models.CASCADE)class UpAndDown(models.Model):user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE)article = models.ForeignKey(to='Article', on_delete=models.CASCADE)# 记录点赞还是点踩is_up = models.BooleanField() # 传布尔值, 存0/1class Comment(models.Model):user = models.ForeignKey(to='UserInfo', on_delete=models.CASCADE)article = models.ForeignKey(to='Article', on_delete=models.CASCADE)content = models.CharField(verbose_name='评论内容', max_length=255)comment_time = models.DateTimeField(verbose_name='评论时间', auto_now_add=True)# 自关联parent = models.ForeignKey(to='self', null=True, on_delete=models.CASCADE) # 有些评论就是根评论 null=True# parent = models.ForeignKey(to='Comment', null=True) # 有些评论就是根评论 null=True"""
在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:
TypeError: __init__() missing 1 required positional argument: 'on_delete
"""
1.5同步到数据库
python manage.py makemigrations
python manage.py migrate
1.6forms组件的创建使用
"""
@Time : 2021/9/19 20:36
@Author : 常雷
@File : myfroms.py
@Software: PyCharm
"""
# 书写针对用户表的forms组件代码
from django import forms
from app01 import models # 为了数据库校验class MyRegForm(forms.Form):username = forms.CharField(label='用户名', min_length=3, max_length=8,error_messages={'required': '用户名不能为空','min_length': '用户名最少三位','max_length': '用户名最多八位',},# 还需要让标签有bootstrap样式widget=forms.widgets.TextInput(attrs={'class': 'form-control'}))password = forms.CharField(label='密码', min_length=3, max_length=8,error_messages={'required': '密码不能为空','min_length': '密码最少三位','max_length': '密码最多八位',},# 还需要让标签有bootstrap样式widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'}))confirm_password = forms.CharField(label='确认密码', min_length=3, max_length=8,error_messages={'required': '确认密码不能为空','min_length': '确认密码最少三位','max_length': '确认密码最多八位',},# 还需要让标签有bootstrap样式widget=forms.widgets.PasswordInput(attrs={'class': 'form-control'}))email = forms.EmailField(label='邮箱
基于Django的博客BBS项目相关推荐
- 基于Django的博客系统
代码地址如下: http://www.demodashi.com/demo/14445.html 基于django的博客系统, 界面展示 首页前端界面如下: 文章页面: 后台页面: 文章页面: ##项 ...
- 基于Django的博客兼学术主页管理网站
基于Django的博客兼学术主页管理网站 摘要: 本系统基于后端Django框架和前端HTML页面,使用MVT设计模式构建了博客兼学术主页管理网站.该网站具有编写博客.阅读博客.点赞评论其他人博客的博 ...
- 基于HTML个人博客网站项目的设计与实现——个人博客作品展示6页 HTML+CSS
Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 个人博客网站 | 个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 ...
- 基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- 【基于python+Django的博客系统-哔哩哔哩】 https://b23.tv/bmRfAMu
[基于python+Django的博客系统-哔哩哔哩] https://b23.tv/bmRfAMu https://b23.tv/bmRfAMu
- java web论文_(定稿)毕业论文基于JavaWeb技术博客项目的设计论文(完整版)最新版...
<[毕业论文]基于Java Web技术博客项目的设计论文.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文基于Java Web技术博客项目的设计论文(完整版)> ...
- 基于.NetCore开发博客项目 StarBlog - (13) 加入友情链接功能
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- 基于Python个人博客系统设计与实现 开题报告
本科生毕业论文 基于python个人博客系统Django框架 开题报告 学 院: 专 业: 计算机科学与技术 年 级: 学生姓名: 指导教师: 黄菊华 XXXX大学本科生毕业 ...
- Lucene5.5.4入门以及基于Lucene实现博客搜索功能
前言 一直以来个人博客的搜索功能很蹩脚,只是自己简单用数据库的like %keyword%来实现的,所以导致经常搜不到想要找的内容,而且高亮显示.摘要截取等也不好实现,所以决定采用Lucene改写博客 ...
最新文章
- 高质量的友谊总是发生在两个优秀的独立人格之间
- 世界坐标系空间,页面空间,设备空间,物理设备空间
- 手机端实现点击复制功能
- HashMap HashTable HashSet区别剖析
- XeLaTeX插入GB/T 7714-2005规范的参考文献方法
- 在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据
- 测试记录流水s1 0080481T02
- sql分割函数|在网上找的看着挺好,谁的忘了
- BurpSuite使用——HTTP
- A Volumetric Method for Building Complex Models from Range Images
- Windows环境下通过lynx查看隐藏链接识别黑链方法
- exchange 2010 sp2系列之(二)证书配置
- 2018.09.18 循环终止
- 推荐系统-猜你喜欢设计
- JavaScript 学习指南
- SAR图像超分辨技术
- Windbg调试工具介绍
- 计算机网络中的NET与应用中的.NET
- 费希纳定律的推导过程图解
- java实现1 12 123 1234 12345 123456 输出
热门文章
- java jstat m ccs_jstat命令详解
- 使用mybatis-plus时mybatis报错There is no getter for property named ‘xxx‘ in ‘class com.xxx.xxx.xxxMybatis
- java 执行Linux命令并打印执行结果
- 怎么用python启动谷歌浏览器_Selenium 基于python 安装以及配置谷歌浏览器启动
- 【专利撰写】专利类型
- 2021 CNSS招新赛 WEB WP
- Windows开发之——平板手机作为电脑摄像头
- 2022 高教杯数学建模C题古代玻璃制品的成分分析与鉴别回顾及总结
- 电话激活Windows 中文操作系统步骤
- PDA 手持式智能终端和 RFID 技术