国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Python開發(fā)】FastAPI 09:middleware 中間件及跨域

這篇具有很好參考價(jià)值的文章主要介紹了【Python開發(fā)】FastAPI 09:middleware 中間件及跨域。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

FastAPI?提供了一些中間件來增強(qiáng)它的功能,類似于 Spring 的切面編程,中間件可以在請(qǐng)求處理前或處理后執(zhí)行一些操作,例如記錄日志、添加請(qǐng)求頭、鑒權(quán)等,跨域也是 FastAPI?中間件的一部分。

目錄

1 中間件

1.1?創(chuàng)建中間件

1.2 使用中間件?

2 跨域

2.1 跨域詳解

2.2 使用 CORSMiddleware 實(shí)現(xiàn)跨域


???源碼地址:

FastAPI_Study_Yinyu: FastAPI學(xué)習(xí)路徑,CSDN專欄:http://t.csdn.cn/JRtrk

1 中間件

你可以通過向 FastAPI 應(yīng)用添加中間件來實(shí)現(xiàn)類似切面編程的的效果。

簡(jiǎn)單來說,中間件也就是一個(gè)函數(shù),它可以在每個(gè)請(qǐng)求處理之前請(qǐng)求處理之后工作:

  • 他接收來自客戶端的每一個(gè)請(qǐng)求
  • 可對(duì)每個(gè)請(qǐng)求執(zhí)行任何需要的代碼
  • 可將請(qǐng)求傳遞給后臺(tái)的其他部分 (通過某種路徑操作)
  • 可獲取應(yīng)用程序生產(chǎn)的響應(yīng) (通過某種路徑操作)
  • 可針對(duì)某響應(yīng)做些什么或者執(zhí)行任何需要的代碼
  • 然后它返回這個(gè)響應(yīng)

1.1?創(chuàng)建中間件

首先我們使用裝飾器 @app.middleware("http") 來創(chuàng)建一個(gè)簡(jiǎn)單的中間件:

中間件參數(shù)接收如下參數(shù):

  • request:具體請(qǐng)求
  • call_next:函數(shù),它將接收 request 作為參數(shù)
    • 這個(gè)函數(shù)將 request 傳遞給相應(yīng)的路徑操作
    • 然后它將返回由相應(yīng)的路徑操作生成的 response
  • 然后你可以在返回 response 前,進(jìn)一步修改它
import time
from fastapi import FastAPI, Request

app = FastAPI()

@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    #請(qǐng)求處理前
    response = await call_next(request)
    #請(qǐng)求處理后
    return response

你可以在請(qǐng)求處理前請(qǐng)求處理后添加相應(yīng)的邏輯代碼~

1.2 使用中間件?

接下來我們使用上述的模板,使用中間件來完成一個(gè)需求(添加自定義請(qǐng)求頭 X-Process-Time ,包含以秒為單位的接收請(qǐng)求和生成響應(yīng)的時(shí)間)

import time
from fastapi import FastAPI, Request

app = FastAPI()

#中間件,相當(dāng)于切面編程
@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
    start_time = time.time()
    time.sleep(1)
    response = await call_next(request)
    process_time = time.time() - start_time
    response.headers["X-Process-Time-Yinyu"] = str(process_time)
    return response

#請(qǐng)求示例
@app.get("/test/")
async def read_item():
    return "OK"

if __name__ == '__main__':
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8000)

然后我們啟動(dòng)這個(gè)應(yīng)用然后進(jìn)行請(qǐng)求 ??,這說明中間件起到作用了。

【Python開發(fā)】FastAPI 09:middleware 中間件及跨域

?但是如果你想讓瀏覽器中的客戶端看到你的自定義請(qǐng)求頭,你需要把它們加到 CORS 配置 (CORS (Cross-Origin Resource Sharing)) 的 expose_headers 參數(shù)中。

2 跨域

假如是前后端分離的項(xiàng)目(比如前端 Vue,后端 Fastapi),那跨域就繞不過去了。

2.1 跨域詳解

首先跨域是指瀏覽器中運(yùn)行的前端擁有與后端通信的 JavaScript 代碼,而后端處于與前端不同的「源」的情況。

???

源是指協(xié)議(http,https)、域(myapp.com,localhost,localhost.tiangolo.com)以及端口(80、443、8080)的組合。

這些都是不同的源:

  • http://localhost
  • https://localhost
  • http://localhost:8080

即使它們都在 localhost 中,但是它們使用不同的協(xié)議或者端口,所以它們都是不同的「源」。

???跨域必要性

假設(shè)你的瀏覽器中有一個(gè)前端運(yùn)行在 http://localhost:8080,并且它的 JavaScript 正在嘗試與運(yùn)行在 http://localhost 的后端通信(如果我們沒有指定端口,瀏覽器會(huì)采用默認(rèn)的端口 80)。

然后,瀏覽器會(huì)向后端發(fā)送一個(gè) HTTP OPTIONS 請(qǐng)求,如果后端發(fā)送適當(dāng)?shù)?headers 來授權(quán)來自這個(gè)不同源(http://localhost:8080)的通信,瀏覽器將允許前端的 JavaScript 向后端發(fā)送請(qǐng)求。

因此后端需要有一個(gè)「允許的源」列表。 在這種情況下,包含 http://localhost:8080,前端才能正常工作。

也可以使用 "*"?聲明這個(gè)列表,表示全部都是允許的,但也不會(huì)影響授權(quán)認(rèn)證方面的處理。

2.2 使用 CORSMiddleware 實(shí)現(xiàn)跨域

主要步驟如下:

  1. 導(dǎo)入 CORSMiddleware。
  2. 創(chuàng)建一個(gè)允許的源列表(由字符串組成)。
  3. 將其作為「中間件」添加到你的 FastAPI 應(yīng)用中。

還可以做如下指定:

  • 憑證(授權(quán) headers,Cookies 等)。
  • 特定的 HTTP 方法(POST,PUT)或者使用通配符 "*" 允許所有方法。
  • 特定的 HTTP headers 或者使用通配符 "*" 允許所有 headers。
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

app = FastAPI()

origins = [
    "http://localhost.tiangolo.com",
    "https://localhost.tiangolo.com",
    "http://localhost",
    "http://localhost:8080",
]

app.add_middleware(
    CORSMiddleware,
    allow_origins=origins,
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/")
async def main():
    return {"message": "Hello World"}

默認(rèn)情況下,CORSMiddleware 默認(rèn)實(shí)現(xiàn)的參數(shù)較為保守,因此需要顯式地啟用特定的源、方法或者 headers,以便瀏覽器能夠在跨域上下文中使用它們。

支持以下參數(shù):文章來源地址http://www.zghlxwxcb.cn/news/detail-487526.html

  • allow_origins :允許跨域請(qǐng)求的源列表。例如 ['https://example.org', 'https://www.example.org'],你可以使用 ['*'] 允許任何源。
  • allow_origin_regex :一個(gè)正則表達(dá)式字符串,匹配的源允許跨域請(qǐng)求。例如 'https://.*\.example\.org'。
  • allow_methods :允許跨域請(qǐng)求的 HTTP 方法列表,默認(rèn)為 ['GET'],你可以使用 ['*'] 來允許所有標(biāo)準(zhǔn)方法。
  • allow_headers:允許跨域請(qǐng)求的 HTTP 請(qǐng)求頭列表。默認(rèn)為 [](空)。你可以使用 ['*'] 允許所有的請(qǐng)求頭,Accept、Accept-Language、Content-Language 以及 Content-Type 請(qǐng)求頭總是允許 CORS 請(qǐng)求。
  • allow_credentials:指示跨域請(qǐng)求支持 cookies,默認(rèn)是 False。另外,允許憑證時(shí) allow_origins 不能設(shè)定為 ['*'],必須指定源。
  • expose_headers:指示可以被瀏覽器訪問的響應(yīng)頭。默認(rèn)為 []。
  • max_age:設(shè)定瀏覽器緩存 CORS 響應(yīng)的最長(zhǎng)時(shí)間,單位是秒。默認(rèn)為 600。

到了這里,關(guān)于【Python開發(fā)】FastAPI 09:middleware 中間件及跨域的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【NetCore】09-中間件

    【NetCore】09-中間件

    1.1 中間件工作原理 1.2 中間件核心對(duì)象 IApplicationBuilder RequestDelegate IApplicationBuilder可以通過委托方式注冊(cè)中間件,委托的入?yún)⒁彩俏校@就可以將這些委托注冊(cè)成一個(gè)鏈,如上圖所示;最終會(huì)調(diào)用Builder方法返回一個(gè)委托,這個(gè)委托就是把所有的中間件串起來后合并成的一個(gè)

    2024年02月12日
    瀏覽(22)
  • 一個(gè)月學(xué)通Python(二十二):中間件應(yīng)用及前后端分離開發(fā)入門(Web開發(fā))

    結(jié)合自身經(jīng)驗(yàn)和內(nèi)部資料總結(jié)的Python教程,每天3-5章,最短1個(gè)月就能全方位的完成Python的學(xué)習(xí)并進(jìn)行實(shí)戰(zhàn)開發(fā),學(xué)完了定能成為大佬!加油吧!卷起來! 全部文章請(qǐng)?jiān)L問專欄:《Python全棧教程(0基礎(chǔ))》 之前我們已經(jīng)實(shí)現(xiàn)了用戶必須登錄才能投票的限制,但是一個(gè)新的問題

    2024年02月16日
    瀏覽(21)
  • Linux中間件開發(fā)

    Linux中間件開發(fā)通常是指開發(fā)運(yùn)行在Linux操作系統(tǒng)上的中間件軟件,這些軟件通常用于連接不同的應(yīng)用程序或平臺(tái),提供服務(wù)的支持和協(xié)調(diào)。常見的Linux中間件包括Web服務(wù)器、應(yīng)用服務(wù)器、消息隊(duì)列、數(shù)據(jù)庫中間件等。 中間件開發(fā)的主要任務(wù)是實(shí)現(xiàn)中間件的核心功能,例如We

    2024年02月12日
    瀏覽(24)
  • 【開發(fā)】中間件——ElasticSearch

    【開發(fā)】中間件——ElasticSearch

    ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口 ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口 ElasticSearch是用JAVA開發(fā)的。達(dá)到實(shí)時(shí)搜索,穩(wěn)定可靠,快速,

    2024年02月17日
    瀏覽(21)
  • 開發(fā)實(shí)踐6_緩存^中間件

    開發(fā)實(shí)踐6_緩存^中間件

    以下學(xué)習(xí) 朔寧夫 開發(fā)工程師 課程。 緩存可提高程序響應(yīng)速度。數(shù)據(jù)庫緩存(可過期)/ Redis緩存(Key:Value)/ Memcacheed緩存/ 程序?qū)泳彺妗?一 緩存 1. 數(shù)據(jù)庫緩存 創(chuàng)建緩存數(shù)據(jù)表 // python manage.py createcachetable cache_table setting // 創(chuàng)建新的演示 app // ?python manage.py startapp cache_app setting注冊(cè)

    2024年01月19日
    瀏覽(25)
  • 使用開源中間件:云計(jì)算環(huán)境中的中間件采用開源框架,可以減少開發(fā)和部署時(shí)間,提高開發(fā)效率和可靠性。

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 云計(jì)算是一個(gè)新的分布式計(jì)算模型,具有獨(dú)特的特征。它把資源的虛擬化、彈性伸縮和按需付費(fèi)等能力集成到了一起。這種新型的分布式計(jì)算模式,使得軟件工程師們?cè)诰帉憫?yīng)用程序時(shí)無須擔(dān)心服務(wù)器性能,而只需要關(guān)注應(yīng)用本身。同時(shí),云平

    2024年02月04日
    瀏覽(80)
  • Java開發(fā)框架和中間件面試題(8)

    Java開發(fā)框架和中間件面試題(8)

    目錄 82.Mybatis一級(jí)緩存,二級(jí)緩存? 83.Mybatis如何防止SQL注入? 84.mybatis中resultType和resultMap有什么區(qū)別? 85.如何在SpringBoot中禁用Actuator斷點(diǎn)安全性? 86.什么是SpringBoot?SpringBoot有哪些優(yōu)點(diǎn)? 87.SpringBoot中的監(jiān)視器是什么? 88.什么是yaml文件? 89.如何使用SpringBoot實(shí)現(xiàn)異常處理?

    2024年02月03日
    瀏覽(15)
  • 【云開發(fā)筆記NO.24】中間件和中臺(tái)

    在云開發(fā)領(lǐng)域,中間件是一個(gè)至關(guān)重要的概念,它扮演著連接不同技術(shù)組件和應(yīng)用程序的橋梁角色。中間件,顧名思義,是處于兩個(gè)應(yīng)用程序或系統(tǒng)之間的軟件層,其主要負(fù)責(zé)屏蔽底層操作系統(tǒng)的復(fù)雜性,為上層應(yīng)用程序提供一個(gè)統(tǒng)一、簡(jiǎn)化的接口。這種軟件的存在大大減輕

    2024年04月11日
    瀏覽(21)
  • 開源國內(nèi)鏡像站 操作系統(tǒng)、中間件、開發(fā)環(huán)境

    ? 1.搜狐:Index of / 2.網(wǎng)易:歡迎訪問網(wǎng)易開源鏡像站 3.阿里云:阿里巴巴開源鏡像站-OPSX鏡像站-阿里云開發(fā)者社區(qū) 4.騰訊:http://android-mirror.bugly.qq.com:8080/(僅針對(duì)APP開發(fā)的軟件,限流,不推薦) 1.上海交通大學(xué):http://ftp.sjtu.edu.cn/html/resources.xml(部分移動(dòng)運(yùn)營商出口狀況不佳

    2023年04月09日
    瀏覽(24)
  • GoReplay中間件python版本使用

    目錄 GoReplay的middlware原理 python版本環(huán)境搭建 python環(huán)境安裝 gor庫環(huán)境安裝 python代碼編寫 goreplay中間件使用 中間件是一個(gè)程序,它在 STDIN 上接受請(qǐng)求和響應(yīng)負(fù)載,并在 STDOUT 上發(fā)出修改后的請(qǐng)求。您可以實(shí)現(xiàn)任何自定義邏輯,例如剝離私有數(shù)據(jù)、高級(jí)重寫、支持 oAuth 等。 中間

    2024年02月21日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包