Лучший способ перечислить URL-адреса изображений в json
Я знаю, что это скорее вопрос по python, чем по fastAPI. Я хочу знать, какой метод является лучшим способом перечислить мои урлы изображений в json и как реализовать это в моем json-ответе.
Вот мои текущие json-данные:
"imgs_url": [
"http://10.0.2.2:8000/static/product_images/f3e6421737643e583a1d.jpg, http://10.0.2.2:8000/static/product_images/b53bf8aeb27d27a739cc.jpg, http://10.0.2.2:8000/static/product_images/75a80e7c04ebaed3e425.jpg"
]
Вот функция python, которую я использую для получения первого списка:
async def create(
name: str = Form(...),
price: float = Form(...),
description: str = Form(...),
files: List[UploadFile] = File(...),
db: Session = Depends(get_db),
current_user: Vendor = Depends(get_current_active_user)
):
fileList = []
for file in files:
try:
FILEPATH = "./static/product_images/"
pimage_name = FILEPATH + imghex(file.filename)
contents = await file.read()
with open(pimage_name, 'wb') as f:
f.write(contents)
except Exception:
return {"message": "There was an error uploading the file(s)"}
finally:
await file.close()
# fileList.append("localhost:8000" + pimage_name[1:])
fileList.append("http://10.0.2.2:8000" + pimage_name[1:])
file_urls = ", ".join(fileList)
new_item = Product(
name=name,
price=price,
description=description,
imgs_url=[file_urls],
owner_id=current_user.id
)
db.add(new_item)
db.commit()
db.refresh(new_item)
return new_item
Как изменить текущий список на такой:
"imgs_url": [
"http://10.0.2.2:8000/static/product_images/f3e6421737643e583a1d.jpg",
"http://10.0.2.2:8000/static/product_images/b53bf8aeb27d27a739cc.jpg",
"http://10.0.2.2:8000/static/product_images/75a80e7c04ebaed3e425.jpg"
],
также вот еще один вариант листинга изображений:
"imgs_url" : [
{"url":"https://s3-us-west-2.amazonaws.com/appsdeveloperblog.com/images/cats/cat-1.jpg"},
{"url":"https://s3-us-west-2.amazonaws.com/appsdeveloperblog.com/images/cats/cat-2.jpg"},
{"url":"https://s3-us-west-2.amazonaws.com/appsdeveloperblog.com/images/cats/cat-3.jpg"},
{"url":"https://s3-us-west-2.amazonaws.com/appsdeveloperblog.com/images/cats/cat-4.jpg"},
{"url":"https://s3-us-west-2.amazonaws.com/appsdeveloperblog.com/images/cats/cat-5.jpg"},
{"url":"https://s3-us-west-2.amazonaws.com/appsdeveloperblog.com/images/cats/cat-6.jpg"}
]
У меня три вопроса: 1) Пожалуйста, как мне перейти на второй или третий метод? 2) Какой лучший метод для лизинга изображений в url? 3) Существует ли общепринятый стандарт для лизинга урлов изображений в json?
Удалите эту строку, которая явно присоединяет элемент списка:
file_urls = ", ".join(fileList)
Измените это назначение new_item
на это
new_item = Product(
name=name,
price=price,
description=description,
imgs_url= fileList, #change here
owner_id=current_user.id
)
Если вам нужен формат URL, как ожидается в #3 в вопросе, используйте словарное понимание
fileList = [{"URL": elem } for elem in fileList]
#this will produce [{'URL': 'http://10.0.2.2:8000/static/product_images/f3e6421737643e583a1d.jpg'},...]
new_item = Product(
name=name,
price=price,
description=description,
imgs_url= fileList, #change here
owner_id=current_user.id
)
Для вопросов 2 и 3 это в основном предпочтения потребителей. img_urls=[<img_uurl_1>, ...]
, который можно итерировать и использовать только для URL изображений. Если вам нужно предоставить другие метаданные наряду с URL изображения, то подходит последний подход, предусматривающий наличие [{'URL': 'http://10.0.2.2:8000/static/product_images/f3e6421737643e583a1d.jpg'},...]
.