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

本文主要是介绍Django+Vue3前后端分离学习(五)(前端登录页面搭建),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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.userauthStore.setUserToken(user,token);router.push({name:"frame"})}).catch((err)=>{//catch:代表失败的情况(在这里,代表返回的状态码是非200console.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判断,会返回falseif (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

这篇关于Django+Vue3前后端分离学习(五)(前端登录页面搭建)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141631

相关文章

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)

《Python基于火山引擎豆包大模型搭建QQ机器人详细教程(2024年最新)》:本文主要介绍Python基于火山引擎豆包大模型搭建QQ机器人详细的相关资料,包括开通模型、配置APIKEY鉴权和SD... 目录豆包大模型概述开通模型付费安装 SDK 环境配置 API KEY 鉴权Ark 模型接口Prompt