Django+Vue3前后端分离学习(五)(前端登录页面搭建)

news2024/11/13 11:23:34

1、如果需要使用组合式API,需要安装插件:

npm install vite-plugin-vue-setup-extend --save-dev

在vite.config.js里配置:

首先导入:

import VueSetupExtend from 'vite-plugin-vue-setup-extend'

添加:

2、创建login.vue

然后再index.js里添加:

然后修改根路由:

采用Hash方式:

在Vue中加载外部的css文件:

<style scoped src="@/assets/css/login.css"></style>
<style scoped src="@/assets/iconfont/iconfont.css"></style>

图片的话,需要在<scripts>中当做对象一样导入进来

 import login_image from "@/assets/image/login.png"

3、为了接收用户输入的邮箱和密码,在<scripts>里定义一个响应式对象:

引入

import { reactive } from "vue";
let form=reactive({
    email:"",
    password:""
  })

然后再input里通过v-model绑定邮箱和密码:

给登录按钮添加点击事件:

邮箱正则表达式: let pwdRgx = /^[0-9a-zA-Z_-]{6,20}/

密码正则表达式:let emailRgx = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9])+/

采用axios库:

npm install axios --save

或者设置版本号

npm install axios@1.6.8 --save

引入axios库:

 import axios from "axios";

定义方法(后面有改进):


     axios.post("http://127.0.0.1:8000/auth/login",{
       email:form.email,
       password:form.password
     }).then((res)=>{
        //then:代表是成功的情况(在这里,代表返回的状态码200)
       let data=res.data;
       let token=data.token;
       let user=data.user
       authStore.setUserToken(user,token);
       router.push({name:"frame"})

     }).catch((err)=>{
       //catch:代表失败的情况(在这里,代表返回的状态码是非200
       console.log(err.response.data.detail);
     })

数据的保存,放在stores文件夹里:

在stores里创建一个anth.js文件(可以把counter.js里的复制到auth.js里改造

import { ref, computed } from 'vue'
import { defineStore } from 'pinia'

const USER_KEY = "OA_USER_KEY"
const TOKEN_KEY = "OA_TOKEN_KEY"


export const useAuthStore = defineStore('auth', () => {
  let _user = ref({})
  let _token = ref("")
  function setUserToken(user, token) {
    //保存到对象上(内存中)
    _user.value = user;
    _token.value = token;
    //存储到浏览器的localStorge中(硬盘上)
    localStorage.setItem(USER_KEY, JSON.stringify(user))
    localStorage.setItem(TOKEN_KEY, token)
  }

  function clearUserToken() {
    _user.value = {}
    _token.value = ""
    localStorage.removeItem(USER_KEY)
    localStorage.removeItem(TOKEN_KEY)
  }
  //计算属性
  let user = computed(() => {

    //在JS中
    //1、空对象{}:用if判断,会返回true Object.keys(_user.value).length==0
    //2、空字符串"":用if判断,会返回false
    if (Object.keys(_user.value).length == 0) {
      let user_str = localStorage.getItem(USER_KEY)
      if (user_str) {
        _user.value = JSON.parse(user_str)
      }
    }
    // if (!_user.value) {
    //   _user.value = localStorage.getItem(USER_KEY)
    // }
    return _user.value
  })
  let token = computed(() => {
    if (!_token.value) {
      let token_str = localStorage.getItem(TOKEN_KEY)
      if (token_str) {
        _token.value = token_str
      }
    }
    return _token.value
  })

  let is_logined = computed(() => {
    if (Object.keys(user.value).length > 0 && token.value) {
      return true;
    }
    return false;
  })
  return { setUserToken, user, token, is_logined, clearUserToken }
})

然后再login.vue中导入:

  import { useAuthStore } from "@/stores/auth";

然后创建对象:

引入跳转 (router是路由跳转, route 是保存路由信息的):

 import { useRouter } from "vue-router";

然后创建router对象:

设置路由跳转:

4、对axios 优化 ,封装:

在src文件夹下新建一个api文件夹,然后在其下面新建http.js

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2108530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言刷题日记(附详解)(4)

一、选填部分 第一题: 下面四个选项中&#xff0c;均是不合法的用户标识符的选项是( ) A. A P_0 do B. float la0 _A C. b-a sizeof int D. b_a temp _123 思路提示&#xff1a;题中所问的是"不合法"的"用户标识符"&#xff0c;要记得&#xff0c;C…

4区升3区的“灌水王者”!7个月还未送审被人评为“小牌大耍”?急投学者注意

【SciencePub学术】本期&#xff0c;给大家介绍的是1本计算机类的SCI——《JOURNAL OF SUPERCOMPUTING》。 优点VS缺点 • 期刊投稿难度较小&#xff0c;接受率较高 • 国人投稿友好&#xff0c;且已经稳定检索了28年 • 去年由中科院4区升为3区 • 普遍反映这本期刊审稿周期…

项目总体框架

一.后端&#xff08;包装servlet&#xff09; 使用BaseServlet进行请求的初步处理&#xff08;利用继承进行执行这个&#xff09; 在BaseServlet中 处理请求的类型找到对象的方法&#xff0c;并使用注解找到参数名&#xff0c;执行参数自动注入。 package com.csdn.controlle…

JAVA数据导出为Excel

目录 一、导入依赖 二、使用的相关类 1、XSSFWorkbook 构造方法 创建表 操作表 保存表 样式和格式 日期处理 密码保护 其他 2、XSSFSheet 获取属性和信息 行操作 列操作 表的属性 合并单元格 保护表 页眉和页脚 注释 其它 3、XSSFRow 获取属性和信息 单…

Redis 常用命令总结

文章目录 目录 文章目录 1 . 前置内容 1.1 基本全局命令 KEYS EXISTS ​编辑 DEL EXPIRE TTL TYPE 1.2 数据结构和内部编码 2. String类型 SET GET MGET MSET SETNX INCR INCRBY DECR DECYBY INCRBYFLOAT 命令小结 内部编码 3 . Hash 哈希类型 HSET …

如何用python远程测试连接redis服务器

前提条件 A&#xff1a;操作机&#xff08;操作系统不限&#xff09; B&#xff1a;装有redis的服务器&#xff08;linux系统&#xff09; 而且需要配置redis服务器允许外部连接。这个一般是在redis的配置文件里修改相关选项。redis.conf或者6379.conf就是redis的配置文件 b…

备考MS office 二级

word 1、分页符 布局-分隔符-分节符-下一页&#xff1a;第二张可以不同纸张大小、方向等 2、调整宽度&#xff1a;新文字宽度&#xff08;字符宽度&#xff09; 中文版式 3、字符间距 4、文本转换为表格 1、把 || 替换为逗号&#xff0c;方便查找 5、首字下沉 插入 - 首字下沉…

ActiveMQ 反序列化漏洞复现(CVE-2015-5254)

一、漏洞前言 Apache ActiveMQ是美国阿帕奇&#xff08;Apache&#xff09;软件基金会所研发的一套开源的消息中间件&#xff0c;它支持Java消息服务&#xff0c;集群&#xff0c;Spring Framework等。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞&#xff0c;该漏洞源于程…

一篇python常见的Pandas的数据功能的使用

当我们学习了如何使用 Pandas 进行数据的导入与导出,这为我们后续的数据处理打下了基础.此次我们将重点讨论数据选择与过滤.通过掌握这一部分的知识,你将能够轻松地从复杂的数据集中提取出所需的信息.接下来,我们将通过一些实例来逐步了解这些操作. 数据选择 数据选择主要是针…

二分查找 ,看这一篇就够了

什么是二分查找&#xff1f; 二分查找&#xff08;Binary Search&#xff09;是一种高效的查找算法&#xff0c;适用于在有序数组中查找特定元素。其基本思想是通过逐步缩小查找范围&#xff0c;每次将查找区间减半&#xff0c;从而大大提高查找效率。二分查找的时间复杂度为O(…

B样条曲线测试

实验效果&#xff1a; 绿色为A*规划的路径&#xff0c;蓝色为Bspline曲线 介绍 对A* 生成的路径进行B样条&#xff08;A* 和Bspline都是佬们写好的&#xff0c;我直接拿来用&#xff09; 样条曲线相关可参考文章&#xff1a;详解样条曲线&#xff08;上&#xff09;&#x…

基于LaMA-Factory微调llama3.1-8B

大模型的训练目前主要分为Pre-training和Post-training&#xff0c;受限于资源算力等原因&#xff0c;实际工作中更多用到的是SFT。 对于普通用户来说SFT仍然具备较高的门槛&#xff0c;需要了解一定的理论基础&#xff0c;准备用于微调的数据&#xff0c;由于不同基座模型相应…

xilinx通用RAM或者FIFO设计

1、在 Vivado 中&#xff0c;XPM&#xff08;Xilinx Parameterized Macros&#xff09;是 Xilinx 提供的一组预定义的、参数化的硬件描述语言 (HDL) 宏模块&#xff0c;用于简化设计流程和提高设计效率。XPM 模块通常用于实现常见的功能&#xff0c;比如存储器&#xff08;RAM/…

PWR电源控制(低功耗模式)

1 PWR简介 1 程序后面是空循环&#xff0c;即使不用也会耗电&#xff0c;所以有了低功耗&#xff08;例如遥控器&#xff09; 2 也要保留唤醒模式&#xff0c;如串口接收数据中断唤醒&#xff0c;外部中断唤醒&#xff0c;RTC闹钟唤醒&#xff0c;在需要工作是&#xff0c;ST…

docker装大米cms(damicms)各种cms可用相同办法

1.docker pull 拉取镜像文件 docker pull medicean/vulapps:base_lamp 2.使用docker运行 docker run -d -p 8080:80 medicean/vulapps:base_lamp 3将需要搭建的 CMS 项目源码放到 kali 中&#xff0c;这里以 damiCMS 为例 查看容器id docker ps 4进入dmCMS 所在目录&#…

基于Java+SpringBoot+Vue的新闻稿件管理系统

基于JavaSpringBootVue的新闻稿件管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1f345; 哈…

利用高德API获取整个城市的公交路线并可视化(四)

副标题&#xff1a;公共汽电车站点覆盖率——以厦门市公交线路为例 书接上回&#xff0c;我们有了公交的线路、站点数据&#xff0c;并同时对数据质量进行了校验&#xff0c;但是不同城市情况不同&#xff0c;需要看当地对公交交通数据的开放程度&#xff0c;部分城市建设的有…

Linux系统运行模式以及链接文件

一.Linux系统运行模式 如上图所示&#xff0c;可以使用runlevel这条命令去查看当前系统的运行模式。 如上图所示&#xff0c;可以使用这条命令使得机器以字符模式启动。 如上图所示&#xff0c;可以使用这条命令使得机器以图像化界面启动。 二.链接文件 链接文件类型&#xff…

Aigtek电压放大器的技术指标是什么

电压放大器是一种电路&#xff0c;用于将低电压信号放大为高电压信号。它在电子、通信、音频和视频等领域广泛应用。下面是电压放大器电路的一些特点。 放大倍数高&#xff1a;电压放大器的主要功能是将输入信号的幅度放大到所需的输出电压。因此&#xff0c;电压放大器的一个重…

(Postman)接口测试基础应用

目录 ​编辑 1.简介与分类 2.接口测试流程及用例设计 3. 实战接口介绍 4.postman的简介&#xff0c;安装&#xff0c;注册 5.get请求和响应页签详解 6. 问题​编辑 1.环境变量和全局变量&#xff1a;globals--全局变量 2.接口关联 1.简介与分类 1.接口测试是测试系统组…