数据库设计

用户表(用的是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. windows 共享文件夹,和共享打印机

    达成的情形,目标主机上登陆用户设置密码,其他pc上需要目标主机的用户和密码才能访问其共享文件夹 步骤:1.目标主机,设置文件夹共享    在文件夹上右键-属性,点击共享选项卡,然后点击共享按钮,继续点 ...

  2. html5中的fieldset/legend元素和keygen元素

    html5中的fieldset/legend元素和keygen元素 一.总结 一句话总结: fieldset/legend元素和figure和figcaption很像,只不过是作用于表单,前者表示内容 ...

  3. NGINX实现咏南跨平台中间件集群

    NGINX实现咏南跨平台中间件集群 首先要开启咏南LINUX中间件. 1)编辑usr/local/nginx/conf/nginx.conf #user  nobody;worker_processe ...

  4. PHP如何解决网站大流量与高并发的问题(三)

    七层负载均衡的实现 基于URL等应用层信息的负载均衡 Nginx的proxy是一个很强大的功能,实现了7层负载均衡 功能强大.性能卓越,运行稳定 配置简单灵活 能自动提出工作不正常的后端服务器 上传文 ...

  5. unity手机游戏应用程序调试控制台Lunar Mobile Console - PRO 1.5.5

    unity手机游戏应用程序调试控制台Lunar Mobile Console - PRO 1.5.5 High-performance Unity iOS/Android console built ...

  6. HmacSHA256摘要算法2 MACCoder

    消息摘要算法分为三类: MD(Message Digest):消息摘要 SHA(Secure Hash Algorithm):安全散列 MAC(Message Authentication Code) ...

  7. Faster async functions and promises

    https://v8.dev/blog/fast-async async function computeAnswer() { return 42;}undefinedconst p = comput ...

  8. ionic4.x EventEmitter3的使用

    安装: npm install --save eventemitter3 创建event.service import { Injectable } from '@angular/core'; // ...

  9. git切换到某个tag, 从tag切换回当前分支

    git clone 整个仓库后使用,以下命令就可以取得该 tag 对应的代码了 git checkout tag_name 但是,这时候 git 可能会提示你当前处于一个“detached HEAD& ...

  10. selenium3+Python3+sublime text3自动化登录

    前言: 对于初学者来说,python自带的IDLE,精简又方便,不过一个好的编辑器能让python编码变得更方便,更加优美些. 不过呢,也可以自己去下载其他更好用的代码编辑器,在这推荐: PyChar ...