本篇文章小编给大家分享一下FastApi+Vue+LayUI实现前后端分离代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
前言
在前面的Api开发中,我们使用FastApi已经可以很好的实现。但是实际使用中,我们通常建议前后端项目分离。今天我们就使用FastApi+Vue+LayUI做一个前后端分离的Demo。
项目设计
后端
后端我们采用FastApi在新的test视图中,定义一个路由,并将其注册到app中,并且在test视图中定义一个接口,实现模拟从数据库读取数据供前端调用渲染。
代码
test.py
from fastapi import FastAPI,Depends,Header,HTTPException,APIRouter from fastapi.param_functions import Body from starlette.requests import Request from starlette.templating import Jinja2Templates from starlette import status import uvicorn from deta import Deta from fastapi.responses import StreamingResponse from fastapi.responses import JSONResponse # 实例化路由器 router = APIRouter() templates = Jinja2Templates('templates') # 注意,视图这里使用router来声明请求方式&URI @router.get('/info') def user_list(): # vue的响应数据 items = [ {'id':'1','name':'phyger'}, {'id':'2','name':'fly'}, {'id':'3','name':'enheng'}, ] return JSONResponse(content=items) @router.get('/') def welcome(): return "这里是测试路由" ''' 实际上,这里的home.html也是需要前端服务去向用户渲染的, 但是我们为了方便演示,未启动前端服务器,直接将前端代码写在了home.html中, 实际上,当用户请求/check的时候,前端代码会去请求/info接口获取数据, 从而实现前端页面的数据渲染。 ''' @router.get('/check') def home(request:Request): return templates.TemplateResponse(name='home.html',context={'request':request,})
前端
前端我们直接导入Vue、LayUI、Axios的JS和CSS的CDN资源,在Vue实例的mount阶段,使用axios调用后端接口拿到数据,使用LayUI的样式对table元素进行美化。
代码
Home
[[ p.id ]] [[ p.name ]]
运行项目
启动 FastApi 后端服务器,访问 /test/check 接口。
Q&A
Q:为什么在请求/info 接口总会出现一个 Temporary Redirect 重定向呢?
A:原因是因为我们在 FastApi 接口定义的时候,uri 的格式不规范导致,uri 的结尾不需要/,如果你接口增加了/,我们使用浏览器访问 uri,浏览器会忽略结尾的/,FastApi 会在内部进行查重定向,将浏览器不带/的请求重定向到我们定义的带/的视图函数上。
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整