首页 > 其他分享 >FastApi (一)前端项目

FastApi (一)前端项目

时间:2022-12-06 22:58:24浏览次数:49  
标签:Vue 项目 FastApi 前端 request export router import 页面

来自《Python FastAPI Web开发从入门到项目实战》一书的前端项目

1.项目目录

2.主文件main.js

项目运行时执行的第一个文件,初始化运行环境,统一管理项目用到的模块

import Vue from 'vue'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue'
import moment from 'moment'
import router from './router'

const whiteList = ['/login'] 
//定义路由守卫,未登录时,跳转到登录页面
router.beforeEach(async(to, from, next) => { 
// 登录成功后会设置Authorization,此时hasToken的判断为true
    const hasToken = window.sessionStorage.getItem('Authorization') 
    // console.log(hasToken)
    if (hasToken) {
        if (to.path === '/login') {
          next({ path: '/' })
        } else {
            next()
        }
    } else {
        if (whiteList.indexOf(to.path) !== -1) {
            next()
          } else {
            next('/login')
          }
    }
})
//初始化Vue设置
Vue.config.productionTip = false  // productionTip设置为 false ,可以阻止 vue 在启动时生成生产提示
Vue.prototype.$moment = moment  // 全局引入moment模块
//启用ElemenuUI框架
Vue.use(ElementUI);
//创建Vue应用实例
new Vue({
    el: '#app',
    router: router,
    render: h => h(App),

})

3.网络请求文件

1.网络请求框架axios

//web/src/request.js
import axios from 'axios'

// 创建Axios实例
const request = axios.create({
  timeout: 5000, // 单次请求的超时设置
  baseURL: process.env.VUE_APP_BASE_API, // 设置服务器地址
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 获取认证信息
    var token = window.sessionStorage.getItem('Authorization')
    if (token) {
      // 设置全局的请求头,用于接入OAuth2认证
      config.headers['Authorization'] = 'Bearer ' + token
    }
    return config
  },
  error => {
    // 报错时,在控制台打印错误信息
    console.log('req',error) 
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    const res = response.data
    // 此处可以添加全局响应数据的处理代码,比如对自定义响应状态码的处理
    return res
  },
  error => {
     // 报错时,在控制台打印错误信息
    console.log('err', error)
    return Promise.reject(error)
  }
)

export default request  // 导出Axios实例

baseURL:前端项目中的所有请求都会发送到这个服务器地址。
请求拦截器中设置请求头,添加token。
在一个模块中,可以同时使用export default 和export 向外暴露成员:
export default 向外暴露的成员,可以使用任意变量来接收。
使用export导出的成员,使用{ }按需接收。

2.网络请求函数定义

//web/src/api/index.js
import request from '@/request'
import qs from 'qs'  // 字符串解析模块,用于封装表单数据
// 登录函数
export function login(data) {
    return request({  //定义request函数生成请求对象
      url: '/auth/login',  // 对应后端API文档中的API地址
      method: 'post',   //请求方法,对应API文档中的请求方法
      headers: {'Content-Type': 'application/x-www-form-urlencoded'}, // 自定义请求头,这里会调用OAuth2登录方法,发送表单数据,需要修改请求头
      data: qs.stringify(data)  // 使用qs封装请求数据
    })
  }
// 获取预约信息列表函数
export function getPersonList(params) {
    return request({
        method: 'get',
        url: '/person/list',
        params   // 传入查询参数
    })
}
// 获取登记信息列表函数
export function getCheckInList(params) {
    return request({
        method: 'get',
        url: '/checkin/list',
        params
    })
}

4.路由表

路由的作用是将访问地址与被访问页面进行关联,前端项目中的所有页面都需要在路由表中定义。

//web/src/router.js
import Vue from 'vue'
import VueRouter from 'vue-router'

Vue.use(VueRouter)

// 导入布局组件
import Layout from '@/views/layout'
//定义路由表
export const constantRoutes = [
    {
    path: '/', //定义路由访问地址,即浏览器地址栏URL片断符合#后面的部分
    component: Layout, //访问地址对应的试图组件,前端服务器将视图组件渲染成HTML,返回给浏览器显示
    redirect: '/person',  // 该路由的跳转路由
    children: [         // 定义子路由。点击按钮后,可以在父组件中切换子组件。显示页面的时候,会将下级路由对应的页面嵌入其上级路由对应的页面中
      {
        path: 'person',   // 预约查询页面
        component: () => import('@/views/person'),
        name: 'person',
        meta: { title: '预约', icon: 'dashboard'}
      },
      {
        path: 'checkin',  //登记查询页面
        component: () => import('@/views/checkin'),
        name: 'checkin',
        meta: { title: '登记', icon: 'dashboard'}
      },
      ]
    },
    {
      path: '/login',  //登录页面
      component: () => import('@/views/login')
    },
]

const createRouter = () => new VueRouter({
  scrollBehavior: () => ({ y: 0 }),
  routes: constantRoutes
})

// 创建路由实例
const router = createRouter()  

export function resetRouter() {
  const newRouter = createRouter()
  router.matcher = newRouter.matcher // reset router
}

export default router

5.视图组件文件

每个视图分为三部分:页面模板,页面脚本,页面样式
使用element-ui实现页面模板

标签:Vue,项目,FastApi,前端,request,export,router,import,页面
From: https://www.cnblogs.com/leimu/p/16961661.html

相关文章

  • 前端 BOM,DOM, jQuery
    BOM操作 //1.BOM(BrowserObjectModel)指的是浏览器对象模型,它会让JavaScript具备与浏览器交互的能力//2.一些BOM操作-1.window.open()//......
  • 前端基础之BOM和DOM,jQuery类库
    BOM操作BOM(BrowserObjectModel)是指浏览器对象模型,它使JavaScript有能力与浏览器进行“对话”。window对象Window对象是客户端JavaScript最高层对象之一,由于window对......
  • Maven项目管理工具
    Maven项目管理工具1.Maven基础1.1Maven基础概念1.1.1仓库仓库:用于存储资源,包含各种jar包仓库分类:本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源远程......
  • 前端内容
    前端内容前端课程介绍第一篇:前端基础之HTML第二篇:前端基础之CSS第三篇:前端基础之JavaScript第四篇:前端之BOM与DOM第五篇:前端之JQuery第六篇:前端之Bootstrap......
  • 前端之jQuery
    jQueryIE浏览器:前端针对IE有时候需要单独写一份代码jQuery的宗旨是:Writeless,domore写的更少做的更多加载速度快选择器更对更好用链式表达式:jQuery的链式操作可......
  • 前端JS
    窗口相关操作//以下代码均为省掉window前缀的尽量写全(见名知意)open()//打开新的空白网页(可跟网址)open('网址','','宽,高')//打开新的子页面......
  • #yyds干货盘点# 歌谣学前端之react三个api之一
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • #yyds干货盘点# 歌谣学前端之react三个api之一续集
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • 前端之js之BOM操作-DOM操作-jQuery类库
    目录前端之js之BOM操作-DOM操作-jQuery类库今日内容概要今日内容详细BOM操作DOM操作查找标签操作节点获取值操作class与css操作事件事件实战案例jQuery类库标签对象与jQuer......
  • 前端开发(05)
    一.Jacascript组成JavaScript的实现包括以下3个部分:ECMAScript(核心)描述了JS的语法和基本对象文档对象模型(DOM)处理网页内容的方法和接口浏览器对象类型(......