zoukankan      html  css  js  c++  java
  • BBS项目架构

    数据库设计

    用户表(用的是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="80" 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.点击回复,生成子评论。

  • 相关阅读:
    UVA 11174 Stand in a Line,UVA 1436 Counting heaps —— (组合数的好题)
    UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)
    【Same Tree】cpp
    【Recover Binary Search Tree】cpp
    【Binary Tree Zigzag Level Order Traversal】cpp
    【Binary Tree Level Order Traversal II 】cpp
    【Binary Tree Level Order Traversal】cpp
    【Binary Tree Post order Traversal】cpp
    【Binary Tree Inorder Traversal】cpp
    【Binary Tree Preorder Traversal】cpp
  • 原文地址:https://www.cnblogs.com/wangcuican/p/11609072.html
Copyright © 2011-2022 走看看