仿今日头条后台管理系统(三)

基于JAVA+SpringBoot+Mybatis+MYSQL的今日头条新闻网站 项目功能: 仿照今日头条的WEB端toutiao.com做的一个Java web项目。使用SpringBoot+Mybatis+thymeleaf开发。前端使用bootstrap、html5、css3动画、jQuery、WangEditor富文本编辑器、Webuoloader和Base64处理图片上传、ajax异步处理表单数据,包括后台管理系统页面效果:... 阅读详情

03-首页-导航菜单路由功能

  • 默认是没有点击切换路径
  • 是否使用 vue-router 的模式,启用该模式会在激活导航时以 index 作为 path 进行路由跳转
  • 问题:刷新页面后 丢失激活的样式
    • 原因:default-active="/" 值是死的
    • 做法:获取当前地址栏的路径 设置给default-active 路径和菜单的index的值一致
<el-menu router></el-menu>

把index的值改成约定好的路由地址:

 <el-menu-item index="/">
          <i class="el-icon-s-home"></i>
          <span slot="title">首页</span>
        </el-menu-item>
        <el-menu-item index="/article">
          <i class="el-icon-document"></i>
          <span slot="title">内容管理</span>
        </el-menu-item>
        <el-menu-item index="/image">
          <i class="el-icon-picture"></i>
          <span slot="title">素材管理</span>
        </el-menu-item>
        <el-menu-item index="/publish">
          <i class="el-icon-s-promotion"></i>
          <span slot="title">发布文章</span>
        </el-menu-item>
        <el-menu-item index="/comment">
          <i class="el-icon-chat-dot-round"></i>
          <span slot="title">评论管理</span>
        </el-menu-item>
        <el-menu-item index="/fans">
          <i class="el-icon-present"></i>
          <span slot="title">粉丝管理</span>
        </el-menu-item>
        <el-menu-item index="/setting">
          <i class="el-icon-setting"></i>
          <span slot="title">个人设置</span>
        </el-menu-item>

动态绑定激活的菜单

<el-menu  :default-active="$route.path"></el-menu>
//显示当前的路径

04-首页-404页面

  • 什么时候显示404页面?
    • 当你约定的路由规则中没有对应的path,认为当前地址是404。
    • 先定义的路由规则会先匹配,如果走到最后一个路由,发现没有对应的规则。
    • 处理成404页面即可。
<template>
  <div class='container'></div>
</template>

<script>
export default {}
</script>

<style scoped lang='less'>
.container{
  position: absolute;
  width: 100%;
  height: 100%;
  background: url(../../assets/images/404.png) no-repeat center / cover;
}
</style>

router/index.js 最后加一个规则

routes: [
    { path: '/login', name: 'login', component: Login },
    {
      path: '/',
      component: Home,
      children: [
        { path: '/', name: 'welcome', component: Welcome },
        { path: '/article', name: 'article', component: Article }
      ]
    },
+    // 处理404
+    { path: '*', name: '404', component: NotFound }
  ]

05-接口-token认证问题

GET http://ttapi.research.itcast.cn/mp/v1_0/articles 401 (UNAUTHORIZED)
  • 报错:没有认证
  • 怎么认证:在请求的时候,在头部需要加上一个字段:
    • Authorization
    • 值:是你登录的时候返回的token信息
  • 登录之后,需要保存token
  • 在调用其他的接口,需要认证
    • 请求头:Authorization:Bearer + 空格 + token信息

07-登录-保持会话状态

  • 其实就是登录后保存 用户信息 在浏览器端
    • cookie
      • 在某一个时间后失效
    • localStorage
      • 永久生效
    • sessionStorage
      • 特性:关闭浏览器后,会话失效,再次打开浏览器,重新登录。
  • 注意:后台对token也有控制,2小时就失效。
// store/index.js 模块  获取用户  设置用户
// 存储信息的时候:
// 1. 约定信息的KEY是什么  hm-toutiao-77-user
// 2. 存储信息的值是什么   用户信息对象 字符串格式json
const KEY = 'hm-toutiao-77-user'

export default {
  setUser (user) {
    // 存储用户信息到sessionStorage
    window.sessionStorage.setItem(KEY, JSON.stringify(user))
  },
  getUser () {
    // 获取用户信息从sessionStorage
    return JSON.parse(window.sessionStorage.getItem(KEY) || '{}')
  }
}

保存用户信息: views/login/index.vue

login () {
      // 对整个表单进行校验
      this.$refs.loginForm.validate(valid => {
        if (valid) {
          // 请求登录接口
          this.$http
            .post(
              'http://ttapi.research.itcast.cn/mp/v1_0/authorizations',
              this.loginForm
            )
            .then(res => {
              // res 响应对象   包含响应主体
              // console.log(res.data)
+              // 存储用户信息
+              store.setUser(res.data.data)
              // 跳转去首页
              this.$router.push('/')
            })
            .catch(() => {
              // 错误提示提示
              this.$message.error('手机号或验证码错误')
            })
        }
      })
    }

08-登录-拦截未登录路由跳转

  • 除登录路由外,所有的路由跳转前,判断是否登录过。
    • 判断 本地存储 是否存储了用户信息
    • 如果存储 意味登录了 放行
    • 如果没有 意味没登录 拦截到登录路由
  • 怎么监听到 跳转路由前
    • 技术:路由导航守卫
// 路由实例
const router = new VueRouter({ ... })
// 提供函数 beforeEach 前置守卫
router.beforeEach((to, from, next) => {
    // to 去的路由对象 from  来自哪里路由对象
    // 做事情,获取用户信息
    // 判断 是否登录  如果登录 放行 next()   拦截登录 next('/login')
    // 注意 排除登录路由
})

最终的代码:router/index.js

// 前置导航守卫
router.beforeEach((to, from, next) => {
  // // 1. 判断是不是登录路由
  // if (to.path === '/login') return next()
  // // 2. 判断是否登录
  // if (!store.getUser().token) return next('/login')
  // // 3. 放行
  // next()
  if (to.path !== '/login' && !store.getUser().token) return next('/login')
  next()
})

09-axios-默认配置选项

api/index.js

// 配置一个axios  导出一个配置好的axios
import axios from 'axios'
import store from '@/store'

// 进行配置
axios.defaults.baseURL = 'http://ttapi.research.itcast.cn/mp/v1_0/'
axios.defaults.headers = {
  Authorization: `Bearer ${store.getUser().token}`
}

// 进行导出
export default axios

main.js 修改

+ import axios from '@/api'
Vue.prototype.$http = axios

场景:

  • 清除了token
  • 刷新页面 拦截登录
  • 登录成功 跳转首页
  • 点击内容管理
  • 请求的时候没有获取到token
  • 刷新才好使???
    • 登录的时候 有token吗 没有 如果此时去获取了token undefined
    • 登录成功后 存储了token 当是此时获取token的代码没有重新执行了 使用的还是之前获取的token undefined
    • 再次发请求的时候 是没携带token

预期:

  • 当你发请当前,重新获取token
  • 每一次在axios请求之前,获取token,给头部加token。

10-axios-请求拦截器

// 添加请求拦截器
axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // 修改config,追加headers
    return config;
  }, function (error) {
    // 认为返回错误的promise对象
    return Promise.reject(error);
  });

  • api/index.js
// 配置一个axios  导出一个配置好的axios
import axios from 'axios'
import store from '@/store'

// 进行配置
axios.defaults.baseURL = 'http://ttapi.research.itcast.cn/mp/v1_0/'
// 只会执行一次
// axios.defaults.headers = {
//   Authorization: `Bearer ${store.getUser().token}`
// }
// 在每次请求之前,获取token信息,追加在headers中
// 请求拦截器:在每次请求前 做某一些事情
axios.interceptors.request.use((config) => {
  // 修改config
  config.headers = {
    Authorization: `Bearer ${store.getUser().token}`
  }
  return config
}, (error) => {
  // 错误处理
  return Promise.reject(error)
})

// 进行导出
export default axios

11-axios-响应拦截器

  • 当你请求的时候
    • 没有携带token
    • 带了token但是失效
    • 后台会响应:
      • 状态码是401
      • 跳转到登录页面
  • 响应拦截器:是每次响应到客户端的时候,拦截。
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
  }, function (error) {
    // 对响应错误做点什么
    // 状态码是401  跳转到登录页面
    return Promise.reject(error);
  });

最终的代码:api/index.js

// 响应拦截器:在每次响应后 做某一些事情
axios.interceptors.response.use((res) => {
  // 成功的时候做一些事情
  return res
}, (err) => {
  // 失败的时候做一些事情
  // 获取响应状态码 err对象包含响应对象  err.response
  // 响应对象中包含状态码  err.response.status
  if (err.response.status === 401) {
    // 跳转到登录页面 this.$router.push('/login')
    // 方式1:
    // $router.push('/login') 其实 地址栏改成  #/login
    // location.hash = '#/login'
    // 方式2:
    // 此时没有vue实例,$router对象获取不到,通过router实例直接使用
    router.push('/login')
  }
  return Promise.reject(err)
})

12-axios-结合async与await使用

  • axios是基于promise封装的xhr请求
  • promise的更优雅的使用是结合async和await

异步操作:

  • jquery的ajax 还是要回调函数 弊端:回调地狱
  • axios的promise的请求 弊端:代码不够简洁
  • async与await是关键字 修饰异步函数 作用:使用同步的语法来书写异步的操作
    // 当请求了A接口的数据才能获取B接口的数据

    // xhr 发请求  
    // const xhr = new XMLHttpRequest()
    // xhr.open('get','http://localhost:3000/a')
    // xhr.send()
    // xhr.onload = function(){
    //   console.log(xhr.responseText)
    //   const xhr2 = new XMLHttpRequest()
    //   xhr2.open('get','http://localhost:3000/b')
    //   xhr2.send()
    //   xhr2.onload = function(){
    //     console.log(xhr2.responseText)
    //   }
    // }

    // promise 发请求
    // 怎么创建一个promise对象 const proimse = new Promise(回调函数)
    // Promise.reject() 返回一个失败的promise对象
    // Promise.resolve() 返回一个成功的promise对象
    // proimse.then(成功).catch(失败)
    const axios = (url) => {
      return new Promise((resolve, reject) => {
        // resolve 成功的时候应该调用的回调函数
        // reject 失败的时候应该调用的回调函数
        const xhr = new XMLHttpRequest()
        xhr.open('get', url)
        xhr.send()
        xhr.onload = function () {
          // 传参内容 将在then的时候使用
          resolve(xhr.responseText)
        }
        xhr.onerror = function () {
          reject('失败错误对象')
        }
      })
    }
    // axios('http://localhost:3000/a').then(data=>{
    //   console.log(data)
    //   return axios('http://localhost:3000/b')
    // }).then(data=>{
    //   console.log(data)
    // })

    // async 与 await 的使用只能结合promise

    // 返回值是 promise 对象 加上await后返回是then的回调参数
    const getData = async () => {
      const a = await axios('http://localhost:3000/a')
      const b = await axios('http://localhost:3000/b')
      console.log(a)
      console.log(b)
      // await is only valid in async function
      // awiat的使用必须在async修饰的函数内使用
    }
    getData()
仿今日头条网站模板多用户自媒体平台网站源码带数据带手机版 php仿今日头条网站模板多用户自媒体平台网站源码带数据带手机版,带安装说明 立即下载

相关推荐

仿今日头条前端代码

文件说明: 本源码是本人在javaweb课程设计期间所做项目的前端代码,使用的是div+css布局实现, 是仿照今日头条PC版页面做的,基本相似。

仿今日头条后台管理系统(一)

(一)今日头条后台管理项目 01-项目-简单介绍 ​ (理解今日头条)的后台管理系统,个人的后台管理系统,发布文章新闻不便利,需要这个PC的系统。 登录 欢迎页面 发布文章 素材管理 内容管理 粉丝管理 评论管理 个人设置 02-项目-准备工作 vue基础 vue的插件 vue-router 需要数据 axios 需要后台接口 使用UI框架 element-ui 饿了么前端团队UI组...

keep96的博客 5870

模仿今日头条的简单实现源码

模仿今日头条的简单实现,主要实现主页及新闻页等页面的实现。 注意:volley需要自己导入哦。

精仿今日头条

转载请注明出处:http://blog.youkuaiyun.com/Chay_Chan/article/details/75319452 由来篇 当初的梦想   一直都想尝试开发自己还没接触过的某类APP,以前刚入门的时候,就有一个梦想:开发社交类、地图类、新闻类、支付、电商类、直播类、游戏类这些APP。社交类的大二的时候已经开发过一款即时通讯的APP,用的是网易云信的SDK;地图、支付、电商

Chay_Chan的博客 2万+

仿今日头条app web 页面

仿今日头条写的web端页面,点击下面评论及回复弹出隐藏的多文本输入框,点击查看全部回复展示侧滑页面,显示全部评论信息

深入解析Pytest 底层源码

Pytest 的底层架构是一个基于 pluggy钩子机制的微内核架构。其核心流程是一个固定的链条,链条上的每个环节都通过钩子向外暴露,允许插件介入。这种设计使得 Pytest 极其灵活和强大。启动: 解析配置,加载所有插件(包括核心插件)。收集: 遍历文件系统,发现测试用例,并生成Item对象。执行: 对每个Item,依次执行setup->call->teardown协议。报告: 在整个过程中,通过不同的钩子收集信息,最终生成报告。

monk all the way 619

java仿今日头条平台(源码+开题报告)

本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考。

卢卡毕设程序 1108

Simscape Multiboby学习笔记1——跟着官网学Multibody

文章目录一. 引言二. Simscape Multibody自学之路三. 本教程的目录 一. 引言 最近在倒腾Matlab的动力学仿真,起因是看到有人推荐Matlab的multbody模块,一经了解之下简直惊为天人。作为一名Matlab的小粉,看到这么好用的模块简直不要太开心,之前用simulink搭飞行器的仿真模型,虽然能够仿真看到六自由度位移,毕竟不能可视化,还是很不够直观,而且simulink仿真(以及更费力的脚本文件仿真)需要精确建模,模型不精确计算也是天差地别。而Multibody在具备其他动力学

qq_30267617的博客 8241

android高仿今日头条,toutiao

仿今日头条仿今日头条项目是使用基于java的原生安卓开发的项目,前端使用的是retrofit网络请求框架与后端交互,后端使用nodejs后台,便利开发,而数据是使用的mongoDB数据库,不使用sql语句操作数据库,方便了开发。由于此项目仅供学习用途,所以使用今日头条的真实数据。觉得对你有帮助的话请帮忙star一下,让更多人知道,多谢啦!现有功能首页首页是新闻列表的展示,新闻的刷新与加载更多,新闻...

weixin_42393127的博客 2403

使用TinyProxy搭建代理服务器

背景 办公电脑所在网络无法连接外网,机房服务器可以连接外网,通过服务器代理上网; 一、CentOS下TinyProxy安装–搭建代理服务器 TinyProxy是个轻量级简单的HTTP/HTTPS代理程序,GitHub和官网,安装方式这里主要介绍两种 CentOS下yum安装,参考:TinyProxy安装 Docker安装 先安装docker环境yum install docker -y 二、Win10下使用 ...

椰汁菠萝 1万+

AD学习笔记(一)基础认识

文章目录AD学习笔记第一讲 AD基础认识一、两库两图(分别对应下图)1、PCB图(pcbdoc)2、原理图(schdoc)3、原理图库(schlib)4、PCB库(pcblib)二、封装1、DIP封装2、LQFP封装三、绘制整体流程1、建立工程(PrjPcb)2、建立两库两图并保存整个工程(五次)3、从库中提取绘制原理图4、原理图导入pcb图5、根据原理图布线6、pcb图交由工厂打板 AD学习笔记 第一讲 AD基础认识 一、两库两图(分别对应下图) PCB图(pcbdoc) 原理图(schdoc) PCB库

qq_52465473的博客 6686

头条项目-api

黑马头条-自媒体 门户 查询所有已实现接口 基本信息 Path: /mp/ Method: GET 接口描述: 线上接口地址 http://ttapi.research.itcast.cn/mp/ 返回已上线接口地址,形如: {     "user.Authorization": "/v1_0/authorizations",     "user.Captcha": "/v1_0/captchas/<mobile:mob..

weixin_44867717的博客 7670

YOLOv8轻量化模型瘦身术:深度解析与实战LAMP剪枝 YOLOv8(2021)

YOLOv8模型LAMP剪枝技术解析与实战 本文深入探讨了LAMP剪枝技术在YOLOv8目标检测模型中的应用。针对深度学习模型部署面临的资源限制问题,LAMP剪枝通过最小化L2失真和层自适应稀疏度分配,实现了高效模型压缩。相比传统幅度剪枝的"一刀切"方法,LAMP创新性地将剪枝建模为优化问题,定义LAMP分数来衡量权重重要性,自动确定各层最佳剪枝率。文章从理论基础出发,详细解析了LAMP的核心数学公式和算法流程,并提供了完整的YOLOv8移植实战指南,包括代码结构、剪枝步骤和微调策略。通

FJN110的博客 2422

仿今日头条后台管理系统(二)

仿今日头条后台管理系统(二) ###03-登录模块-分析表单组件 <!-- el-form 表单容器 --> <!-- ref="form" 获取dom使用--> <!-- :model="form" model属性绑定了动态数据form 将来提交后台的数据对象收集了所有的表单元素的值--> <!-- label-width="80px" 统一设置文...

keep96的博客 1328

stata 工具变量法【计量经济系列(七)】

stata 工具变量法【计量经济系列(七)】 1. 内生性 2. 工具变量3. 2SLS (二阶段最小二乘法) 4. 弱工具变量5. 工具变量外生性的过度识别检验 6. 豪斯曼检验6.1 传统豪斯曼 6.2 杜宾-吴-豪斯曼检验(DWH)

侯小啾技术博客 2万+

OpenClaw入门必装Skills(附使用场景)

很多同学安装了OpenClaw后,但却不会使用,就相当于你只是拥有了一副强大的躯干,却没有给它装上能够灵活执行任务的“手脚”和负责思考决策的“大脑插件”——Skills。没有这些核心能力的支撑,OpenClaw只是一个“空壳”,无法真正应用到实际业务场景中,更谈不上提升效率或解决复杂问题。所以,安装只是第一步,要真正让OpenClaw“活”起来,为我们所用,就需要给OpenClaw安装各种Skills,这个过程就是养虾的过程。

十二测试录 3224

全网首个基于springboot的仿今日头条系统「系统+文档开源」

项目描述: 仿照今日头条的WEB端toutiao.com做的一个Java web项目。 使用SpringBoot+Mybatis+thymeleaf开发。 前端使用bootstrap、html5、css3动画、jQuery、WangEditor富文本编辑器、Webuoloader和Base64处理图片上传、ajax异步处理表单数据,包括后台管理系统

Trouvailless的博客 2339

从零构建法律案例数据库:Python爬虫实战与法律文本挖掘全攻略

在当今数字化浪潮席卷全球的背景下,法律行业正经历着前所未有的变革。法律案例数据库作为法律大数据的重要组成部分,已经成为法律从业者、研究人员、法学院学生乃至企业法务部门的必备工具。然而,商业法律数据库如北大法宝、威科先行、LexisNexis等往往价格不菲,且数据访问受限。对于个人研究者或小型机构而言,构建一个定制化的法律案例数据库不仅能节省成本,更能根据特定研究需求灵活调整数据结构。

2201_76125261的博客 538

基于springboot的仿今日头条系统「系统+文档开源」

前端使用bootstrap、html5、css3动画、jQuery、WangEditor富文本编辑器、Webuoloader和Base64处理图片上传、ajax异步处理表单数据,包括后台管理系统。项目技术: spring boot+spring mvc+mybatis+bootstrap+jquery。运行环境: jdk8+tomcat7+mysql+IntelliJ IDEA+maven。Spring Boot+Mybatis+thymeleaf开发的高仿今日头条新闻网站。

代码界的扛把子 212

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

广告投放系统后台html,今日头条广告如何投放?今日头条广告后台操作说明

创建广告组点击“新建广告组”,进入创建广告组页面选择推广目的,根据你所推广的商品或服务选择对应的推广目的设置广告组预算和广告组名称点击“保存继续”,完成广告组创建,进入广告计划创建页面选择推广目的广告组支持应用下载、落地页和文章推广三种推广目的。推广目的分类介绍设置广告组预算和名称设置广告组预算金额:根据客户预算要求设置不限预算或指定预算金额设置广告组名称:按照推广目的、推广位置、推广品类按统一格...

weixin_33196106的博客 1521

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

前后端分离实战项目——基于springboot的仿今日头条系统「系统+文档开源」

前端使用bootstrap、html5、css3动画、jQuery、WangEditor富文本编辑器、Webuoloader和Base64处理图片上传、ajax异步处理表单数据,包括后台管理系统。项目技术: spring boot+spring mvc+mybatis+bootstrap+jquery。运行环境: jdk8+tomcat7+mysql+IntelliJ IDEA+maven。使用SpringBoot+Mybatis+thymeleaf开发。就可以获得下载链接和提取码。

weixin_68320784的博客 322

android 仿今日头条_仿今日头条Gfast CMS 网站开源分享!

Gfast 开源以来,CMS管理模块一直深受大家喜欢于是就有朋友建议弄一个CMS前端给大家学习使用,然而由于公司最近事项比较多,所以一直没能及时处理,今天终于把所有的前端处理完成,大家可以去下载学习!码云后端地址:tiger1103/gfast码云前端地址:tiger1103/gfast-uigithub后端地址:https://github.com/tiger1103/gfastgithub前端...

weixin_39637919的博客 365

686Spring Boot+Mybatis+thymeleaf开发的高仿今日头条新闻网站新闻发布系统

项目描述: 仿照今日头条的WEB端toutiao.com做的一个Java web项目。使用SpringBoot+Mybatis+thymeleaf开发。 前端使用bootstrap、html5、css3动画、jQuery、WangEditor富文本编辑器、Webuoloader和Base64处理图片上传、ajax异步处理表单数据,包括后台管理系统 运行环境: jdk8+tomcat7+mysql+IntelliJ IDEA+maven 项目技术: spring boot+spring mvc+mybatis

全网粉丝10W+、全栈领域优质创作者、掘金、阿里云等社区博客专家、专注于全栈领域和毕业项目实战 474

前端学习(3016):vue+element今日头条管理--总结

歌谣的博客 330
上一篇: 仿今日头条后台管理系统(二)
keep96
博客等级 码龄8年 8粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值