vue3+fastapi 前端登入后端验证代码段

前端采用vue3发送用户名及密码,后端使用fastapi进行验证
很多东西用完了,不久会忘记,边学边往,记录下来之后也好找一些

  • vue3页面代码
<template>
  <div id="b-container" class="container b-container">
    <form @submit.prevent="onSubmit" id="b-form" class="form">
      <h2 class="form_title title">Sign in to Website</h2>

      <div class="form-item">
        <input
          v-model="form.username"
          class="form__input"
          type="text"
          placeholder="用户名"
          @blur="validateField('username')"
        />
        <p v-if="errors.username" class="error">{{ errors.username }}</p>
      </div>

      <div class="form-item">
        <input
          v-model="form.password"
          class="form__input"
          type="password"
          placeholder="密码"
          @blur="validateField('password')"
        />
        <p v-if="errors.password" class="error">{{ errors.password }}</p>
      </div>

      <a class="form__link">忘记密码? 请联系管理员</a>
      <button type="submit" class="form__button button submit">登录</button>
    </form>
  </div>
</template>
  • ts校验代码

<script lang="ts" setup>
import {  reactive,ref } from "vue";
import type { userPasswordForm } from '@/api/model/queryMode'
  /*userPasswordForm的类型
  
export interface userPasswordForm {
  username: string;
  password: string;
}
  */
import {submitPasswordApi} from '@/api/submitPassword' // 这是发送axios
/*
import httpInstance from '@/https/http'
import type { userPasswordForm } from '@/api/model/queryMode'

export const submitPasswordApi = (params: userPasswordForm) =>
  httpInstance.post('/dataop/verifyUpwd', params)


*/

const form = reactive<userPasswordForm>({
  username: "",
  password: ""
});

const errors = reactive<userPasswordForm>({
  username: "",
  password: ""
});

const validateField = (field: keyof userPasswordForm) => {
  if (field === "username") {
    if (!form.username) {
      errors.username = "用户名不能为空";
    } else if (form.username.length < 3 || form.username.length > 15) {
      errors.username = "用户名长度应在3到15个字符之间";
    } else {
      errors.username = "";
    }
  }

  if (field === "password") {
    if (!form.password) {
      errors.password = "密码不能为空";
    } else if (form.password.length < 6) {
      errors.password = "密码长度不能少于6个字符";
    } else {
      errors.password = "";
    }
  }
};

const validateForm = () => {
  validateField("username");
  validateField("password");

  // 检查是否有任何错误
  return !errors.username && !errors.password;
};

const onSubmit = () => {
  if (validateForm()) {
    ElMessage.success("登入成功 !")
    // 在这里处理表单提交逻辑,比如发送请求
    const res = submitPasswordApi(form)
    console.log(res)
  } else {
    ElMessage.error("请仔细检查账号与密码");
  }
};
</script>

  • fastapi后端接受并且校验

这里省去了数据库验证账号和密码,直接验证,注意接受前端发来的表单数据必须经过pydantic 的BaseModel数据类型验证。


from pydantic import BaseModel
class userPwd(BaseModel):
    username:str
    password:str


@app.get('/dataop/verifyUpwd')
async def verifyUserPwd(self,params:userPwd):
        if params.username=="admin" and params.password=="123456":
            return {"message":"ok"}
        else:
            return {"message":"error"}

在这里插入图片描述

参考链接:https://blog.youkuaiyun.com/qq_41045128/article/details/125651144

参考gitee:https://gitee.com/tongqn/login-template

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值