스택큐힙리스트

FastAPI를 사용하여 요청 데이터에 액세스하거나 인쇄할 수 없습니다. 본문

카테고리 없음

FastAPI를 사용하여 요청 데이터에 액세스하거나 인쇄할 수 없습니다.

스택큐힙리스트 2023. 11. 6. 07:51
반응형

간단한 FastAPI 엔드포인트가 있으며 여기에서 문자열 값을 받고 싶습니다. 이 경우 JSON 본문을 사용하여 시도해 보았지만 기본적으로 JSON이 아니어도 됩니다. 실제로는 요청을 서로 분리하기 위해 간단한 문자열만 필요합니다. 불행하게도 요청 매개변수에 GET 메서드로 액세스할 수 없습니다. 대신 POST 메서드를 시도해 보았지만 오류가 발생합니다:


요청:


url = http://127.0.0.1:5000/ping/
payload=json.dumps({key:test})
headers = {
Content-Type: application/json
}
response = requests.request(POST, url, headers=headers, json=payload)
print(response.text)

API:


@app.get(/ping/{key})
async def get_trigger(key: Request):
key = key.json()
test = json.loads(key)
print(test)
test2 = await key.json()
print(key)
print(test2)
return

post 또는 put으로 아무 것도 인쇄할 수 없습니다:

@app.post(/ping/{key})
async def get_trigger(key: Request):
...
or
@app.put(/ping/{key})
async def get_trigger(key: Request):

405 Method not allowed 오류가 발생합니다.


어떻게 이 문제를 해결할 수 있을까요?

답변 1

405 Method Not Allowed 상태 코드는 서버는 요청 메서드를 인식하지만 대상 리소스가 이 메서드를 지원하지 않음을 나타냅니다. 이 오류는 예를 들어 POST 요청을 GET 라우트에 보내려고 할 때 발생합니다 (첫 번째 예시에서 보여주었음). 그러나 이것은 코드의 유일한 문제가 아닙니다 (클라이언트 및 서버 측 모두). 아래에는 Path 매개변수를 사용하여 설명한대로 원하는 결과를 얻는 방법의 예시가 제공되어 있습니다. Query 매개변수뿐만 아니라 Request Body를 사용하여도 같은 결과를 얻을 수 있습니다. 각 경우에 매개변수/본문을 지정하는 방법에 대한 자세한 내용은 Python requests documentation을 참조하십시오. 또한 FastAPI tutorial을 온라인으로 신청하는 것을 강력히 권장합니다. 여기에서 원하는 대부분의 답변을 찾을 수 있습니다.

app.py


from fastapi import FastAPI
app = FastAPI()
@app.get(/ping/{ping_id})
async def get_trigger(ping_id: str):
return {ping_id: ping_id}

test.py


import requests
url = 'http://127.0.0.1:8000/ping/test1'
resp = requests.get(url=url)
print(resp.json())

app.py


from fastapi import FastAPI
app = FastAPI()
@app.get(/ping/{ping_id})
async def get_trigger(ping_id: str):
return {ping_id: ping_id}

test.py


import requests
url = 'http://127.0.0.1:8000/ping/test1'
resp = requests.get(url=url)
print(resp.json())

답변 2

FastAPI를 사용하여 요청 데이터에 액세스하거나 출력할 수 없습니다.
FastAPI는 웹 개발을 위해 사용되는 현대적이고 효율적인 Python 프레임워크입니다. 하지만 때로는 FastAPI를 사용하여 요청 데이터에 액세스하거나 출력하는 것이 어려울 수 있습니다. 이 문제는 개발자에게 몇 가지 원인과 해결책을 제시합니다.
첫째로, FastAPI에서는 요청 데이터에 대한 액세스를 위해 `request` 객체를 사용합니다. 이 객체를 사용하여 요청의 내용에 액세스 및 조작할 수 있습니다. 그러나 `request` 객체를 사용하기 전에 반드시 FastAPI의 `Depends` 함수 데코레이터를 사용하여 종속성을 주입해야 합니다. 종속성을 주입하면 FastAPI가 자동으로 요청 데이터를 받을 수 있습니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다:
```python
from fastapi import Depends, FastAPI, Request
app = FastAPI()
@app.post(/api)
def process_data(request: Request):
data = await request.json()
# 데이터에 대한 작업 수행
return {message: 데이터 처리 완료}
```
이렇게 하면 `request` 객체를 사용하여 요청 데이터에 액세스할 수 있습니다. `await request.json()`은 요청에서 JSON 데이터를 추출하여 `data` 변수에 할당합니다. 그런 다음 개발자는 필요한 작업을 수행한 후 응답을 반환할 수 있습니다.
둘째로, 요청 데이터를 인쇄하는 것도 어려울 수 있습니다. 개발자가 응답을 반환하기 전에 요청 데이터를 인쇄하려면 `print()` 함수를 사용할 수 있습니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다:
```python
from fastapi import FastAPI, Request
app = FastAPI()
@app.post(/api)
async def process_data(request: Request):
data = await request.json()
print(data) # 요청 데이터 인쇄
return {message: 데이터 처리 완료}
```
이렇게 하면 개발자는 `print()` 함수를 사용하여 요청 데이터를 콘솔에 인쇄할 수 있습니다. 이는 디버깅이나 정보 기록에 유용할 수 있습니다.
FastAPI에서 요청 데이터에 액세스하고 인쇄하는 것은 지속적인 개발 과정에서 필요한 작업입니다. 이를 위해 `request` 객체를 사용하고 종속성을 주입하는 것이 중요합니다. 기존의 포맷을 따르는 한국어 SEO-최적화된 글이었습니다. 다른 궁금한 사항이 있다면 언제든 질문해주세요!

반응형
Comments