Skip to content

xymj/python-flask-backend

Repository files navigation

以下是使用 Poetry 创建基于 Flask 的后端项目,并添加 HTTP 示例入口和 PostgreSQL 数据库操作模块的完整指南:

  1. 创建项目并安装依赖 bash

poetry new flask-backend cd flask-backend 添加依赖项(Flask、PostgreSQL驱动、数据库操作库): bash

生产依赖:Flask + PostgreSQL驱动(psycopg2)

poetry add flask psycopg2-binary

开发依赖:测试框架 pytest

poetry add -D pytest

  1. 项目结构 bash

flask-backend/ ├── pyproject.toml # 项目配置 ├── poetry.lock # 依赖锁定 ├── src/ # 代码目录 │ └── flask_backend/ # 项目包 │ ├── init.py │ ├── app.py # Flask应用入口 │ └── db.py # PostgreSQL数据库操作模块 └── tests/ # 测试目录(可选)

  1. 编写 Flask 应用入口(src/flask_backend/app.py) python

from flask import Flask, jsonify, request from .db import get_db_connection, create_table, insert_data, query_data

app = Flask(name)

@app.route('/') def index(): return jsonify({"message": "Flask Backend Service Running!"})

@app.route('/api/data', methods=['POST']) def add_data(): data = request.json.get('data') if not data: return jsonify({"error": "Missing 'data' field"}), 400 conn = get_db_connection() insert_data(conn, data) conn.close() return jsonify({"success": True}), 201

@app.route('/api/data', methods=['GET']) def get_data(): conn = get_db_connection() results = query_data(conn) conn.close() return jsonify(results), 200

if name == "main": # 创建数据库表(首次运行时) conn = get_db_connection() create_table(conn) conn.close()

  1. 实现 PostgreSQL 数据库操作模块(src/flask_backend/db.py) python

import psycopg2 from psycopg2 import sql

配置数据库连接(生产环境建议用环境变量)

DB_NAME = "your_db_name" DB_USER = "your_db_user" DB_PASSWORD = "your_db_password" DB_HOST = "localhost" DB_PORT = "5432"

def get_db_connection(): conn = psycopg2.connect( dbname=DB_NAME, user=DB_USER, password=DB_PASSWORD, host=DB_HOST, port=DB_PORT ) return conn

def create_table(conn): with conn.cursor() as cur: cur.execute(""" CREATE TABLE IF NOT EXISTS data_store ( id SERIAL PRIMARY KEY, content TEXT NOT NULL ); """) conn.commit()

def insert_data(conn, content): with conn.cursor() as cur: cur.execute( "INSERT INTO data_store (content) VALUES (%s)", (content,) ) conn.commit()

def query_data(conn): with conn.cursor() as cur: cur.execute("SELECT * FROM data_store") return [{"id": row[0], "content": row[1]} for row in cur.fetchall()]

  1. 配置环境变量(可选但推荐) 创建 .env 文件以避免硬编码敏感信息: env

DB_NAME=flask_db DB_USER=postgres DB_PASSWORD=your_password DB_HOST=localhost DB_PORT=5432 安装 Python 的环境变量加载库: bash

poetry add python-dotenv 修改 db.py 加载环境变量: python

from dotenv import load_dotenv import os

load_dotenv()

DB_NAME = os.getenv("DB_NAME") DB_USER = os.getenv("DB_USER") DB_PASSWORD = os.getenv("DB_PASSWORD") DB_HOST = os.getenv("DB_HOST", "localhost") DB_PORT = os.getenv("DB_PORT", "5432")

  1. 启动服务 使用 Poetry 运行 Flask 应用: bash

  2. 测试接口

  3. 测试根路径 bash

curl http://localhost:5001/

输出: {"message": "Flask Backend Service Running!"}

  1. 添加数据 bash

curl -X POST -H "Content-Type: application/json"
-d '{"data": "Hello from Flask!"}'
http://localhost:5001/api/data 3. 查询数据 bash

curl http://localhost:5001/api/data

输出: [{"id": 1, "content": "Hello from Flask!"}]

  1. 数据库初始化 确保 PostgreSQL 已安装并创建数据库: bash

创建数据库(Linux/macOS)

createdb flask_db

或在 psql 中执行:

psql -c "CREATE DATABASE flask_db;"

  1. 完整项目结构 bash

flask-backend/ ├── .env ├── pyproject.toml ├── poetry.lock ├── src/ │ └── flask_backend/ │ ├── init.py │ ├── app.py │ └── db.py └── tests/ └── test_app.py # 可添加测试用例

  1. 扩展建议 环境变量管理 使用 python-dotenv 加载 .env 文件,避免直接写入敏感信息。 数据库迁移 使用 Flask-Migrate(基于 Alembic)管理数据库迁移: bash

poetry add flask-migrate 日志和监控 添加日志记录: python

在 app.py 中

import logging

logging.basicConfig(level=logging.INFO)

通过以上步骤,您已创建了一个基于 Flask 的后端服务,包含: ● 公开的 HTTP 接口(/ 和 /api/data) ● PostgreSQL 数据库的增删改查功能 ● 通过 Poetry 管理依赖和虚拟环境 ● 支持跨网络访问(--host 0.0.0.0) 前端可通过 http://localhost:5001/api/data 与后端交互。

启动命令

  1. 以flask方式启动 poetry run flask --app "src.flask_backend.app:app" run --host 0.0.0.0 --port 5001 --debug # 注意,此命令启动各python模块之间的引用尽量使用相对路径,或者引用使用project-root包下的绝对路径
  2. 以python命令启动 poetry run python src/flask_backend/app.py # 注意,引用使用project-root包下的绝对路径

Flask方式创建项目,以及提供http后端服务,是dify实现逻辑

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published