2.6 KiB
Response Header'ları
Bir Response parametresi kullanın
Path operation function içinde (cookie'lerde yapabildiğiniz gibi) tipi Response olan bir parametre tanımlayabilirsiniz.
Sonra da bu geçici response nesnesi üzerinde header'ları ayarlayabilirsiniz.
{* ../../docs_src/response_headers/tutorial002_py39.py hl[1, 7:8] *}
Ardından normalde yaptığınız gibi ihtiyacınız olan herhangi bir nesneyi döndürebilirsiniz (bir dict, bir veritabanı modeli vb.).
Eğer bir response_model tanımladıysanız, döndürdüğünüz nesneyi filtrelemek ve dönüştürmek için yine kullanılacaktır.
FastAPI, header'ları (aynı şekilde cookie'leri ve status code'u) bu geçici response'dan alır ve döndürdüğünüz değeri (varsa bir response_model ile filtrelenmiş hâliyle) içeren nihai response'a ekler.
Response parametresini dependency'lerde de tanımlayıp, onların içinde header (ve cookie) ayarlayabilirsiniz.
Doğrudan bir Response döndürün
Doğrudan bir Response döndürdüğünüzde de header ekleyebilirsiniz.
Bir Response'u Doğrudan Döndürün{.internal-link target=_blank} bölümünde anlatıldığı gibi bir response oluşturun ve header'ları ek bir parametre olarak geçin:
{* ../../docs_src/response_headers/tutorial001_py39.py hl[10:12] *}
/// note | Teknik Detaylar
from starlette.responses import Response veya from starlette.responses import JSONResponse da kullanabilirsiniz.
FastAPI, geliştirici olarak size kolaylık olsun diye starlette.responses içeriğini fastapi.responses olarak da sunar. Ancak mevcut response'ların çoğu doğrudan Starlette'ten gelir.
Ayrıca Response header ve cookie ayarlamak için sık kullanıldığından, FastAPI bunu fastapi.Response altında da sağlar.
///
Özel Header'lar
Özel/proprietary header'ların X- prefix'i kullanılarak eklenebileceğini unutmayın.
Ancak tarayıcıdaki bir client'ın görebilmesini istediğiniz özel header'larınız varsa, bunları CORS ayarlarınıza eklemeniz gerekir (CORS (Cross-Origin Resource Sharing){.internal-link target=_blank} bölümünde daha fazla bilgi), bunun için Starlette'in CORS dokümanında açıklanan expose_headers parametresini kullanın.