Атрибут client
Атрибут client применяется к объекту
Request и возвращает объект
Address или None.
Этот объект содержит атрибуты host и port,
которые хранят IP-адрес и порт клиента,
отправившего запрос.
Атрибут client особенно полезен для логирования,
анализа трафика и ограничения доступа по IP-адресу.
Синтаксис
request.client
Пример
Давайте получим IP-адрес и порт клиента
из атрибута client:
from fastapi import FastAPI, Request
app = FastAPI()
@app.get('/')
def index(request: Request):
client = request.client
return {
'host': client.host,
'port': client.port
}
Результат выполнения кода:
{"host": "127.0.0.1", "port": 54321}
Пример
Давайте проверим, что атрибут client
может быть равен None, если
информация о клиенте недоступна:
from fastapi import FastAPI, Request
app = FastAPI()
@app.get('/check')
def check(request: Request):
client = request.client
if client is None:
return {'status': 'unknown'}
return {'status': 'known', 'host': client.host}
Результат выполнения кода:
{"status": "known", "host": "127.0.0.1"}
Пример
Давайте ограничим доступ к маршруту только для локального клиента:
from fastapi import FastAPI, Request, HTTPException
app = FastAPI()
@app.get('/admin')
def admin(request: Request):
client = request.client
if client is None or client.host != '127.0.0.1':
raise HTTPException(
status_code=403,
detail='access denied'
)
return {'message': 'welcome'}
Результат выполнения кода для локального клиента:
{"message": "welcome"}