Создание API с помощью колбы Python для загрузки файлов в облачную
Название Meta: Создание API с помощью колбы Python для загрузки файлов в облачную мета -описание: Узнайте, как создать API с помощью колбы Python и Python Sdk Cloudary, чтобы загрузить файлы любого формата в облачный.
Код
Облачные предлагают SDK для многих языков программирования и фреймворков. Несмотря на то, что он также предлагает конечную точку API загрузки как для кода, так и для интерфейса, большинство разработчиков считают SDK очень полезными. Если вы работаете с мощной средней структурой, такими как Python Flask, вы будете рады услышать, что теперь доступен Python SDK. Этот учебник проводит вас через процесс создания API для загрузки изображений в облачную. Вы также можете загрузить другие типы файлов, включая видео и даже немедиа, с API.
Понимание разницы между задней и передней частью
Как правило, код, который работает на сервере, является Задняя часть и код, который работает в браузере, это внешний интерфейс . Однако, поскольку код сервера может отображать HTML, CSS и JavaScript, которые работают в браузере, иногда приводит к путанице. В контексте облачных SDK, бэк-энды могут читать секретные учетные данные, которые не должны распространяться в передней части. Другими словами, вы никогда не должны раскрывать переменные среды в передней части, потому что фронтальные SDK не могут скрывать учетные данные, которые должны храниться в секрете. В качестве решения вы можете загрузить код браузера с помощью Cloudarian’s Неподписанные пресеты без раскрытия секретных полномочий. Лучшим способом было бы построить API в среднем для безопасных загрузок, сохраняя ваш Api_secret
Учетные данные скрыты. Читайте дальше, чтобы увидеть, как это сделать с помощью Python SDK и Python Clask или Python Django от Python.
Кодирование API -API Flask для загрузки в облачный
Структура колбы облегчает определение маршрутов и их функциональных возможностей. Чтобы начать, сначала создайте маршрут с именем /upload
, который принимает Пост
который содержит Multipart/Form-Data Анкет Затем вы собираете ввод файла изображения в FormData
объект в обработке отправки и СООБЩЕНИЕ
Это на ваш собственный API Flask, чтобы назвать API загрузки Cloudary, который настроен с вашим полным набором облачных учетных данных. Флапа Запрос
Опция позволяет получить данные от клиента. При отправке файлов, таких как загрузка изображений, вы можете вызвать Запрос
Чтобы получить доступ к ним.
from flask import Flask,render_template, request if request.method == 'POST': file_to_upload = request.files['file']
Данные, полученные из request.files ['file']
это экземпляр Веркзег. Filestorage
Анкет Объект может быть передан функции загрузки Python SDK. Колба затем обертывает Веркзег , который обрабатывает детали интерфейса шлюза веб -сервера (WSGI).
if file_to_upload: upload_result = cloudinary.uploader.upload(file_to_upload) app.logger.info(upload_result)
Для загрузки в облачный, по умолчанию resource_type
это Изображение
Анкет Чтобы развернуть или создать новый API Flask, добавить resource_type: 'видео'
или resource_type: 'Raw'
Для видео или необработанных файлов соответственно. RAW относится к немедийным форматам файлов, включая текст и JSON. Наконец, upload_result
это объект, который содержит ответ загрузки. Чтобы завершить действия вашего загрузить
API, верните этот ответ клиенту, как это:
from flask import jsonify return jsonify(upload_result)
Ниже приведен полный код вашего загрузить
API
@app.route("/upload", methods=['POST']) def upload_file(): app.logger.info('in upload route') cloudinary.config(cloud_name = os.getenv('CLOUD_NAME'), api_key=os.getenv('API_KEY'), api_secret=os.getenv('API_SECRET')) upload_result = None if request.method == 'POST': file_to_upload = request.files['file'] app.logger.info('%s file_to_upload', file_to_upload) if file_to_upload: upload_result = cloudinary.uploader.upload(file_to_upload) app.logger.info(upload_result) return jsonify(upload_result)
Настройка приложения Flask
Далее следуйте шагам ниже, чтобы построить приложение.
Настроить виртуальную среду
Приведенная ниже команда устанавливает вашу виртуальную среду. Это важный шаг для инкапсулирования библиотек, которые вы будете использовать в этом приложении.
python3 -m venv env source env/bin/activate
Чтобы деактивировать окружающую среду, тип:
deactivate source env/bin/activate
Установите колбу
Установите колбу с этой командой:
python3 -m pip install Flask==1.1.1
Добавить файл redtion.txt
Создать Требования.txt
Файл, чтобы отслеживать все библиотеки, необходимые для приложения, и для облегчения будущего развертывания.
python3 -m pip freeze > requirements.txt
Обновите установщик пакета Python
При необходимости обновите установщик пакета Python, называемый PIP, с командой ниже. Команда может варьироваться в зависимости от вашей локальной установки Python. Как показано ниже, заморозить
Команда пишет библиотеку и версию в Требования.txt
файл.
usr/local/opt/python@3.9/bin/python3.9 -m pip install --upgrade pip python3 -m pip freeze > requirements.txt
Установите облачный
Затем установите облачный, чтобы получить доступ к его API загрузки для Python SDK.
python3 -m pip install cloudinary python3 -m pip freeze > requirements.txt
Добавить поддержку CORS
Если вы хотите получить доступ к своему загрузить
API от клиента, обслуживаемого другого хоста, добавьте поддержку обмена ресурсами Cross Origin (CORS):
python3 -m pip install flask-cors python3 -m pip freeze > requirements.txt
Теперь вы можете добавить код для настройки COR для всех API и, в частности, загрузить
API Приведенный ниже код демонстрирует оба варианта.
from flask_cors import CORS, cross_origin app = Flask(__name__) # After creating the Flask app, you can make all APIs allow cross-origin access. CORS(app) # or a specific API @app.route("/upload", methods=['POST']) @cross_origin()
Работа с переменными окружающей среды
Вы можете легко загрузить переменные среды с помощью Python. Удобно, Python-Dotenv
Библиотека смоделирована на node.js dotenv
упаковка. Вам нужны три облачные переменные среды, то есть Cloud_Name
, Api_key
и Api_secret
, для вашего кода, но не делитесь Api_secret
Анкет Вы можете экспортировать эти переменные в местную среду. Когда вы развернетесь в Heroku, вы можете добавить их, чтобы сделать их доступными в приложение, когда оно работает в контейнере Heroku.
from dotenv import load_dotenv load_dotenv()
В вашем загрузить
API, вы читаете в переменных среды с Cloudary.config ()
функция Затем вы получаете доступ к этим переменным с помощью os.getenv ()
функция в dotenv
библиотека.
cloudinary.config(cloud_name = os.getenv('CLOUD_NAME'), api_key=os.getenv('API_KEY'), api_secret=os.getenv('API_SECRET'))
При работе локально вы можете создать gitignore’d .env
Файл, который содержит ваши облачные учетные данные для локального тестирования. Значения для этих учетных данных отображаются в вашей облачной консоли.
CLOUD_NAME=CLOUD_NAME API_KEY=API_KEY API_SECRET=API_SECRET
Далее установите Python-Dotenv
библиотека:
python3 -m pip install python-dotenv python3 -m pip freeze > requirements.txt
Тестирование API Локально
Теперь вы готовы проверить приложение на локальном уровне. Вы можете провести сквозное тестирование с почтальником и локальной формой, которая указывает на сервер, работающий на Localhost
Анкет Создайте свое приложение с функцией загрузки путем загрузки, клонирования или копирования из этот репозиторий GitHub Анкет Добавьте свои учетные данные в .env
Файл, а затем запустите свой сервер на Localhost
Анкет
python3 app.py
Приведенная выше команда открывает сервер в http://127.0.0.1:5000/
Анкет Обратите внимание, что порт по умолчанию составляет 5000.
Тест с почтальником
В почтальоне, сделайте следующее:
- Установите метод на
Пост
Анкет - Установите тип тела на
Форма-дата
Анкет - Установить пары ключей/значения для ввода. Установите значение для ключа в
Файл
Анкет Мышь над Ключ поле и выберите Текст или Файл из выпадающего меню. Под Файл это Выберите файлы кнопка; Нажмите на него, чтобы выбрать файл с вашего локального диска. - Нажмите Отправить Для обработки запроса.
Ответ API с облачной загрузкой отображается в нижней части страницы
Проверка с локальной формой
Следуй этим шагам:
- Откройте
index.html
Файл с локальным HTTP -сервером. Выберите локальный файл и нажмите Загрузить . Запустите код JavaScript ниже.
Fetch
Команды вызовы сервера, который работает наLocalhost
АнкетЕсли процесс успешно, в консоли отображается отклик API с облачной загрузкой. Не забудьте установить
event.preventdefault ();
для обработчика отправки. В противном случае вы получите обновление страницы и не увидите свой журнал.Разместите файл в обработчике отправки, создав
FormData
объект и добавление файла, как показано в коде ниже.
Приведенные выше кодовые пакеты вверх по файлу, который вы выбираете в вводе своей формы, как если бы вы отправили многочасовую форму. Многочисленная форма важна для отправки файлов, поскольку каждый вход отправляется в виде блока данных, разделенных границами. Результат затем отображается в вашей консоли, например, это:
Развертывание приложения Flask в Heroku
Heroku-это платформа в качестве услуги (PAAS) для обслуживания прототипов или готовых к производству приложений. Принимайте API, который вы только что построили на Heroku, выполнив следующее:
Создайте бесплатную учетную запись на Heroku.
Установить Онломщик , Short For Green Unicorn, HTTP -сервер Python WSGI для размещения приложений.
Создайте файл с именем
Prodfile
С инструкциями для Heroku начать ваше приложение с надписей:Создайте файл с именем
Runtime.txt
которая содержит версию Python, которую вы хотите использовать:Развернуть с помощью git:
Heroku git: удаленное-оттаивание-инлет-61413
git push heroku Master
Heroku Открыт
Heroku Login
You can build the new Heroku app with the CLI. However, as noted above, if you built it on the heroku.com dashboard, you can just add the link Heroku created for you to a `git:remote` command. ### Loading Environment Variables on Heroku To load environment variables on Heroku, open the dashboard and navigate to your new server instance. Click the **Settings** tab and scroll down to the **Config Vars** section. Click **Reveal Config Vars**, where you can enter Key/Value pairs. This is where you load your Cloudinary environment variables: `CLOUD_NAME`, `API_KEY`, and `API_SECRET`.  For more options for setting up `prod` and `dev` instances, see the [Heroku documentation](https://devcenter.heroku.com/articles/git). ## Testing the API Deployed on Heroku If you have a `GET` method API like the "Hello World!" in the `app.py` example, you can open the Heroku app in the browser. For end-to-end testing, you can `POST` to the Heroku server link from Postman. The result is similar to that for local testing.  Alternatively, modify the `index.html` file to post to your Heroku server. Just add your Heroku server link to the `fetch` command, like this: ```JavaScript fetch("https://xxxx.herokuapp.com", options)
Обеспечение приложения
Возможно, вы заметили, что ссылка развертывания Heroku была стерта с изображений выше. Это для безопасности. Развертывание этого приложения в Heroku позволяет загружать данные в облачную. Если ссылка не защищена только для использования только на аутентифицированной веб -странице, любой может загрузить в ваше облачное облако. Даже если вы скрываете переменные среды, вы бы создали публичный метод для изменения данных в вашем облаке.
Этот урок не охватывает, как настроить аутентификацию. Многие варианты доступны для аутентификации маршрутов API. Возможно, вы захотите изучить Auth0, Google или GitHub. В качестве альтернативы, создайте свой собственный процесс на основе вашей базы данных пользователей для этого типа аутентификации.
Двигаясь дальше
После того, как вы получите этот API, вы можете создать другие медиа -API с облачным SDK Python, следуя тому же шаблону. Радоваться, веселиться!
Оригинал: “https://dev.to/rebeccapeltz/creating-an-api-with-python-flask-to-upload-files-to-cloudinary-1a0a”