Лучший способ перечислить 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'},...].

Вернуться на верх