真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何用python實(shí)現(xiàn)Request中"攜帶"用戶信息

本篇內(nèi)容主要講解“如何用python實(shí)現(xiàn)Request中"攜帶"用戶信息”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何用python實(shí)現(xiàn)Request中"攜帶"用戶信息”吧!

目前創(chuàng)新互聯(lián)已為1000多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、秀洲網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。

讀完需要4分鐘

速讀僅需 2 分鐘

/python 30 秒完美實(shí)現(xiàn) Request 中"攜帶"用戶信息,提升 10 倍性能方案 /

之前在 大型 fastapi 項(xiàng)目實(shí)戰(zhàn) 靠 python 中間件解決方案漲薪了 一文中 詳細(xì)的介紹了通過中間件的方式去處理請(qǐng)求中的一些 case,沒有看過的同學(xué)建議看看。

1

背景介紹

今天我們?cè)倏匆幌铝硗庖粋€(gè)場(chǎng)景:當(dāng)請(qǐng)求過來的時(shí)候,要對(duì)請(qǐng)求統(tǒng)一進(jìn)行權(quán)限驗(yàn)證。如果驗(yàn)證通過,那么就把驗(yàn)證過的用戶信息附加到 Request 中,這樣在具體的路徑操作里,就可以直接使用用戶信息,而不用再次查詢當(dāng)前用戶。同時(shí)還有一個(gè)好處是減少了重復(fù)代碼量,將以前的在路徑操作部分的權(quán)限驗(yàn)證統(tǒng)一提取出來。今天我們通過把數(shù)據(jù)附加到 request.state 中,來解決這個(gè)問題。

2

案例實(shí)現(xiàn)

# -*- coding: utf-8 -*-import time@app.middleware("http")async def process_authorization(request: Request, call_next):    """        在這個(gè)函數(shù)里統(tǒng)一對(duì)訪問做權(quán)限 token 校驗(yàn)。        1.如果是用戶注冊(cè)、登陸,那么不做 token 校驗(yàn),由路徑操作函數(shù)具體驗(yàn)證        2.如果是其他操作,則需要從 header 或者 cookie 中取出 token 信息,解析出內(nèi)容然后對(duì)用戶身份進(jìn)行驗(yàn)證,            2.1.如果用戶不存在則直接返回            2.2.如果用戶存在則將用戶信息附加到 request 中,這樣在后續(xù)的路徑操作函數(shù)中可以直接使用。    """    start_time = time.time()    if request.url.path == '/login' or request.url.path == '/register':        # 是登陸或者注冊(cè)的路由則直接通過        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)    # 進(jìn)行接下來的操作處理    response = await call_next(request)    process_time = time.time() - start_time    response.headers["X-Process-Time"] = str(process_time)    return response

幾點(diǎn)說明:
1.本案例中的方式其實(shí)質(zhì)還是通過中間件的方式先攔截掉請(qǐng)求再附加信息進(jìn)行處理,需要看清本質(zhì)


2.我們會(huì)想一下是否在自己做過的系統(tǒng)中先是把請(qǐng)求放進(jìn)來 然后在獲取具體與人屬性相關(guān)的信息的時(shí)候,是否都是先進(jìn)行查詢?nèi)藢傩缘男畔ⅲ缓蠡诖嗽僮鼋酉聛淼奶幚?,那能否借鑒本案例中的方法進(jìn)行處理呢?這個(gè)問題留給大家進(jìn)行思考。至于標(biāo)題中說到的提升 10 倍性能,這個(gè)對(duì)比基準(zhǔn)不同測(cè)試得到的效果也有差異,請(qǐng)理性看待


3.若對(duì)中間件感興趣的同學(xué)建議結(jié)合之前的一篇參照著來學(xué)習(xí)效果更佳,面試過程中發(fā)現(xiàn)很多同學(xué)一問都用過中間件,但自己沒怎么自定義過中間件,這是不是值得思考呢?

到此,相信大家對(duì)“如何用python實(shí)現(xiàn)Request中"攜帶"用戶信息”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站題目:如何用python實(shí)現(xiàn)Request中"攜帶"用戶信息
當(dāng)前鏈接:http://weahome.cn/article/gcppph.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部