快速开发一个前后端分离的系统(fastapiproject+vue)

前端根据后端暴露出的接口发送请求拿到数据,js对数据进一步处理,渲染展示,一气呵成。

前端

request.js

使用axios请求

import axios from "axios"

const service = axios.create({
    baseURL: "/api",
    timeout: 50000
})

// before any request, use this config
service.interceptors.request.use(
    config => {
        //for future use
        return config;
    },
    error => {
        // 全局请求失败处理,当请求发送失败时,处理error
        console.log(error)
    }
)
export default service

data.js

# "@/utils/request" 和文件路径有关,不可照搬
import request from "@/utils/request"

export function verify(token, account) {
    return request({
        url: '/verify/',
        method: 'post',
        data: {
            'token': token,
            'account': account
        }
    })
}

vue.config.js 文件

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        port: '3000',
        target: 'http://localhost:8000',
        changeOrigin: true,
        ws: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    }
  }
}

页面js

以vue界面为例(其实并无太多差异)

<script>
    import {getPersonInfo, verify} from "@/api/data";
    export default {
          data() {
    return {
      user_id: '',
      powerList: [],
      right: 1,
      index: '1',
      activeIndex: '1',
    }
  },
        beforeCreate() {
    var token = sessionStorage.getItem("token");
    var account = sessionStorage.getItem("account");
    verify(token, account).then(res => {
      if (res.code === 200) {
        if (res.root === 2) {
          var account = sessionStorage.getItem("account");
          this.user_id = account;
        } else {
          var account = sessionStorage.getItem("Diraccount");
          this.user_id = account;
        }
        getPersonInfo(this.user_id).then(res => {
          var that = this;
          if (res.code === 200) {
            that.powerList = res.data;
            this.initCharts();
          }
        });
      } else {
        this.$message("登录过期");
        this.$router.replace('/login');
      }
    })
  }
    }
</script>

后端

FastApiProject

缺点在于无orm(Django有),应当结合具体情况进行使用。

main.py (启动,绑定请求地址和逻辑层函数)

from fastapi import FastAPI
from views import proRec
from models import RecItem

app = FastAPI()
security = HTTPBearer()
auth_handler = AuthHandler()


# oj 前十用户信息
@app.get("/topTenInfo/")
async def get_top_ten_info():
    return top_ten_info()


# 用户推荐题目
@app.post("/rec/")
async def get_rec_info(
        item: RecItem  
):
    return proRec(user_id=item.user_id)

即访问./rec/ 如果是post请求则与get_rec_info(自定义名称)函数绑定返回对应逻辑层(views.py)的函数。

item:RecItem 表示post请求中携带参数与RecItem(models.py)中定义一致

views层(逻辑层)— views.py

def proRec(user_id):
    根据user_id进行操作
    if len(res_list) != 0:
        return {'data': res_list,
                'code': 200,
                'status': '数据获取成功!'}
    else:
        return {
            'data': '',
            'code': 201,
            'status': '数据查询出错!'
        }

model层(实体层)---- models.py

from pydantic import BaseModel

class RecItem(BaseModel):
    user_id: str
    
class ACQueryItem(BaseModel):
    user_id: str
    start_date: str
    end_date: str
    page: int
    num: int

确保与携带参数保持一致

### 网络字节序与大模式的关系 在网络通信中,数据通常以字节流的形式进行传输。为了确保不同设备之间能够正确解析接收到的数据,TCP/IP 协议规定了一种统一的字节序标准——即 **网络字节序**。网络字节序实际上是一种特定的大Big-Endian)模式[^3]。 #### 大模式的特点 在大模式下,多字节数值中的最高有效字节(Most Significant Byte, MSB)被放置在较低的内存地址或优先传输的位置。这意味着,在网络传输过程中,数值的第一个字节总是其高位字节[^2]。 #### 小模式对比 相比之下,小Little-Endian)模式则将最低有效字节(Least Significant Byte, LSB)放在较低的内存地址或优先传输位置。这种模式常见于某些本地计算机架构中,但在网络传输中并不适用。 #### 网络字节序的具体实现 根据 TCP/IP 协议的规定,网络字节序遵循大模式。因此,在实际应用中,发送方会将数据转换为大格式后再进行传输;而接收方在解析这些数据之前,则可能需要将其从大格式转换回适合本机使用的字节序(可能是小)。常见的函数如 `htonl()` 和 `ntohl()` 可用于完成主机字节序网络字节序之间的相互转换[^1]。 以下是两个简单的 C 语言代码示例: ```c // 主机字节序网络字节序 (假设为主机为 Little-Endian) uint32_t host_to_network(uint32_t value) { return htonl(value); } // 网络字节序转主机字节序 (假设为主机为 Little-Endian) uint32_t network_to_host(uint32_t value) { return ntohl(value); } ``` 通过上述方法可以保证无论两机器使用何种内部字节序,都能正常交换并理解彼此的数据。 综上所述,网络字节序确实采用了大模式来定义数据在网络上的排列次序。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值