SpringBoot+Vue開發之Login校驗規則、實現登入和重置事件
一、Login校驗規則
1、校驗規則寫法可參考Element-ui官網文件
https://element.eleme.cn/#/zh-CN/component/form
2、Login.vue頁面
<template> <div class="login_container"> <!-- 登入塊 --> <div class="login_box"> <!-- 頭像 --> <div class="acator_box"> <img src="../assets/logo.png" /> </div> <!-- 表單區域 --> <el-form ref="loginFormRef" :rules="loginRules" :model="loginForm" class="login_form" label-width="0"> <!-- 使用者名稱 --> <el-form-item prop="username"> <el-input v-model="loginForm.username" prefix-icon="iconfont icon-denglu"> </el-input> </el-form-item> <!-- 密碼 --> <el-form-item prop="password"> <el-input v-model="loginForm.password" prefix-icon="iconfont icon-mima"> </el-input> </el-form-item> <!-- 按鈕 --> <el-form-item class="btns"> <el-button type="primary">提交</el-button> <el-button type="info">重置</el-button> </el-form-item> </el-form> </div> </div> </template> <script> export default { data() { return { // 表單資料物件 loginForm: { username: "username",password: "password" },// 驗證物件 loginRules: { //使用者名稱 username:[ //必填項驗證,required意思為必須的,trigger意思為觸發機制,blur意思為失去焦點 { required: true,message: '請輸入使用者名稱稱',trigger: 'blur' },//長度驗證 { min: 5,max: 10,message: '長度在 5 到 10 個字元',trigger: 'blur' } ],//密碼 password:[ //必填項驗證,required意思為必須的,trigger意思為觸發機制,blur意思為失去焦點 { required: true,message: '請輸入使用者密碼',trigger: 'blur' } ] } }; },}; </script> <style lang="less" scoped> // 根節點樣式 .login_container { background-color: #2b4b6b; height: 100%; } .login_box { width: 450px; height: 300px; background-color: #ffffff; border-radius: 3px; position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); .acator_box { width: 130px; height: 130px; border: 1px solid #eeeeee; border-radius: 50%; padding: 10px; box-shadow: 0 0 10px #dddddd; position: absolute; left: 50%; transform: translate(-50%,-50%); background-color: #00eeee; img { width: 100%; height: 100%; border-radius: 50%; background-color: #eeeeee; } } } .btns { display: flex; justify-content: flex-end; } .login_form { position: absolute; bottom: 0%; width: 100%; padding: 0 10px; box-sizing: border-box; } </style>
3、執行結果
思考:
Element UI作為一個CSS框架,竟然能夠進行表單驗證,我想這肯定內部封裝了JS;
二、實現登入和重置事件
1、在main.js中匯入axios
import Vue from 'vue' import App from './App.vue' import router from './router' import './plugins/element.js' //匯入全域性樣式 import './assets/css/global.css' //引入圖示 import './assets/font/iconfont.css' //匯入axios import axios from 'axios' //掛載 Vue.prototype.$http = axios //設定訪問根路徑 axios.defaults.baseURL = "http://localhost:9000" Vue.config.productionTip = false new Vue({ router,render: h => h(App) }).$mount('#app')
2、在Login頁面編寫對應方法
(注意登入方法和重置方法的繫結和在下面的編寫)
<template> <div class="login_container"> <!-- 登入塊 --> <div class="login_box"> <!-- 頭像 --> <div class="acator_box"> <img src="../assets/logo.png" /> </div> <!-- 表單區域 --> <el-form ref="loginFormRef" :rules="loginRules" :model="loginForm" class="login_form" label-width="0"> <!-- 使用者名稱 --> <el-form-item prop="username"> <el-input v-model="loginForm.username" prefix-icon="iconfont icon-denglu"> </el-input> </el-form-item> <!-- 密碼 --> <el-form-item prop="password"> <el-input v-model="loginForm.password" prefix-icon="iconfont icon-mima" type="password"> </el-input> </el-form-item> <!-- 按鈕 --> <el-form-item class="btns"> <el-button type="primary" @click="login()">提交</el-button> <el-button type="info" @click="resetLoginForm()">重置</el-button> </el-form-item> </el-form> </div> </div> </template> <script> export default { data() { return { // 表單資料物件 loginForm: { username: "admin",password: "123456" },methods:{ //重置表單內容 resetLoginForm(){ this.$refs.loginFormRef.resetField(); },//登入 login(){ //表單驗證 this.$refs.loginFormRef.validate(async valid =>{ if(!valid){ return; } const {data:res} = await this.$http.post("login",this.loginForm);//訪問後臺 console.log(res.flag); if(res.flag == "ok"){ this.$message.success("操作成功!"); // up主是這麼寫的,this.$router.push({"/home"}}); this.$router.push("/home");//頁面路由跳轉 console.log(res.user); window.sessionStorage.setItem("user",res.user); }else{ this.$message.success("操作失敗!"); } }); } } }; </script> <style lang="less" scoped> // 根節點樣式 .login_container { background-color: #2b4b6b; height: 100%; } .login_box { width: 450px; height: 300px; background-color: #ffffff; border-radius: 3px; position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); background-color: #00eeee; img { width: 100%; height: 100%; border-radius: 50%; background-color: #eeeeee; } } } .btns { display: flex; justify-content: flex-end; } .login_form { position: absolute; bottom: 0%; width: 100%; padding: 0 10px; box-sizing: border-box; } </style>
3、建立Home.vue頁面
(這裡我們把安全退出也寫進去了,安全退出是將自己登入之後的賬戶資訊也清除掉了,安全退出之前還有一些工作要做,因為這些東西改動的地方多而雜,搬來就不想繼續做筆記了,但是想想,確實裡面也有很多新的知識點,還是硬著頭皮來吧)
<template> <div> Home 首頁! <el-button class="info" @click="logout()"> 安全退出! </el-button> </div> </template> <script> export default { methods:{ logout(){ window.sessionStorage.clear(); this.$router.push("/login"); } } } </script> <style> </style>
4、在index.js中引入home元件,並配置路由
(建立的.vue頁面被稱為元件,建立之後引入才能用,再配置路由進行頁面的分發;關於路由,我本來並不懂這個概念,但當我知道了他的寫法和功能再加上對WiFi路由器的聯想,意思也許就是負責頁面分發吧,暫時就不去細查了)
import Vue from 'vue' import VueRouter from 'vue-router' //引入login元件 import Login from '../components/Login.vue' //引入home元件 import Home from '../components/Home.vue' Vue.use(VueRouter) const routes = [ { path:"/",//將首頁“/”重定向到“/login” redirect:"/login" },{ //將上面引入的Login與“/login”訪問路徑進行繫結 path:"/login",component:Login },{ //將上面引入的Home與“/home”訪問路徑進行繫結 path:"/home",component:Home } ] const router = new VueRouter({ routes }) export default router
5、登入方法詳述(註釋說明)
//登入 login(){ //表單驗證 this.$refs.loginFormRef.validate(async valid =>{ if(!valid){ return; } //這裡我們發起post請求,傳入表單資料,將伺服器返回值傳給res物件 const {data:res} = await this.$http.post("login",this.loginForm);//訪問後臺 console.log(res.flag); //如果res的flag是一個ok的話,就說明我們請求成功,並通過了使用者驗證! if(res.flag == "ok"){ this.$message.success("操作成功!"); // up主是這麼寫的,this.$router.push({"/home"}}); this.$router.push("/home");//頁面路由跳轉 console.log(res.user); //這個是將user資料傳遞給全域性變數,方便在其他地方獲取 window.sessionStorage.setItem("user",res.user); }else{ this.$message.success("操作失敗!"); } }); }
6、在後臺(spring boot專案)建立user物件
(我使用了lombok,第一次用了之後就離不開了)
package com.zibo.sport.bean; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class User { private int id; private String username; private String password; private String email; private String role; private boolean state; }
7、編寫UserDao
package com.zibo.sport.dao; import com.zibo.sport.bean.User; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @Repository public interface UserDao { User getUserByMessage(@Param("username") String username,@Param("password") String password); }
8、編寫UserDao.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.zibo.sport.dao.UserDao"> <select id="getUserByMessage" parameterType="String" resultType="user"> select * from user where username=#{username} and password=#{password} and state=1; </select> </mapper>
9、編寫LoginController
(這裡需要說明一下,我們使用JSON工具將map物件轉換成了JOSN字串,具體座標見下面的pom.xml)
package com.zibo.sport.controller; import com.alibaba.fastjson.JSON; import com.zibo.sport.bean.User; import com.zibo.sport.dao.UserDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.Map; @RestController public class LoginController { @Autowired UserDao userDao; @RequestMapping("/login") public String login(@RequestBody User user){ String flag = "error"; System.out.println("user:" + user); User user1 = userDao.getUserByMessage(user.getUsername(),user.getPassword()); System.out.println("user1:" + user1); if(user1!=null){ flag = "ok"; } Map<String,Object> map = new HashMap<>(); map.put("flag",flag); map.put("user",user1); return JSON.toJSONString(map); } }
10、修改啟動類SportApplication,使其能夠掃描dao
package com.zibo.sport; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @MapperScan("com.zibo.sport.dao")//掃描dao @SpringBootApplication public class SportApplication { public static void main(String[] args) { SpringApplication.run(SportApplication.class,args); } }
11、pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.zibo</groupId> <artifactId>sport</artifactId> <version>0.0.1-SNAPSHOT</version> <name>sport</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.74</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
12、資料庫中的資料
建立表:
CREATE TABLE `zb`.`user` ( `id` int(0) NOT NULL AUTO_INCREMENT COMMENT '主鍵',`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`role` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`state` tinyint(0) NOT NULL DEFAULT 0,PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
插入資料:
INSERT INTO `user`(`id`,`username`,`password`,`email`,`role`,`state`) VALUES (1,'admin','123456','[email protected]','超級管理員',1); INSERT INTO `user`(`id`,`state`) VALUES (2,'naughty','888888','[email protected]','普通管理員',0); INSERT INTO `user`(`id`,`state`) VALUES (3,'flysky01','987654','[email protected]','普通使用者',`state`) VALUES (4,'anglybirds','321654','[email protected]',`state`) VALUES (7,'admin003','q123456','[email protected]',`state`) VALUES (8,'admin005','[email protected]',`state`) VALUES (9,'admin007','[email protected]',0);
表展示:
13、演示
(前後端專案要同時啟動,因為我們已經綁定了http://localhost:9000,是向後臺獲取資料)
登入之前:
點選“提交”按鈕之後:
安全退出:
(重置事件太簡單了,是vue實現的,只需呼叫一個方法即可,見程式碼!)
(我們暫時就演示到這裡!)
到此這篇關於SpringBoot+Vue開發之Login校驗規則、實現登入和重置事件的文章就介紹到這了,更多相關spring boot vue實現登入和重置事件內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!