python flask API接口

博客介绍了以json形式传入数据,涉及server.py、test.py等文件,给出了结果示例,显示执行耗时,还提到了使用postman进行测试,并提供了参考文献。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以json形式传入数据

server.py

from flask import Flask, request
import json
 
app = Flask(__name__)
 
 
# 只接受POST方法访问
@app.route("/test_1",methods=["POST"])
def check():
    # 默认返回内容
    return_dict = {'statusCode': '200', 'message': 'successful!', 'result': False}
    # 判断入参是否为空
    if request.get_data() is None:
        return_dict['statusCode'] = '5004'
        return_dict['message'] = '请求参数为空'
        return json.dumps(return_dict, ensure_ascii=False)
 
    get_data = request.get_data()  # 获取传入的参数
    get_data = json.loads(get_data)  # 传入的参数为bytes类型,需要转化成json
    name = get_data.get('name')
    age = get_data.get('age')
 
    return_dict['result'] = tt(name, age)  # 对参数进行操作
    return json.dumps(return_dict, ensure_ascii=False)
 
 
# 功能函数
def tt(name, age):
    result_str = "%s今年%s岁" % (name, age)
    return result_str
 
 
if __name__ == "__main__":
    app.run(debug=True)

 

test.py

# coding=utf-8
import json
import requests
import time
import sys
import os
# sys.path.append(os.getcwd())
print(sys.argv)
# os.chdir(sys.argv[0])
os.chdir(sys.path[0])
 
time_start = time.time()
if __name__ == '__main__':
    testData = {"name": "小明", "age": 18}
    response = requests.post('http://localhost:5000/test_1', json=testData)
 
print(response.text)
 
time_end = time.time()
print('totally cost', time_end-time_start)

 

result

{"statusCode": "200", "message": "successful!", "result": "小明今年18岁"}
totally cost 0.007977962493896484

 

postman测试

 

参考文献:https://blog.youkuaiyun.com/t8116189520/article/details/86623320

<think>好的,我现在需要帮助用户学习如何使用Python Flask开发API接口的最佳实践。首先,我要回想一下用户的问题,他们想了解最佳实践,所以需要涵盖从环境搭建到部署的各个方面。 首先,我应该确定用户可能已经了解的基础知识,比如Flask的基本用法,但考虑到是学习最佳实践,可能需要从基础开始梳理。不过用户明确提到最佳实践,所以重点应该在高效、可靠和安全方面。 接下来,我需要参考提供的引用内容。引用1提到使用Flask框架、Swagger规范、异常处理、JWT认证等。引用2和3也提到了框架选择、API结构设计、ORM集成等。引用4给出了一个简单的Flask示例代码,并提到路由和HTTP方法的使用。 那么,我应该将这些引用内容整合起来,分步骤介绍最佳实践。可能需要分为几个部分:环境配置、项目结构、路由设计、请求处理、认证授权、数据库集成、文档生成、测试、部署优化等。 然后,每个部分需要详细说明。例如,在项目结构部分,需要建议使用蓝图来组织代码,避免将所有路由放在一个文件中。在请求处理中,需要提到使用Flask-RESTful或Flask-RESTx来简化开发,同时处理数据验证和序列化。 认证部分,JWT是常用的,可以结合Flask-JWT-Extended库来实现。数据库集成方面,使用SQLAlchemy作为ORM,确保模型定义和管理迁移(比如用Alembic)。 文档生成方面,Swagger/OpenAPI规范很重要,可以使用Flask-RESTx自动生成文档。测试部分需要强调单元测试和集成测试,使用pytest和Flask的测试客户端。 部署优化需要考虑生产环境的配置,比如使用Gunicorn或uWSGI,以及启用调试模式和日志记录。 另外,错误处理也是关键,需要统一的错误响应格式,使用HTTP状态码,并处理全局异常。 可能需要检查是否有遗漏的部分,比如中间件、请求钩子、配置管理(开发、测试、生产环境的不同配置),还有安全性,如CORS配置,防止SQL注入和XSS攻击。 然后,示例代码部分需要展示一个完整的例子,包含上述提到的各个部分,比如使用蓝图、ORM、认证、错误处理等。但用户提供的引用4中的示例非常简单,可能需要更复杂的例子来展示最佳实践。 最后,生成的相关问题需要围绕用户可能进一步想了解的内容,比如如何扩展API、如何处理高并发、如何进行性能优化、如何实现版本控制等。 需要确保回答符合系统级指令,比如行内数学公式使用$...$,但在这个问题中可能用不上数学公式。不过用户的问题是关于API开发的,所以可能不需要数学表达式,但需要遵循其他格式要求,如独立代码块、引用标识等。 总结一下,回答的结构应该是分步骤介绍每个最佳实践,每个步骤下有详细的说明和代码示例,最后给出相关问题。需要确保引用正确,比如在提到Swagger时引用[^3],提到Flask示例时引用[^4]等。</think>### 使用 Python Flask 开发 API 接口的最佳实践 以下是基于 Flask 框架开发高效、安全、可维护的 API 接口的关键步骤和最佳实践: --- #### **1. 环境与项目配置** - **虚拟环境**:使用 `venv` 或 `pipenv` 隔离依赖。 ```bash python -m venv myenv && source myenv/bin/activate ``` - **依赖管理**:通过 `requirements.txt` 或 `pipenv` 管理依赖包,例如: ```text Flask==2.0.3 Flask-SQLAlchemy==3.0.2 Flask-JWT-Extended==4.4.0 ``` --- #### **2. 项目结构规范化** 采用模块化设计,避免代码冗余: ``` myapi/ ├── app/ │ ├── __init__.py │ ├── routes/ │ │ ├── auth.py # 认证相关路由 │ │ └── users.py # 用户管理路由 │ ├── models.py # 数据库模型 │ └── utils.py # 工具函数 ├── config.py # 配置文件(开发/生产环境) └── run.py # 启动入口 ``` --- #### **3. 请求处理与路由设计** - **使用 Flask-RESTful/Flask-RESTx**:简化资源路由定义和数据验证。 ```python from flask_restx import Api, Resource api = Api(app) @api.route('/users') class UserList(Resource): def get(self): return {"users": ["Alice", "Bob"]}, 200 ``` - **HTTP 方法规范**:遵循 RESTful 原则,例如 `GET /users` 获取列表,`POST /users` 创建新用户。 --- #### **4. 认证与授权** - **JWT 认证**:使用 `Flask-JWT-Extended` 实现 Token 机制。 ```python from flask_jwt_extended import JWTManager, create_access_token app.config["JWT_SECRET_KEY"] = "super-secret" jwt = JWTManager(app) @app.route("/login", methods=["POST"]) def login(): # 验证用户并生成 Token access_token = create_access_token(identity=username) return {"access_token": access_token} ``` --- #### **5. 数据库集成与 ORM** - **SQLAlchemy 集成**:通过 `Flask-SQLAlchemy` 管理数据库模型和迁移。 ```python from flask_sqlalchemy import SQLAlchemy app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///mydb.sqlite" db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) ``` - **迁移工具**:使用 `Alembic` 管理数据库变更[^3]。 --- #### **6. 错误处理与响应格式** - **统一错误响应**:自定义错误处理中间件。 ```python @app.errorhandler(404) def handle_404(error): return {"error": "Resource not found"}, 404 ``` - **数据验证**:使用 `marshmallow` 库进行请求参数和响应数据的序列化/反序列化。 --- #### **7. 文档生成与测试** - **Swagger/OpenAPI 支持**:通过 Flask-RESTx 自动生成 API 文档。 ```python api = Api(app, doc="/swagger/", title="My API") ``` - **单元测试**:使用 `pytest` 和 Flask 测试客户端。 ```python def test_get_users(client): response = client.get("/users") assert response.status_code == 200 ``` --- #### **8. 部署与优化** - **生产服务器**:使用 `Gunicorn` 或 `uWSGI` 替代 Flask 内置服务器。 ```bash gunicorn -w 4 run:app ``` - **配置管理**:通过环境变量区分开发和生产配置[^1]。 --- ### **示例代码** ```python from flask import Flask from flask_restx import Api, Resource app = Flask(__name__) api = Api(app) @api.route('/hello') class HelloWorld(Resource): def get(self): return {"message": "Hello, World!"}, 200 if __name__ == '__main__': app.run(debug=False) ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值