Quickstarters
Feature Overview
Как создать бекенд для Flask?
41 мин
введение в этом учебном пособии вы научитесь создавать бэкенд для flask с использованием back4app flask — это легковесный бэкенд фреймворк , который легко обрабатывает http запросы и эффективно работает в режиме отладки во время разработки мы пройдем через интеграцию основных функций back4app — таких как управление базами данных, функции cloud code, rest и graphql api, аутентификация пользователей и запросы в реальном времени (live queries) — чтобы создать безопасный, масштабируемый и надежный бэкенд для вашего flask приложения вы также увидите, как быстрая настройка и интуитивно понятная среда back4app могут значительно сократить время и усилия по сравнению с ручной настройкой серверов и баз данных мы будем использовать код на python, чтобы подключить flask к серверу back4app parse в процессе вы получите практический опыт работы с ключевыми функциями, включая расширенные функции безопасности, планирование задач с помощью cloud jobs и настройку вебхуков для внешних интеграций к концу этого учебного пособия вы будете хорошо подготовлены, чтобы улучшить эту базовую настройку до готового к производству приложения или легко интегрировать пользовательскую логику и сторонние api по мере необходимости предварительные требования чтобы завершить этот учебник, вам понадобятся учетная запись back4app и новый проект back4app начало работы с back4app https //www back4app com/docs/get started/new parse app если у вас нет учетной записи, вы можете создать ее бесплатно следуйте приведенному выше руководству, чтобы подготовить ваш проект базовая среда разработки flask вы можете установить flask с помощью pip install flask убедитесь, что у вас установлена версия python 3 7 или выше pip install parse этот пакет python позволяет вашему приложению flask взаимодействовать с сервером parse от back4app знание python и концепций flask официальная документация flask https //flask palletsprojects com/en/2 2 x/ если вы новичок в flask, ознакомьтесь с официальной документацией или учебником для начинающих перед началом убедитесь, что у вас есть все эти предварительные условия перед началом наличие настроенного проекта back4app и готовой локальной среды flask поможет вам легче следовать инструкциям шаг 1 – создание нового проекта на back4app и подключение создать новый проект первый шаг в создании вашего бэкенда flask на back4app – это создание нового проекта если вы еще не создали его, выполните следующие шаги войдите в свою учетную запись back4app нажмите кнопку “новое приложение” на вашей панели управления back4app дайте вашему приложению имя (например, “flask backend tutorial”) после создания проекта вы увидите его в списке на вашей панели управления back4app этот проект является основой всех конфигураций бэкенда подключите parse sdk к flask back4app полагается на платформу parse для управления вашими данными, предоставления функций в реальном времени, обработки аутентификации пользователей и многого другого подключение вашего приложения flask к back4app включает установку parse python пакета и его инициализацию с учетными данными из вашей панели управления back4app получите ваши ключи parse в вашей панели управления back4app перейдите в раздел “настройки приложения” или “безопасность и ключи”, чтобы найти ваш id приложения и ключ клиента (или ключ rest api при необходимости) вы также найдете url сервера parse (часто в формате https //parseapi back4app com ) установите parse python sdk в вашей среде flask, выполнив pip install parse инициализируйте parse в вашем приложении flask создайте файл (например, parse config py ) в каталоге под названием app или где бы вы ни хранили свои модули бэкенда parse config py import parse \# replace the placeholders with your back4app credentials parse application id = "your application id" parse client key = "your client key" parse server url = "https //parseapi back4app com" затем, в вашем основном файле приложения flask (например, app py , вы можете import flask app flask модули вместе с вашей конфигурацией parse from flask import flask, request, jsonify import parse config # this ensures parse is already set up app = flask( name ) @app route('/') def index() return "hello, flask + back4app!" if name == ' main ' app run(debug=true) # the debug mode helps in local development server завершив этот шаг, вы установили безопасное соединение между вашими маршрутами фронтенда flask и бэкендом back4app все запросы и транзакции данных безопасно маршрутизируются через код parse на python, что снижает сложность ручных вызовов rest или graphql (хотя вы все равно можете использовать их при необходимости) шаг 2 – настройка базы данных создание модели данных прежде чем мы начнем, давайте поговорим о настройке базы данных вы можете спроектировать свою схему данных в панели управления back4app или позволить parse создать ее на лету например, вы можете создать класс с именем “todo” с полями, такими как title и iscompleted перейдите в раздел “база данных” в вашей панели управления back4app создайте новый класс (например, “todo”) и добавьте соответствующие столбцы, такие как title (string) и iscompleted (boolean) back4app поддерживает различные типы данных, такие как string , number , boolean , object , date , file , pointer , array , relation , geopoint , и polygon вы можете выбрать подходящий тип для каждого поля создание модели данных с помощью ai agent если вы предпочитаете автоматизированный подход, вы также можете использовать ai agent от back4app откройте ai agent из вашей панели управления приложением опишите вашу модель данных простым языком (например, “создайте класс todo с полями title и iscompleted в back4app ”) позвольте ai agent создать схему для вас чтение и запись данных с использованием sdk в flask вы можете создавать и извлекать данные, импортируя parse из вашего parse config py инициализации from flask import flask, request, jsonify import parse import parse config app = flask( name ) @app route('/create todo', methods=\['post']) def create todo() data = request get json() # import json to parse the payload title = data get('title') is completed = data get('iscompleted', false) todo = parse object factory('todo') todo item = todo() todo item title = title todo item iscompleted = is completed try saved todo = todo item save() return jsonify({"success" true, "objectid" saved todo objectid}), 200 except exception as e return jsonify({"error" str(e)}), 400 @app route('/fetch todos', methods=\['get']) def fetch todos() todo = parse object factory('todo') query = todo query try todos = query find() \# convert to json compatible response results = \[{"objectid" t objectid, "title" t title, "iscompleted" t iscompleted} for t in todos] return jsonify(results), 200 except exception as e return jsonify({"error" str(e)}), 400 if name == ' main ' app run(debug=true) этот файл приложения flask обрабатывает http запросы для создания и чтения задач todo в вашей базе данных back4app чтение и запись данных с использованием rest api если вы предпочитаете прямые rest вызовы, вы можете протестировать с curl из командной строки curl x post \\ h "x parse application id your application id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"title" "buy groceries", "iscompleted" false}' \\ https //parseapi back4app com/classes/todo чтение и запись данных с использованием graphql api аналогично, back4app предоставляет конечную точку graphql например mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } работа с живыми запросами (по желанию) если вам нужны обновления в реальном времени , back4app предоставляет живые запросы в сценарии flask вы обычно используете отдельную библиотеку подписки на стороне клиента или сервера, которая может поддерживать соединение websocket с сервером живых запросов back4app включите живые запросы в вашей панели управления back4app в разделе настройки сервера используйте клиент parse livequery который подключается к wss\ //your subdomain here b4a io и слушает события создания/обновления/удаления шаг 3 – применение безопасности с помощью acl и clp краткий обзор back4app предоставляет списки контроля доступа (acl) и разрешения на уровне класса (clp) для защиты данных acl применяются к отдельным объектам, в то время как clp применяются ко всему классу это помогает вам ограничивать или разрешать операции чтения/записи для каждого пользователя, роли или для общественности настройка разрешений на уровне класса перейдите в свою панель управления back4app , выберите свое приложение и откройте раздел база данных выберите класс (например, “todo”) откройте вкладку уровень разрешений класса настройте свои параметры по умолчанию, такие как “требуется аутентификация” или “нет доступа ” настройка acl в коде вы можете применять acl в коде python @app route('/create private todo', methods=\['post']) def create private todo() data = request get json() user id = data get('userid') title = data get('title') \# assume you have a pointer to the user or a way to get user from id parseuser = parse user user query = parseuser query user obj = user query get(user id) todo = parse object factory('todo') todo item = todo() todo item title = title acl = parse acl() acl setreadaccess(user obj, true) acl setwriteaccess(user obj, true) acl setpublicreadaccess(false) acl setpublicwriteaccess(false) todo item acl = acl saved todo = todo item save() return jsonify({"success" true, "objectid" saved todo objectid}), 200 шаг 4 – написание функций облачного кода почему облачный код облачный код идеально подходит для выполнения python кода (или javascript в других сценариях) на стороне сервера, поэтому вам не нужно размещать свою собственную инфраструктуру вы можете выполнять задачи, такие как валидация данных, выполнение сложных расчетов или интеграция с внешними сервисами непосредственно с сервера parse пример функции поскольку среда cloud code по умолчанию для back4app использует node js, вы будете писать свой cloud code на javascript тем не менее, вы все равно можете вызывать эти серверные скрипты из вашего flask приложения например, функция cloud на node js может выглядеть так main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); развертывание используйте back4app cli https //www back4app com/docs/local development/parse cli для развертывания вашего cloud code \# step 1 install the cli curl https //raw\ githubusercontent com/back4app/parse cli/back4app/installer sh | sudo /bin/bash \# step 2 configure your account key b4a configure accountkey \# step 3 deploy your code b4a deploy в качестве альтернативы вы можете развернуть через панель управления back4app, вставив ваш js код в cloud code > functions и нажав “deploy ” вызов вашей функции в flask вы можете вызвать эту облачную функцию, используя rest import requests @app route('/text length', methods=\['post']) def get text length() data = request get json() text = data get('text') url = "https //parseapi back4app com/functions/calculatetextlength" headers = { "x parse application id" "your app id", "x parse rest api key" "your rest api key", "content type" "application/json" } payload = {"text" text} response = requests post(url, json=payload, headers=headers) return jsonify(response json()), response status code шаг 5 – настройка аутентификации включите или настройте аутентификацию пользователей в панели управления back4app back4app использует класс user по умолчанию parse обрабатывает хеширование паролей, токены сессий и безопасное хранение вы можете управлять этими функциями в ваших настройках приложения примеры кода @app route('/signup', methods=\['post']) def sign up user() data = request get json() username = data get('username') password = data get('password') email = data get('email') user = parse user() user username = username user password = password user email = email try user sign up() return jsonify({"success" true}), 200 except exception as e return jsonify({"error" str(e)}), 400 @app route('/login', methods=\['post']) def log in user() data = request get json() username = data get('username') password = data get('password') try parse user login(username, password) return jsonify({"success" true}), 200 except exception as e return jsonify({"error" str(e)}), 400 социальный вход back4app и parse могут интегрироваться с социальными провайдерами, такими как google, apple или facebook подробности настройки различаются, поэтому обратитесь к официальным документация по социальному входу parse https //www back4app com/docs/platform/sign in with apple шаг 6 – обработка хранения файлов настройка хранения файлов вы можете загружать файлы в вашу базу данных parse из flask, создавая объект parse file() в среде на основе node, или вы можете использовать прямые rest вызовы из python если вы храните ссылки на эти файлы в ваших классах, их легко извлечь @app route('/upload file', methods=\['post']) def upload file() file = request files\['file'] # from an html form or an api call file name = file filename url = "https //parseapi back4app com/files/" + file name headers = { "x parse application id" "your app id", "x parse rest api key" "your rest api key", "content type" file content type } response = requests post(url, data=file read(), headers=headers) return jsonify(response json()), response status code пример после загрузки файла вы получите url файла, который можете сохранить в вашей базе данных затем вы можете отобразить или сослаться на этот файл в вашем html шаблоне по мере необходимости шаг 7 – подтверждение электронной почты и сброс пароля обзор подтверждение электронной почты обеспечивает действительность адресов электронной почты, а сброс пароля помогает пользователям безопасно восстановить доступ к учетной записи конфигурация панели управления back4app перейдите в настройки электронной почты на панели управления back4app включите подтверждение электронной почты и настройте шаблоны электронной почты включите сброс пароля для отправки ссылок на восстановление пароля на электронную почту пользователя код/реализация после включения любой новый пользователь, регистрирующийся с электронной почтой, получает ссылку для подтверждения для сброса пароля вы можете вызывать встроенные методы parse через rest или из ваших маршрутов flask шаг 8 – планирование задач с помощью облачных заданий что делают облачные задания облачные задания позволяют вам планировать фоновые задачи, такие как очистка данных или отправка периодических электронных писем например, вы можете удалять старые записи каждый день без вмешательства пользователя пример // main js parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); затем, из вашей панели управления back4app перейдите в настройки приложения > настройки сервера > фоновые задания запланируйте это задание для выполнения ежедневно или с вашим предпочтительным интервалом шаг 9 – интеграция вебхуков определение webhooks позволяют вашему приложению back4app отправлять данные во внешние сервисы, когда происходят определенные триггеры это полезно для интеграции с платежными шлюзами, slack, аналитикой или любыми сторонними сервисами конфигурация перейдите к конфигурации webhooks в вашей панели управления back4app > дополнительно > webhooks добавьте новый webhook установите конечную точку (например, https //your external service com/webhook endpoint https //your external service com/webhook endpoint ) выберите триггеры для которых будет срабатывать webhook пример если вы хотите уведомлять канал slack каждый раз, когда создается новая запись в “todo,” установите url адрес webhook slack затем, каждый раз, когда новый todo сохраняется, slack будет получать post запрос с его деталями шаг 10 – изучение панели администратора back4app приложение back4app admin app предоставляет удобный интерфейс для не технических членов вашей команды это ориентированный на модели интерфейс для операций crud и задач уровня предприятия где это найти перейдите в свою панель управления приложением выберите больше > админ приложение и включите его создайте администратора и выберите поддомен для размещения панели после включения вы можете войти с помощью своих учетных данных администратора, чтобы управлять данными более удобно — без написания пользовательских конечных точек или запросов в вашем коде python заключение следуя этому всестороннему руководству, вы создали безопасный бэкенд для приложения flask на back4app настроили базу данных с классами схем, типами данных и отношениями интегрировали запросы в реальном времени (live queries) для немедленных обновлений данных применили меры безопасности с использованием acl и clp для защиты и управления доступом к данным реализовали функции cloud code для выполнения пользовательской бизнес логики на стороне сервера настроили аутентификацию пользователей с поддержкой проверки электронной почты и сброса паролей управляли загрузкой файлов и их извлечением, с дополнительными мерами безопасности для файлов запланировали cloud jobs для автоматизированных фоновых задач использовали webhooks для интеграции с внешними сервисами изучили панель администратора back4app для управления данными с надежным flask бэкенд фреймворком который может возвращать файлы шаблонов (если это необходимо) и с мощной настройкой back4app, вы теперь готовы разрабатывать функциональные, масштабируемые и безопасные приложения вы можете запустить свою команду flask run для старта разработческого сервера и продолжить кодирование командная строка задачи становятся простыми с методы post def маршруты, которые принимают json данные следующие шаги создайте приложение flask, готовое к производству путем расширения этого бэкенда для обработки более сложных моделей данных, стратегий кэширования и оптимизации производительности интегрируйте расширенные функции такие как специализированные потоки аутентификации, контроль доступа на основе ролей или внешние api (например, платежные шлюзы) посмотрите официальную документацию back4app для более глубокого изучения вопросов безопасности, настройки производительности и анализа логов изучите другие учебники по приложениям для чата в реальном времени, iot панелям или услугам на основе местоположения вы можете комбинировать техники, изученные здесь, с api третьих сторон для создания сложных, реальных приложений