基于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项目相关推荐

  1. 基于Django的博客系统

    代码地址如下: http://www.demodashi.com/demo/14445.html 基于django的博客系统, 界面展示 首页前端界面如下: 文章页面: 后台页面: 文章页面: ##项 ...

  2. 基于Django的博客兼学术主页管理网站

    基于Django的博客兼学术主页管理网站 摘要: 本系统基于后端Django框架和前端HTML页面,使用MVT设计模式构建了博客兼学术主页管理网站.该网站具有编写博客.阅读博客.点赞评论其他人博客的博 ...

  3. 基于HTML个人博客网站项目的设计与实现——个人博客作品展示6页 HTML+CSS

    Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 个人博客网站 | 个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 ...

  4. 基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  5. 【基于python+Django的博客系统-哔哩哔哩】 https://b23.tv/bmRfAMu

    [基于python+Django的博客系统-哔哩哔哩] https://b23.tv/bmRfAMu https://b23.tv/bmRfAMu

  6. java web论文_(定稿)毕业论文基于JavaWeb技术博客项目的设计论文(完整版)最新版...

    <[毕业论文]基于Java Web技术博客项目的设计论文.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文基于Java Web技术博客项目的设计论文(完整版)> ...

  7. 基于.NetCore开发博客项目 StarBlog - (13) 加入友情链接功能

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  8. 基于Python个人博客系统设计与实现 开题报告

      本科生毕业论文 基于python个人博客系统Django框架 开题报告 学    院: 专    业: 计算机科学与技术 年    级: 学生姓名: 指导教师: 黄菊华   XXXX大学本科生毕业 ...

  9. Lucene5.5.4入门以及基于Lucene实现博客搜索功能

    前言 一直以来个人博客的搜索功能很蹩脚,只是自己简单用数据库的like %keyword%来实现的,所以导致经常搜不到想要找的内容,而且高亮显示.摘要截取等也不好实现,所以决定采用Lucene改写博客 ...

最新文章

  1. 高质量的友谊总是发生在两个优秀的独立人格之间
  2. 世界坐标系空间,页面空间,设备空间,物理设备空间
  3. 手机端实现点击复制功能
  4. HashMap HashTable HashSet区别剖析
  5. XeLaTeX插入GB/T 7714-2005规范的参考文献方法
  6. 在 Excel 里使用 ODBC 读取 SAP BTP 平台上 CDS view 的数据
  7. 测试记录流水s1 0080481T02
  8. sql分割函数|在网上找的看着挺好,谁的忘了
  9. BurpSuite使用——HTTP
  10. A Volumetric Method for Building Complex Models from Range Images
  11. Windows环境下通过lynx查看隐藏链接识别黑链方法
  12. exchange 2010 sp2系列之(二)证书配置
  13. 2018.09.18 循环终止
  14. 推荐系统-猜你喜欢设计
  15. JavaScript 学习指南
  16. SAR图像超分辨技术
  17. Windbg调试工具介绍
  18. 计算机网络中的NET与应用中的.NET
  19. 费希纳定律的推导过程图解
  20. java实现1 12 123 1234 12345 123456 输出

热门文章

  1. java jstat m ccs_jstat命令详解
  2. 使用mybatis-plus时mybatis报错There is no getter for property named ‘xxx‘ in ‘class com.xxx.xxx.xxxMybatis
  3. java 执行Linux命令并打印执行结果
  4. 怎么用python启动谷歌浏览器_Selenium 基于python 安装以及配置谷歌浏览器启动
  5. 【专利撰写】专利类型
  6. 2021 CNSS招新赛 WEB WP
  7. Windows开发之——平板手机作为电脑摄像头
  8. 2022 高教杯数学建模C题古代玻璃制品的成分分析与鉴别回顾及总结
  9. 电话激活Windows 中文操作系统步骤
  10. PDA 手持式智能终端和 RFID 技术