30 秒完美实现 Request 中"携带"用户信息,提升 10 倍性能方案

30 秒完美实现 Request 中"携带"用户信息,提升 10 倍性能方案,第1张

概述点击python编程从入门到实践,置顶公众号重磅python入门资料,第一时间送达            读完需要4分钟速读仅需2分钟/ python30秒完美实现Request中"携带"用户信息提升10倍性能方案 /之前在大型fastapi项目实战靠python中间件解决方案

点击Python编程从入门到实践,置顶 公众号重磅 python入门资料,第一时间送达

 

 

                   

读完需要4分钟

速读仅需 2 分钟

/ python 30 秒完美实现 Request 中"携带"用户信息,提升 10 倍性能方案 /

之前在 大型 fastAPI 项目实战 靠 python 中间件解决方案涨薪了 一文中 详细的介绍了通过中间件的方式去处理请求中的一些 case,没有看过的同学建议看看。

1

背景介绍

今天我们再看一下另外一个场景:当请求过来的时候,要对请求统一进行权限验证。如果验证通过,那么就把验证过的用户信息附加到 Request 中,这样在具体的路径 *** 作里,就可以直接使用用户信息,而不用再次查询当前用户。同时还有一个好处是减少了重复代码量,将以前的在路径 *** 作部分的权限验证统一提取出来。今天我们通过把数据附加到 request.state 中,来解决这个问题。

2

案例实现

# -*- Coding: utf-8 -*-import time@app.mIDdleware("http")async def process_authorization(request: Request, call_next):    """        在这个函数里统一对访问做权限 token 校验。        1.如果是用户注册、登陆,那么不做 token 校验,由路径 *** 作函数具体验证        2.如果是其他 *** 作,则需要从 header 或者 cookie 中取出 token 信息,解析出内容然后对用户身份进行验证,            2.1.如果用户不存在则直接返回            2.2.如果用户存在则将用户信息附加到 request 中,这样在后续的路径 *** 作函数中可以直接使用。    """    start_time = time.time()    if request.url.path == '/login' or request.url.path == '/register':        # 是登陆或者注册的路由则直接通过        logger.info('not need jwt verify, please do next task')    else:        logger.info('need jwt verify.')        result = Auth.IDentifyAll(request)        if result['status'] and result['data']:            user = result['data']['user']            logger.info('jwt verify success. user: %s ' % user.username)            # state 中记录用户基本信息            request.state.user = user        else:            return JsONResponse(content=result)    # 进行接下来的 *** 作处理    response = await call_next(request)    process_time = time.time() - start_time    response.headers["X-Process-Time"] = str(process_time)    return response

几点说明:
1.本案例中的方式其实质还是通过中间件的方式先拦截掉请求再附加信息进行处理,需要看清本质


2.我们会想一下是否在自己做过的系统中先是把请求放进来 然后在获取具体与人属性相关的信息的时候,是否都是先进行查询人属性的信息,然后基于此再做接下来的处理,那能否借鉴本案例中的方法进行处理呢?这个问题留给大家进行思考。至于标题中说到的提升 10 倍性能,这个对比基准不同测试得到的效果也有差异,请理性看待


3.若对中间件感兴趣的同学建议结合之前的一篇参照着来学习效果更佳,面试过程中发现很多同学一问都用过中间件,但自己没怎么自定义过中间件,这是不是值得思考呢?

 

我坚信:思考问题的方法远大于具体解决问题的方案,让我们继续一路前行,下期再见!

 

原创不易,只愿能帮助那些需要这些内容的同行或刚入行的小伙伴,你的每次 点赞、分享 都是我继续创作下去的动力,我希望能在推广 python 技术的道路上尽我一份力量,欢迎在评论区向我提问,我都会一一解答,记得一键三连支持一下哦!

 

加入python学习交流微信群,请后台回复「入群」

 

 

往期推荐

python生产实战 python 闭包之庖丁解牛篇

大型fastAPI项目实战 靠 python 中间件解决方案涨薪了

大型fastAPI项目实战 高并发请求神器之aiohttp(下)

大型fastAPI项目实战 高并发请求神器之aiohttp(上) [建议收藏]

英雄联盟狗头出装大全(2021年11.2版本最新攻略)坦克世界弱点插件违规吗(违规行为惩罚机制)郑建鹏老婆言真个人资料(言真真实姓名叫什么) 总结

以上是内存溢出为你收集整理的30 秒完美实现 Request 中"携带"用户信息,提升 10 倍性能方案全部内容,希望文章能够帮你解决30 秒完美实现 Request 中"携带"用户信息,提升 10 倍性能方案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1186230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存