浅谈@router.post和@router.get的区别

目录

一、请求类型

二、用途

三、参数传递方式

四、安全性考虑

五、总结


且借助 app\api\mb\asset.py 中的两段代码浅谈@router.post和@router.get的区别。

代码一:@router.get-从服务器检索特定的资产项:

# Add endpoint for getting a asset by pid
@router.get("/pid/{pid}", summary="查询"+name, description="根据PID查询"+name, responses=func.Responses("查询"+name,RES))
async def get_asset_by_pid(id: int):
    res = await MbAsset.filter(pid=id)
    return {
        "code": 0,
        "msg": '',
        "result":res
    }

代码二:@router.post-向服务器提交一个新的资产项:

# @router.post("/", response_model=AssetItem)
@router.post("/", summary="新增"+name, description="添加新"+name, responses=func.Responses("新增"+name,1))
async def add_asset(item: AssetItem):
    # print(item)
    res = await MbAsset.create(name=item.name,pid=item.pid,iconPath=item.iconPath,amount=item.amount,sort=item.sort)
    # res = await MbAsset.create(name='现金账户1',iconPath='icon-zhanghuyue1')
    # print(dict(res))
    return {
        "code": 0,
        "msg": '',
        "result":res
    }

       在上述代码示例中,@router.post 和 @router.get 的使用展示了它们在 FastAPI 框架中处理 HTTP 请求时的基本区别。这些区别主要体现在请求类型、用途、参数传递方式以及它们各自适用的场景上。下面是对这些区别的详细分析:

一、请求类型

  • @router.post:这个装饰器用于定义处理 HTTP POST 请求的路由。POST 请求通常用于向服务器提交数据,这些数据包含在请求体中。
  • @router.get:这个装饰器用于定义处理 HTTP GET 请求的路由。GET 请求通常用于从服务器请求数据,这些数据通常通过 URL 的查询字符串(对于本例中的 /pid/{pid} 路由,则是通过 URL 路径变量 {pid})传递,但 GET 请求也可以不带任何参数。

二、用途

  • POST 请求:在 add_asset 函数中,POST 请求用于向服务器提交一个新的资产项(AssetItem)。这是 POST 请求的典型用途之一,即创建或更新资源。
  • GET 请求:在 get_asset_by_pid 函数中,GET 请求用于根据提供的 PID(路径变量)从服务器检索特定的资产项。GET 请求非常适合用于检索资源。

三、参数传递方式

  • POST 请求:在 add_asset 函数中,参数(即新的资产项)作为请求体的一部分传递。FastAPI 使用 Pydantic 模型(AssetItem)来自动解析和验证这些参数。
  • GET 请求:在 get_asset_by_pid 函数中,参数(即 PID)通过 URL 路径变量 {pid} 传递。虽然在这个特定的例子中,参数名在函数签名中被错误地命名为 id(这可能会导致混淆),但重要的是理解它是通过 URL 的一部分来传递的。

四、安全性考虑

  • POST 请求:由于数据包含在请求体中,因此它们通常比 GET 请求更安全,因为敏感信息不会暴露在 URL 中。然而,这并不意味着 POST 请求本身就是安全的;你仍然需要实现适当的安全措施来保护数据,比如验证和授权。
  • GET 请求:在 get_asset_by_pid 函数中,参数(即 PID)通过 URL 路径变量 {pid} 传递。这种传递方式使得参数对于用户是可见的,并且受限于 URL 的长度和格式限制。然而,对于简单的查询和检索操作,GET 请求是非常方便和高效的。

五、总结

@router.post 和 @router.get 的主要区别在于它们分别用于处理 HTTP 的 POST 请求(提交数据到服务器)和 GET 请求(从服务器请求数据)。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue中,通常使用vue-router来实现路由。Vue Router提供了一种机制来管理浏览器历史记录,并在不同的URL之间进行切换,包括GET请求和POST请求。 GET请求可以通过路由的路径来处理,例如: ```javascript const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: About } ] const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) ``` 这里定义了两个路由,一个是根路由'/'对应的组件是Home,另一个是'/about'对应的组件是About。当用户访问不同URL时,Vue Router会自动切换到相应的组件。 至于POST请求,Vue Router本身并不能直接处理POST请求,因为POST请求通常用于向服务器提交数据,而不是进行页面导航。在处理POST请求时,通常需要与后端服务器进行交互,可以使用Vue的axios库或者fetch API来发送POST请求。 以下是使用axios发送POST请求的示例代码: ```javascript import axios from 'axios' axios.post('/api/data', { key: value }) .then(response => { // 处理响应数据 }) .catch(error => { // 处理错误 }) ``` 在上述代码中,我们使用axios.post()方法发送POST请求到指定的URL '/api/data',并传递一个包含数据的对象作为请求体。然后可以使用.then()方法处理服务器返回的响应数据,或使用.catch()方法处理错误情况。 希望以上信息能够帮助到您,如果有其他问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值