Quickstarters
Feature Overview
如何为Flask构建后端?
38 分
介绍 在本教程中,您将学习 如何使用 back4app 构建 flask 的后端 。 flask 是一个轻量级的 后端框架 ,能够轻松处理 http 请求,并且在 调试模式 下在开发过程中高效工作。 我们将逐步整合 back4app 的基本功能——如数据库管理、云代码函数、rest 和 graphql api、用户认证以及实时查询(实时查询)——以创建一个安全、可扩展且强大的 flask 应用程序 的后端。 您还将看到,back4app 的快速设置和直观环境可以大幅减少与手动配置服务器和数据库相比所需的时间和精力。 我们将使用 python 代码将 flask 连接到 back4app parse 服务器。在此过程中,您将获得关键功能的实践经验,包括高级安全功能、使用云作业调度任务以及为外部集成设置 webhook。 在本教程结束时,您将为将此基础设置提升为生产就绪的应用程序做好充分准备,或根据需要轻松集成自定义逻辑和第三方 api。 先决条件 要完成本教程,您需要: 一个 back4app 账户和一个新的 back4app 项目 开始使用 back4app https //www back4app com/docs/get started/new parse app 如果您没有账户,可以免费创建一个。请按照上面的指南准备好您的项目。 基本的 flask 开发环境 您可以通过 pip install flask 安装 flask。确保您的机器上安装了 python 3 7 及以上版本。 pip install parse 这个 python 包允许您的 flask 应用与 back4app 的 parse 服务器进行交互。 熟悉 python 和 flask 概念 flask 官方文档 https //flask palletsprojects com/en/2 2 x/ 如果您是 flask 新手,请在开始之前查看官方文档或初学者教程。 在开始之前,请确保您具备所有这些先决条件。设置好您的 back4app 项目并准备好本地 flask 环境将帮助您更轻松地跟随。 步骤 1 – 在 back4app 上创建新项目并连接 创建新项目 在 back4app 上构建 flask 后端的第一步是创建一个新项目。如果您尚未创建,请按照以下步骤操作: 登录到您的 back4app 账户 。 点击您的 back4app 仪表板中的“新应用”按钮 。 给您的应用命名 (例如,“flask backend tutorial”)。 项目创建后,您将在 back4app 仪表板中看到它列出。该项目是所有后端配置的基础。 将 parse sdk 连接到 flask back4app 依赖 parse 平台来管理您的数据,提供实时功能,处理用户身份验证等。 将您的 flask 应用程序连接到 back4app 涉及安装 parse python 包,并使用您 back4app 控制面板中的凭据进行初始化。 检索您的 parse 密钥 在您的 back4app 控制面板中,导航到您应用的 “应用设置” 或 “安全性与密钥” 部分以找到您的 应用程序 id 和 客户端密钥 (如果需要,也可以是 rest api 密钥 )。您还会找到 parse 服务器 url (通常格式为 https //parseapi back4app com )。 在您的 flask 环境中安装 parse python sdk ,方法是运行: pip install parse 在您的 flask 应用程序中初始化 parse 创建一个文件(例如, 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 ),您可以 导入 flask 应用 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(字符串)和 iscompleted(布尔值)。 back4app 支持多种数据类型,如 字符串 , 数字 , 布尔值 , 对象 , 日期 , 文件 , 指针 , 数组 , 关系 , 地理点 , 和 多边形 您可以为每个字段选择合适的类型。 使用 ai 代理创建数据模型 如果您更喜欢自动化的方法,您也可以使用 back4app 的 ai 代理 从您的应用仪表板打开 ai 代理 用简单的语言描述您的数据模型 (例如,“在 back4app 中创建一个包含标题和 iscompleted 字段的 todo 类。”)。 让 ai 代理为您创建模式 。 使用 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 请求 以在您的 back4app 数据库中创建和读取 todo 项目。 使用 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 场景中,您通常会使用一个单独的客户端或服务器端订阅库,该库可以保持与 back4app 的实时查询服务器的 websocket 连接。 在您的 back4app 控制面板中启用 实时查询 ,在您应用的 服务器设置 下 使用一个连接到 wss\ //your subdomain here b4a io 的 parse 实时查询客户端,监听创建/更新/删除事件 步骤 3 – 使用 acl 和 clp 应用安全性 简要概述 back4app 提供 访问控制列表(acls) 和 类级权限(clps) 来锁定数据。acls 适用于单个对象,而 clps 适用于整个类。这有助于您根据用户、角色或公众限制或允许读/写操作。 设置类级权限 前往您的 back4app 控制面板 , 选择您的应用程序,然后打开 数据库 部分。 选择一个类 (例如,“待办事项”)。 打开类级权限 标签。 配置您的默认设置,例如“需要身份验证”或“无访问权限。” 在代码中配置 acls 您可以在 python 代码中应用 acls @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 服务器运行验证数据、执行复杂计算或与外部服务集成等任务。 示例函数 因为 back4app 的默认云代码环境使用 node js,所以您将使用 javascript 编写云代码。然而,您仍然可以从 flask 应用程序触发这些服务器端脚本。例如,一个 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 来部署您的云代码 \# 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 代码粘贴到 云代码 > 函数 并点击“部署。” 调用您的函数 在 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 settings 中管理这些功能。 代码示例 @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 – 处理文件存储 设置文件存储 您可以通过在基于 node 的环境中创建一个 parse file() 对象,从 flask 上传文件到您的 parse 数据库,或者您可以使用 python 的直接 rest 调用。如果您在类中存储这些文件的引用,它们将变得易于检索。 @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 仪表板中。 启用电子邮件验证 和 配置电子邮件模板 启用密码重置 以向用户的电子邮件发送密码恢复链接。 代码/实现 一旦启用,任何使用电子邮件注册的新用户将收到一个验证链接。对于密码重置,您可以通过 rest 或从您的 flask 路由调用 parse 的内置方法。 步骤 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 定义 webhooks 允许您的 back4app 应用在特定触发器发生时将数据发送到外部服务。这对于与支付网关、slack、分析或任何第三方服务的集成非常有用。 配置 导航到 webhooks 配置 在您的 back4app 仪表板 > 更多 > webhooks。 添加一个新的 webhook 。 设置端点 (例如, https //your external service com/webhook endpoint https //your external service com/webhook endpoint )。 选择触发器 以便 webhook 会触发。 示例 如果您希望在“待办事项”中创建新记录时通知 slack 频道,请设置 slack webhook url。然后,每当保存新的待办事项时,slack 将收到包含其详细信息的 post 请求。 第 10 步 – 探索 back4app 管理面板 该 back4app 管理应用 为您团队中非技术成员提供了用户友好的界面。这是一个 以模型为中心 的 crud 操作和企业级任务的界面。 在哪里找到它 前往您的应用仪表板 选择 更多 > 管理员应用 并启用它。 创建一个管理员用户并选择一个子域来托管面板。 启用后,您可以使用管理员凭据登录,以更方便地管理数据——无需在 python 代码中编写自定义端点或查询。 结论 通过遵循这个全面的教程,您已经: 创建了一个安全的后端 用于在 back4app 上的 flask 应用程序。 配置了一个数据库 具有类模式、数据类型和关系。 集成了实时查询 (实时查询)以实现即时数据更新。 应用了安全措施 使用 acl 和 clp 来保护和管理数据访问。 实现了云代码 函数以在服务器端运行自定义业务逻辑。 设置了用户身份验证 支持电子邮件验证和密码重置。 管理文件上传 和检索,具有可选的文件安全控制。 调度云作业 以进行自动化后台任务。 使用 webhooks 与外部服务集成。 探索了 back4app 管理面板 以进行数据管理。 通过一个稳固的 flask 后端框架 ,可以 返回渲染模板 文件(如果需要)以及强大的 back4app 设置,您现在可以开发功能丰富、可扩展且安全的应用程序。 您可以运行您的 flask run 命令来启动 开发服务器 并继续编码。 命令行 任务变得简单明了,使用 方法后定义 路由来接受 json 负载。 下一步 构建一个生产就绪的 flask 应用 ,通过扩展这个后端来处理更复杂的数据模型、缓存策略和性能优化。 集成高级功能 ,例如专门的身份验证流程、基于角色的访问控制或外部 api(如支付网关)。 查看 back4app 的官方文档 ,深入了解高级安全性、性能调优和日志分析。 探索其他教程 ,关于实时聊天应用、物联网仪表板或基于位置的服务。您可以将这里学到的技术与第三方 api 结合起来,创建复杂的现实世界应用。