В настоящее время я пытаюсь отправить запрос POST в мою службу покоя фляги, которая сгенерирует модель для сохранения в базе данных. Эта модель будет включать URL-адрес изображения, размещенного в облаке, а также другие данные, такие как дата и имя.
Моя проблема в том, что в Postman мне разрешено отправлять только form-data
или raw
, которые будут включать json. Я могу загрузить в облако и получить необходимый URL-адрес, однако я не могу получить json из запроса, поэтому я не могу полностью сгенерировать модель для сохранения.
image_json = request.get_json()
возвращается None
Мой вопрос в том, разрешено ли мне отправлять только одно или одно raw or form-data
Как я должен получить изображение и соответствующие данные, необходимые для сохранения модели?
from cloudinary.uploader import upload
from cloudinary.utils import cloudinary_url
from flask_restful import Resource
from flask import request
from models.image import ImageModel
from schemas.image import ImageSchema
image_schema = ImageSchema()
image_list_schema = ImageSchema(many=True)
class Image(Resource):
@classmethod
def post(cls):
image_to_upload = request.files["image"]
if image_to_upload:
upload_result = upload(image_to_upload)
url = cloudinary_url(upload_result['public_id'], format = "jpg", crop = "fill", width=100,height=100)[0]
full_size_url = cloudinary_url(upload_result['public_id'], format = "jpg", crop = "fill", width=200, height=100, radius=20, effect = "sepia")[0]
image_json = request.get_json() # this returns None
image_json["url"] = url
image_json["full_size_url"] = full_size_url
image = image_schema.load(image_json)
try:
image.save_to_db()
except:
return {"message": "error uploading file"}
return image_schema.dump(image), 201
return {"message": "no image uploaded"}, 401
Когда вы отправляете файл в flask с помощью multipart/form-data, файл будет находиться в request.files, поэтому в вашем случае это будет
image_json = request.files['here is the key you add to the file on postman']
Другие материалы, называемые данными формы, будут находиться в request.form. Итак, чтобы получить это:
form_data = request.form
Таким образом, используя postman, когда вы выбираете multipartm/form-data, вы сначала даете имя файлу, а затем выбираете его. Имя (или ключ) будет ключом, используемым в словаре для получения файла, как описано выше. Кроме того, для части формы ключ будет работать так же.