Как мне использовать параметры запроса из POST в FastAPI?Python

Программы на Python
Ответить
Anonymous
 Как мне использовать параметры запроса из POST в FastAPI?

Сообщение Anonymous »

Я хочу написать маршрут в FastAPI для обработки запроса POST. У меня есть следующий пример URL:

Код: Выделить всё

https://URL.com/api/FlexfoneCall/outgoing?AccountId=1234&TimeStamp=2021-05-20+08%3a30%3a56&UniqueCallId=SIP%2f%2b4512345678-0000e4a81463430317&EmployeeLocalNumber=200&ANumber=12345678&BNumber=87654321&PhoneLocalNumber=123456
Однако я привык получать только тело запроса. Как мне «извлечь» данные параметра пути из приведенного выше примера?
РЕДАКТИРОВАТЬ:
Я пытаюсь написать службу, которая получает указанный выше URL-адрес от внешней службы. Я попробовал сделать следующее, потому что думал, что, поскольку это POST, мой маршрут должен выглядеть так:

Код: Выделить всё

@app.post('/callout', response_model=CallIn)
async def create_call_out(callout: CallOut, db: Session = Depends(get_db)):
db_write_call_out = write_call_out(db, callout)

return db_write_call_out
Со следующей моделью Пидантика:

Код: Выделить всё

class CallOut(BaseModel):
accountid: str = None
timestamp: str = None
uniquecallid: str = None
employeelocalnumber: str = None
anumber: str = None
bnumber: str = None
phonelocalnumber: str = None

class Config:
orm_mode = True
И функция CRUD:

Код: Выделить всё

def write_call_out(db: Session, callout: CallOut):
db_write_call_out = DBCallOut(**callout.dict())
db.add(db_write_call_out)
db.commit()
db.refresh(db_write_call_out)

return db_write_call_out
Модель SQLAlchemy ORM для записи параметров запроса в базу данных SQL:

Код: Выделить всё

class DBCallOut(Base):
__tablename__ = "call_out"

accountid = Column('AccountId', String(250))
uniquecallid = Column('UniqueCallId', String(250))
employeelocalnumber = Column('EmployeeLocalNumber', String(250))
anumber = Column('ANumber', String(250))
timestamp = Column('TimeStamp', String(250))
phonelocalnumber = Column('PhoneLocalNumber', String(250))
bnumber = Column('BNumber', String(250))
ID = Column(Integer,  primary_key=True,  index=True, autoincrement=True)
Но я продолжаю получать ошибку 422.
РЕДАКТИРОВАТЬ 2:
В итоге я изменил свой маршрут на следующий:

Код: Выделить всё

@app.get('/call')
async def outgoing(AccountId: str,
TimeStamp: str,
UniqueCallId: str,
EmployeeLocalNumber: str,
ANumber: str,
BNumber: str,
PhoneLocalNumber: str, db: Session = Depends(get_db)):
callout = {"AccountId": AccountId,
"TimeStamp": TimeStamp,
"UniqueCallId": UniqueCallId,
"EmployeeLocalNumber": EmployeeLocalNumber,
"ANumber": ANumber,
"BNumber": BNumber,
"PhoneLocalNumber": PhoneLocalNumber}
db_write_call_out = write_call_out(db, callout)

return db_write_call_out
Это работает, но несколько неуклюже.

Подробнее здесь: https://stackoverflow.com/questions/676 ... in-fastapi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»