从零到一搭建一个属于自己的博客系统(弎)「建议收藏」

从零到一搭建一个属于自己的博客系统(弎)「建议收藏」前言:结合上文讲到了博客发布,本篇文章进行对于个人的信息进行一系列操作:从零到一搭建一个属于自己的博客系统(弌):从零到一搭建一个属于自己的博客系统(弌)从零到一搭建一个属于自己的博客系统(弍):从零到一搭建一个属于自己的博客系统(弍)目录:一.界面元素:二.个人中心:1.页面部分以及HTML:2.CSS:3.效果图:4.js:三.Django接口:1.修改密码(update):2.忘记密码(see):3.日志查看(seemsg):4.日志写入(usermsg):四.补充:五.换肤:一.界面元素:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

前言:结合上文讲到了博客发布,本篇文章进行对于个人的信息进行一系列操作:

从零到一搭建一个属于自己的博客系统(弌):从零到一搭建一个属于自己的博客系统(弌)

从零到一搭建一个属于自己的博客系统(弍):从零到一搭建一个属于自己的博客系统(弍)

一.界面元素:

在这里插入图片描述
本次更新以上红框框的两个模块,我们先看个人中心模块

二.个人中心:

1.页面部分以及HTML:

一般我们对于自己账号管理,有修改密码和忘记密码的操作,另外加上日志我们可以详细的了解自己账号的登录情况(我们采用elementUI进行元素界面的设计):
在这里插入图片描述
Personalcenter.vue

<template>
  <div class="Personalcenter">
    <div class="content">
      <el-tabs v-model="activeName" type="card">
        <el-tab-pane label="修改密码" name="first">
          <table border="0" width="100%" cellspacing="20px;">
            <tr>
              <td><i class="el-icon-s-custom"></i>用户名:</td>
              <td>
                <el-input v-model="username" disabled></el-input>
              </td>
            </tr>
            <tr>
              <td><i class="el-icon-lock"></i>旧密码:</td>
              <td>
                <el-input v-model="pwd1" placeholder="请输入旧密码"></el-input>
              </td>
            </tr>
            <tr>
              <td><i class="el-icon-lock"></i>新密码:</td>
              <td>
                <el-input v-model="pwd2" placeholder="请输入新密码"></el-input>
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <el-button type="primary" style="width:100%" @click="update">确定</el-button>
              </td>
            </tr>
            <tr align="left">
              <td colspan="2">规则:</td>
            </tr>
            <tr>
              <td></td>
              <td align="left">
                1.密码长度为5-8位数字或字母
              </td>
            </tr>
            <tr>
              <td></td>
              <td align="left">
                2.用户名暂且不支持修改,它是唯一身份标记
              </td>
            </tr>
            <tr>
              <td></td>
              <td align="left">
                3.忘记密码点击上方的忘记密码进行该账号的密码查看
              </td>
            </tr>
          </table>
        </el-tab-pane>
        <el-tab-pane label="忘记密码" name="second">
          <table border="0" width="100%" cellspacing="20px;">
            <tr>
              <td><i class="el-icon-s-custom"></i>用户名:</td>
              <td>
                <el-input v-model="username" disabled></el-input>
              </td>
            </tr>
            <tr>
              <td><i class="el-icon-lock"></i>密码:</td>
              <td>
                <el-input v-model="pwd3" disabled></el-input>
              </td>
            </tr>
            <tr align="left">
              <td colspan="2">温馨提示:</td>
            </tr>
            <tr>
              <td></td>
              <td align="left">
                1.请勿将您的密码泄露给其他人;
              </td>
            </tr>
            <tr>
              <td></td>
              <td align="left">
                2.忘记密码可以进行在这里查看;
              </td>
            </tr>
            <tr>
              <td></td>
              <td align="left">
                3.有问题请联系管理员--叫做长大
              </td>
            </tr>
          </table>
        </el-tab-pane>
        <el-tab-pane label="登录信息" name="third">
           <el-table :data='userData' style="width: 100%" align="center" header-align="center" >
              <el-table-column label="序号" width="180" type="index" :index="indexMethod">
              </el-table-column>
              <el-table-column label="用户" width="180">
                <template slot-scope="scope">
                 <span style="margin-left: 10px">{
  
  {scope.row[0]}}</span>
              </template>
              </el-table-column>
              <el-table-column label="登录时间"> <template slot-scope="scope">
                 <span style="margin-left: 10px">{
  
  {scope.row[1]}}</span>
              </template>
              </el-table-column>
    </el-table>
        </el-tab-pane>
      </el-tabs>
    </div>
  </div>
</template>

2.CSS:

.Personalcenter { 
   
    width: 100%;
    height: 100%;
  }

  .content { 
   
    width: 800px;
    height: 500px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    border: 1px solid black;
  }

3.效果图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.js:

界面布局完成那么就要进行我们的逻辑操作部分,数据的请求以及返回结果的处理 (接口部分移步三.Django接口):

  • data中存储我们需要的数据存储变量:
data () { 
   
    return { 
   
      activeName: 'first', // 默认显示第一个tab
      username: '', //用户登录时的用户名
      pwd1: '',  //原始密码
      pwd2: '',  //要更改的密码
      pwd3: '', // 用户忘记密码进行查看
      userData: []// 用户的登录信息
    }
  },
  • 修改密码部分:
 // 修改密码
    update () { 
   
    //密码规则,正则验证
      var reg = /^[a-zA-Z0-9@#]{5,8}$/
      //输入内容为空
      if (this.pwd1 === '' || this.pwd2 === '') { 
   
        this.$message({ 
   
          message: '密码不能为空',
          type: 'error'
        })
        //两次密码相同
      } else if (this.pwd1 === this.pwd2) { 
   
        this.$message({ 
   
          message: '两次密码不能一样,请仔细核查',
          type: 'error'
        })
        //与规则不匹配
      } else if (!reg.test(this.pwd1) || !reg.test(this.pwd1)) { 
   
        this.$message({ 
   
          message: '请输入5-8位密码',
          type: 'error'
        })
        //初始密码输入错误
      } else if (this.pwd1 !== this.pwd3) { 
   
        this.$message({ 
   
          message: '原始密码错误',
          type: 'error'
        })
      } else { 
   
      //进行数据的发送
        var data = { 
   
          user: sessionStorage.getItem('user'),
          pwd: this.pwd2
        }
        this.$post('/update/', data, { 
   headers: { 
   'Content-Type': 'application/x-www-form-urlencoded'}}).then(res => { 
   
          if (res === 'ok') { 
   
            this.$message({ 
   
              message: '密码修改成功',
              type: 'success'
            })
            //置空输入框
            this.pwd1 = ''
            this.pwd2 = ''
            //调用查看密码方法
            this.see()
            //修改成功返回登录页
            this.$router.push({ 
   
              path: '/'
            })
          }
          //请求异常时的操作
        }).catch((e) => { 
   
          this.$message({ 
   
            message: '数据库或者网络异常' + e,
            type: 'error'
          })
        })
      }
    },
  • 查看密码:
 // 忘记密码可以进行在这里查看
    see () { 
   
    需要发送的数据
      var data = { 
   
        user: sessionStorage.getItem('user')
      }
      this.$get('/see/', data, 'get').then(res => { 
   
        for (var i = 0; i < res.length; i++) { 
   
          this.pwd3 = res[i][1]
        }
      })
    },
  • 日志查看:
 seemsg () { 
   
     //发送数据
      var data = { 
   
        user: sessionStorage.getItem('user')
      }
      this.$get('/seemsg', data).then(res => { 
   
        for (var i = 0; i < res.length; i++) { 
   
          this.userData = res
        }
      })
    },
  • 序号索引
  indexMethod (index) { 
   
      return index + 1
    }

三.Django接口:

首先进行操作时候我们应该知道我们需要什么接口,应该进行哪些相关的操作

1.修改密码(update):

在这里插入图片描述
同样我们在views中进行接口的编写,其原理很简单就是对于数据库中的信息进行操作而已:

def update(request):
    data = json.loads(request.body, encoding='utf-8')
    # 地址,用户名,密码,数据库名,编码格式
    db = MySQLdb.connect("localhost", "用户名", "密码", "数据库名", charset='utf8')
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    # SQL 查询语句
    sql = "UPDATE user_table SET password='%s' WHERE user='%s'"%(data['pwd'],data['user'])
    try:
        # 执行SQL语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
        # # 获取所有记录列表
        results = cursor.fetchall()
        print(results)

    except:
    #异常时候返回的数据
        result = { 
   
            'code': 400,
            'msg': '数据库错误'
        }
        print("Error: unable to fecth data")
        return JsonResponse(result, safe=False)

    # 关闭数据库连接
    db.close()
    return HttpResponse('ok')

2.忘记密码(see):

根据登录的用户名对于我们的数据库进行数据字段的查询最终返回对应字段下面的数据:

# 忘记密码
def see(request):
    # 打开数据库连接
    # 地址,用户名,密码,数据库名,编码格式
     db = MySQLdb.connect("localhost", "用户名", "密码", "数据库名", charset='utf8')
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    data=request.GET
    # SQL 查询语句
    sql = "SELECT * FROM user_table WHERE user='%s'"%(data['user'])
    try:
        # 执行SQL语句
        cursor.execute(sql)
        # 获取所有记录列表
        results = cursor.fetchall()

    except:
        result = { 
   
            'code': 400,
            'msg': '数据库错误'
        }
        print("Error: unable to fecth data")
        return JsonResponse(result, safe=False)

    # 关闭数据库连接
    db.close()
    return JsonResponse(results, safe=False)

3.日志查看(seemsg):

原理就是对于登录用户进行对应的用户名在数据库中进行查询,返回结果集:

# 查看用户的详细信息
def seemsg(request):
    # 打开数据库连接
    # 地址,用户名,密码,数据库名,编码格式
    db = MySQLdb.connect("localhost", "用户名", "密码", "数据库名", charset='utf8')
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    data=request.GET
    # SQL 查询语句
    sql = "SELECT * FROM usermsg_table WHERE user='%s'"%(data['user'])
    try:
        # 执行SQL语句
        cursor.execute(sql)
        # 获取所有记录列表
        results = cursor.fetchall()

    except:
        result = { 
   
            'code': 400,
            'msg': '数据库错误'
        }
        print("Error: unable to fecth data")
        return JsonResponse(result, safe=False)

    # 关闭数据库连接
    db.close()
    return JsonResponse(results, safe=False)

4.日志写入(usermsg):

在用户登录成功时候将登录信息通过此接口写入数据库中:

# 插入用户的登录时间
def usermsg(request):
    # # UPDATE table_name SET field1 = new - value1,
    #获取前端传来的参数
    data = json.loads(request.body, encoding='utf-8')
    # 地址,用户名,密码,数据库名,编码格式
    db = MySQLdb.connect("localhost", "用户名", "密码", "数据库名", charset='utf8')
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    # SQL 查询语句
    sql = "INSERT INTO usermsg_table(user,time) VALUES('%s','%s')"%(data['user'],data['time'])
    try:
        # 执行SQL语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
        # 获取所有记录列表
        results = cursor.fetchall()
        print(results)

    except:
        result = { 
   
            'code': 400,
            'msg': '数据库错误'
        }
        print("Error: unable to fecth data")
        return JsonResponse(result, safe=False)

    # 关闭数据库连接
    db.close()
    return HttpResponse('ok')

四.补充:

日志查看是需要我们在登录时候将信息写入数据库中的,也就是在login页面进行数据的写入(接口欧请访问:三.Django接口):

在login界面,在用户点击登录按钮时:

   login () { 
   
      // 密码校验
      var reg = /^[a-zA-Z0-9@#]{5,8}$/
      // var reg1 = /^[a-zA-Z0-9@#]{6}$/
      if (this.user === '') { 
   
        this.$message({ 
   
          message: '用户名不能为空',
          type: 'error'
        })
      } else if (!reg.test(this.user)) { 
   
        this.$message({ 
   
          message: '请输入5-8位账号',
          type: 'error'
        })
      } else if (this.pwd === '') { 
   
        this.$message({ 
   
          message: '密码不能为空',
          type: 'error'
        })
      } else if (!reg.test(this.pwd)) { 
   
        this.$message({ 
   
          message: '请输入5-8位密码',
          type: 'error'
        })
      } else { 
   
      //登录信息校验
        this.$get('/login').then(res => { 
   
          var a = ''
          var b = ''
          console.log(res)
          for (var i = 0; i < res.length; i++) { 
   
            if (this.user === res[i][0] && this.pwd === res[i][1]) { 
   
              a = res[i][0]
              b = res[i][1]
              this.time = this.timestampToTime(Date.now() / 1000)
              sessionStorage.setItem('sid', '已登录') // 设置本地存储信息
              sessionStorage.setItem('user', this.user) // 设置本地存储信息
              sessionStorage.setItem('time', this.time) // 设置本地存储信息
              var data = { 
   
                time: this.time,
                user: sessionStorage.getItem('user')
              }
              //登录信息写入
              this.$post('/usermsg/', data, { 
   headers: { 
   'Content-Type': 'application/x-www-form-urlencoded'}}).then(res => { 
   
                this.$message({ 
   
                  message: '恭喜你,登录成功!',
                  type: 'success'
                })
                this.$router.push({ 
   
                  name: 'homepage'
                })
              })
            }
          }
          if (this.user !== a) { 
   
            this.$message({ 
   
              message: '用户不存在!',
              type: 'error'
            })
          } else if (this.pwd !== b) { 
   
            this.$message({ 
   
              message: '密码有误,请核查!',
              type: 'error'
            })
          }
        })
      }
    }

五.换肤:

所谓换肤,就是给页面换一种背景色,我们可以使用elementUI中的ColorPicker 颜色选择器:

  1. 首先引用组件:
<div class="block">
  <el-color-picker v-model="color"></el-color-picker>
</div>
  1. 我们在data中设置默认值:
 color: '#999'
  1. 添加点击事件:
<colorPicker v-model="color" @change="handleChangeColor"></colorPicker>
  1. 点击事件执行:
 handleChangeColor (val) { 
   
      console.log('输出颜色值', val) // 颜色 # 6 c8198
      this.color = val
      //页面换色
      document.body.style.backgroundColor = this.color
      document.querySelector('a').style.color = this.color
    },
  1. 效果图:
    在这里插入图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183333.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • (一)如何让selenium爬我们需要的东西

    (一)如何让selenium爬我们需要的东西

    2021年5月17日
    149
  • AUC的公式_蔡勒公式

    AUC的公式_蔡勒公式AUC:随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率。开始抽样:在有M个正样本,N个负样本的数据集里。一共有MN对样本(一对样本即,一个正样本与一个负样本)。统计这MN对样本里,正样本的预测概率大于负样本的预测概率的个数。计算:(一)2个正样本:C,D2个负样本:A,B样本对:(C,A)(C,B…

    2022年10月21日
    2
  • Java学习之爬虫篇

    Java学习之爬虫篇0x00前言总结完基础阶段,来写个爬虫练练手,从中能学到不少。0x01爬虫结构与概念爬虫更官方点的名字叫数据采集,英文一般称作spider,就是通过编程来全自动的从互联

    2021年12月12日
    57
  • PCBlayout设计「建议收藏」

    PCBlayout设计「建议收藏」一、PCB设计流程一般来说PCB基本设计流程:前期准备->PCB结构设计->PCB布局->布线->布线优化和丝印->网络和DRC检查和结构检查->制板。1、前期准备包括准备元件库和原理图,在开始进行布板时,得先完成原理图的设计。我们公司基本是用Protel99画图,我们常用的元件库也都基本具备,也是我们公司常用的标准。对于一些元件没有元件库的,需要自己根据元件

    2025年7月15日
    3
  • 第八章:并发类容器之Queue

    第八章:并发类容器之Queue第八章:并发类容器之Queue

    2022年4月23日
    52
  • SQL Server —(CDC)监控表数据(转译)

    SQL Server —(CDC)监控表数据(转译)

    2021年11月26日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号