数据库设计

用户表(用的是auth_user那张表,通过自定义表继承AbstractUser)

phone   电话
avatar 头像
create_time 创建时间
#外键
blog 一对一个人站点表

个人站点表

site_name     站点名
site_title 名言警句
site_theme 样式

标签表

name   标签名
#外键
blog 一对多个人站点 每个站点含有多个标签

分类表

name     分类名
#外键
blog 一对多个人站点 每个站点含有多个分类

文章表

title           文章标题
desc 文章摘要
content 文章内容
create_time 文章创建时间 #外键
blog 一对多个人站点 一个站点下可以有多篇文章
tag 多对多标签 一个文章有多个标签,一个标签可以对应多篇文章
category 一对多分类 一个分类下面有多篇文章 #普通字段
# 数据库设计优化(******)设置这些就不用去点赞点踩表中查询数据了,减少数据库查询量
#开一个事务,当你操作点赞点踩表的时候,下面这些数据也会改变
评论数 comment_num 普通字段
点赞数 up_num 普通字段
点踩数 down_num 普通字段

点赞点踩表

user            一对多用户表      一个赞只能对应一个用户,一个用户能点不同的赞
article 一对多文章表 一个赞只能对应一篇文章,一篇文章能有多个赞
is_up 0/1

评论表

user            一对多用户表        一个评论是一个用户写的,一个用户能写多个评论
article 一对多文章表
comment 评论内容
create_time 创建时间
parent 一对多评论表(自关联) 父评论的id 如果有值说明你是子评论 如果没有值说明你是父评论

注册功能  利用forms组件来校验登录信息是否正确,并且渲染页面

1.文件输入框设置了id='myfile'和隐藏文件输入框,在label标签设置for='myfile',那么点击头像两个字就有弹出文件输入框的效果。

<label for="myfile">头像
设置默认头像图片
<img src="/static/img/default.jpg" alt="" height="" style="margin-left: 20px" id="img">
</label>
<input type="file" id="myfile" style="display: none"> #文件输入框

注册功能大致流程:

1.在views视图创建一个forms对象,传递到模板层,渲染出输入框

2.注册页面选择头像在ajax用Filereader对象读取。

3.在模板层写ajax的数据提交,views视图层接收数据,forms组件接收数据校验,直接把request.POST传给forms组件校验

4.传到后台

登录功能

主页功能

2019-9-27

注销功能

auth.logout(request)

修改密码

复制一个模态框放在页面

form表单提交一定要是input标签,不能是button

admin后台管理

先创建一个超级用户登录后台

在应用中找到admin.py文件  然后注册 你想要操作的默写表即可,使用超级管理员账户 即可登录后台进行数据的管理

from django.contrib import admin
from app01 import models admin.site.register(models.UserInfo)
admin.site.register(models.Blog)
admin.site.register(models.Tag)
admin.site.register(models.Category)
admin.site.register(models.Article2Tag)
admin.site.register(models.Article)
admin.site.register(models.UpAndDown)
admin.site.register(models.Comment)

用户头像展示

主页面展示

个人主页搭建

个人站点表site_name和用户名设置一样的

步骤:

1.先验证输入的个人站点是否存在

查询filter返回的结果 ,queryset对象(单个Queryset对象)

打印结果:<QuerySet [<UserInfo: jason>]>
打印类型:<class 'django.db.models.query.QuerySet'>

查询filter>> first()

打印结果: jason   这个也是一个对象
打印类型:<class 'app01.models.UserInfo'>

多个Queryset对象(传递到后台需要for循环取出)

<QuerySet [<Article: .Net Core 添加 Swagger 支持>, <Article: Docker Compose与Docker Stack的不同之处>, <Article: 新手学习FFmpeg - 调用API完成视频的读取和输出>, <Article: 了解一下Java SPI的原理>, <Article: Django+MySQL Dashboard 网页端数据库可视化>, <Article: mybatis中collection association优化使用及多参数传递>, <Article: 200行代码实现Mini ASP.NET Core>]>

侧边栏渲染

侧边栏功能

2019-9-28

一、文章详情页搭建

内容和样式复制博客园的,注意要在前端页面显示内容的代码在|safe,取消前端代码转义

二、点赞点踩功能

1.先校验用户是否登录

request.user.is_authenticated()

2.校验用户点赞点踩的这篇文章是否是自己写的

3.校验当前用户是否已经对这篇进行过点赞或者点踩

4.修改数据记录  在文章表中和点赞点踩表都要记录

用到了F查询
models.Article.objects.filter(pk=article_id).update(up_num=F('up_num')+1)

在对表数据查询或者创建的时候,如果字段是外键,给字段传一个对象,如果字段是普通字段,那就传一个具体值。(******)最好是这样

article_obj = models.Article.objects.filter(pk=article_id,blog=blog).first()
在Article表中,pk是个普通字段传一个具体指article_id,blog是一个外键,所有传一个blog对象
models.UpAndDown.objects.create(article=article_obj,user=request.user,is_up=is_up)
或者(如果没有对象值,也可以拿具体的值传)
models.UpAndDown.objects.create(article_id=article_id,user=request.user,is_up=is_up)
第一种是根据models字段来写的,第二种是按照数据库字段写法来写的

5.在后端取消标签转义

from django.utils.safestring import mark_safe

mark_safe('请先<a href="/login/">登录</a>')

前端ajax判断:

1.判断点击的是点赞还是点踩

根据点击的标签是否有某个类属性,得到一个字符串格式的布尔值。来判断是点赞还是点踩。

传递文章id和布尔值给后端

回调函数接收后端返回的结果,根据code来判断,符合条件就在修改页面的点赞或者点踩数

三、文章的评论

取消浮动

class="clearfix"

1.做好评论框和评论列表的样式

2.ajax判断是根评论还是子评论,截取不同的内容返回给后端,获取文章id和评论内容传给后端

3.后端POST接收数据,做数据同步,数据要保存到评论表和文章表的评论字段,这里用事务来写。

4.前端接收后端返回的code,进行判断,把用户评论的内容加到评论列表中,需要自己定义列表样式。

5.点击回复,生成子评论。

BBS项目架构的更多相关文章

  1. BBS项目架构实现

    一.注册功能 注册页面搭建 auto_id 数据校验 使用forms组件实现(forms) 创建一个文件夹随意,创建一个.py中 在.py文件中创建类继承form.Form 创建字段实现,实现对字段的 ...

  2. nginx之location、inmp架构详解、BBS项目部署

    本期内容概要 location lnmp架构 部署BBS项目 内容详细 1.location 使用Nginx Location可以控制访问网站的路径 但一个server可以有多个location配置 ...

  3. 7、架构--location、LNMP架构、uwsgi部署、BBS项目部署

    笔记 1.晨考 1.Nginx中常用的模块 autoindex stub_status allow 和 deny basic limit_conn limit_req 2.配置步骤 1.创建连接池 2 ...

  4. BBS项目部署

    1.准备 项目架构为:LNM+Python+Django+uwsgi+Redis   (L:linux,N:nginx,M:mysql) 将bbs项目压缩上传到:  /opt 在shell中直接拖拽 ...

  5. BBS项目-01

    目录 BBS项目 BBS开发流程: BBS表格创建: BBS项目 BBS开发流程: BBS项目: 开发流程: 需求分析 草拟一些项目的大致技术点和流程 架构设计 架构师(框架 语言 数据库 缓存数据库 ...

  6. BBS项目(一)

    目录 BBS项目(一) 项目开发流程 BBS项目 BBS表分析 自关联 表关系图示 BBS项目(一) 项目开发流程 项目分类 针对互联网用户:抖音,淘宝····· 针对公司内部:后台管理系统··· 针 ...

  7. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入

    上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...

  8. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整-控制反转和依赖注入的使用

    再次调整项目架构是因为和群友dezhou的一次聊天,我原来的想法是项目尽量做简单点别搞太复杂了,仅使用了DbContext的注入,其他的也没有写接口耦合度很高.和dezhou聊过之后我仔细考虑了一下, ...

  9. UWP开发之Mvvmlight实践九:基于MVVM的项目架构分享

    在前几章介绍了不少MVVM以及Mvvmlight实例,那实际企业开发中将以那种架构开发比较好?怎样分层开发才能节省成本? 本文特别分享实际企业项目开发中使用过的项目架构,欢迎参照使用!有不好的地方欢迎 ...

随机推荐

  1. redis 业务锁 not exist 模式

    背景: 业务核心模块只能提交一次,原实现方案 前端加提交限制.后端加数据库业务逻辑判定,结果失效,api站点部署多台负载,切方法需要强求第三方接口 响应时间较慢 ,故放弃lock. 解决方案:redi ...

  2. Android系统分区

    Android系统开发时,经常会遇到添加或者调整系统分区大小的问题,下面以mstar的一款产品为例进行分析: (1)mount指令可以查看到板子中挂在的分区,主要关注ext4类型分区,例如tvserv ...

  3. HSCR | Hirschsprung‘s disease | 巨结肠 | 研究进展

    这个网站介绍得很详细:Hirschsprung Disease,基本的定义.病因.诊断. Hirschsprung disease — integrating basic science and cl ...

  4. 微信小程序之自定义底部弹出框动画

    最近做小程序时,会经常用到各种弹框.直接做显示和隐藏虽然也能达到效果,但是体验性太差,也比较简单粗暴.想要美美地玩,添加点动画还是非常有必要的.下面做一个底部上滑的弹框. wxml <view ...

  5. Jira 入门【转】

    JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域.它是一个集 项目计划.任务分配.需求管理.错误跟踪 ...

  6. QEMU命令配置虚拟机网络的用户模式

    QEMU缺省使用“-net nic-net user”参数为客户机配置网络,提供了一种用户模式( user-mode)的网络模拟.使用用户模式的客户机可以连通宿主机及外部网络.用户模式网络完全由QEM ...

  7. 小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_38、源码编译安装Redis4.x

    笔记 2.源码编译安装Redis4.x     简介:使用源码安装Redis4.x和配置外网访问 1.快速安装  https://redis.io/download#installation      ...

  8. PHP 对象接口

    对象接口 (interface) 使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容. 接口是通过 interface 关键字来定义的,就像定义一个标准的类 ...

  9. Python 保存数据的方法:

    open函数保存 使用with open()新建对象 写入数据(这里使用的是爬取豆瓣读书中一本书的豆瓣短评作为例子) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  10. oraagent.bin High Memory Usage as Dependent Listener was Removed/Renamed

    Grid Infrastructure oraagent.bin process using huge amount of memory and  forking huge number of thr ...