首页 > 编程语言 >使用Python和Flask框架实现简单的RESTful API

使用Python和Flask框架实现简单的RESTful API

时间:2024-08-09 08:59:52浏览次数:14  
标签:users Python app db Flask API user

目录

环境准备

创建Flask应用

运行Flask应用

测试API

注意事项


在当今的Web开发领域,RESTful API因其简洁性和高效性而备受欢迎。本文将引导你使用Python的Flask框架来创建一个简单的RESTful API,用于增删改查(CRUD)用户信息。

环境准备

在开始之前,请确保你的Python环境中已经安装了Flask。如果未安装,可以通过pip命令进行安装:

pip install flask
创建Flask应用

首先,我们需要创建一个新的Python文件,比如叫app.py,用于编写我们的Flask应用。

from flask import Flask, request, jsonify  
from flask_sqlalchemy import SQLAlchemy  
  
app = Flask(__name__)  
  
# 配置数据库URI(这里以SQLite为例,实际开发中可能需要更改为MySQL、PostgreSQL等)  
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'  
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False  
  
db = SQLAlchemy(app)  
  
# 定义用户模型  
class User(db.Model):  
    id = db.Column(db.Integer, primary_key=True)  
    username = db.Column(db.String(80), unique=True, nullable=False)  
    email = db.Column(db.String(120), unique=True, nullable=False)  
  
    def __repr__(self):  
        return '<User %r>' % self.username  
  
# 初始化数据库  
@app.before_first_request  
def create_tables():  
    db.create_all()  
  
# 定义API路由  
@app.route('/users', methods=['GET'])  
def get_users():  
    users = User.query.all()  
    output = []  
    for user in users:  
        user_data = {'id': user.id, 'username': user.username, 'email': user.email}  
        output.append(user_data)  
    return jsonify({'users': output})  
  
@app.route('/users', methods=['POST'])  
def create_user():  
    data = request.get_json()  
    new_user = User(username=data['username'], email=data['email'])  
    db.session.add(new_user)  
    db.session.commit()  
    return jsonify({'message': 'User created successfully'}), 201  
  
@app.route('/users/<int:user_id>', methods=['GET'])  
def get_user(user_id):  
    user = User.query.get_or_404(user_id)  
    return jsonify({'user': {'id': user.id, 'username': user.username, 'email': user.email}})  
  
@app.route('/users/<int:user_id>', methods=['PUT'])  
def update_user(user_id):  
    user = User.query.get_or_404(user_id)  
    data = request.get_json()  
    user.username = data['username']  
    user.email = data['email']  
    db.session.commit()  
    return jsonify({'message': 'User updated successfully'})  
  
@app.route('/users/<int:user_id>', methods=['DELETE'])  
def delete_user(user_id):  
    user = User.query.get_or_404(user_id)  
    db.session.delete(user)  
    db.session.commit()  
    return jsonify({'message': 'User deleted successfully'})  
  
if __name__ == '__main__':  
    app.run(debug=True)
运行Flask应用

保存app.py文件后,在命令行中运行以下命令来启动Flask开发服务器:

python app.py

默认情况下,Flask开发服务器会监听localhost5000端口。你可以在浏览器中或使用Postman、curl等工具来测试你的API。

测试API

注意事项

通过遵循上述最佳实践,你可以创建出既健壮又易于维护的RESTful API。希望这篇文章对你有所帮助,并激发你进一步探索Flask和RESTful API的兴趣!

  • 获取所有用户:GET http://127.0.0.1:5000/users
  • 创建一个新用户:POST http://127.0.0.1:5000/users,请求体为`{"username": "john_

    doe", "email": "[email protected]"}`

  • 获取单个用户:GET http://127.0.0.1:5000/users/1(其中1是用户的ID)
  • 更新单个用户:PUT http://127.0.0.1:5000/users/1,请求体为{"username": "new_username", "email": "[email protected]"}
  • 删除单个用户:DELETE http://127.0.0.1:5000/users/1
  • 错误处理:在实际应用中,你可能需要添加更详细的错误处理逻辑,比如处理数据库错误、验证输入数据等。

  • 数据验证:在上面的示例中,我们没有对用户输入的数据进行详细的验证。在实际应用中,你应该使用Flask的Request对象或者第三方库(如marshmallow)来验证输入数据。

  • 安全性:对于RESTful API,安全性是一个重要的问题。你应该考虑使用HTTPS来保护数据传输,以及实施适当的认证和授权机制。

  • 文档:为你的API编写清晰的文档,说明每个端点的用途、接受的参数、返回的数据格式等,这对于API的使用者非常重要。

  • 测试:编写测试用例来验证你的API是否按预期工作。这可以包括单元测试、集成测试以及端到端测试。

  • 数据库迁移:随着应用的发展,你的数据库模型可能会发生变化。使用数据库迁移工具(如Flask-Migrate)可以帮助你管理这些变化,同时保持数据的完整性和一致性。

  • 日志记录:记录API的访问日志和错误日志,可以帮助你了解API的使用情况,以及快速定位和解决问题。

标签:users,Python,app,db,Flask,API,user
From: https://blog.csdn.net/qq_33502371/article/details/140918478

相关文章

  • nodejs语言,MySQL数据库;springboot的个性化资讯推荐系统66257(免费领源码)计算机毕业设计
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,个性化资讯推荐系统当然也不能排除在外。个性化资讯推荐系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot技术构建的一个管理系统。整......
  • c#语言,SQL server数据库;基于Web的社区人员管理系统的设计与实现36303(免费领源码)计算机
    目 录摘要1绪论1.1慨述1.2课题意义1.3B/S体系结构介绍1.4ASP.NET框架介绍2 社区人员管理系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程52.2.3数据删除流程52.3系统功能分析62.3.1功能性分析62.3.2非功能性......
  • Python多种接口请求方式示例
    发送JSON数据如果你需要发送JSON数据,可以使用json参数。这会自动设置Content-Type为application/json。importrequestsimportjsonurl='http://example.com/api/endpoint'data={"key":"value","another_key":"another_value"......
  • 【优秀python毕设案例】基于python django的新媒体网络舆情数据爬取与分析
    摘   要如今在互联网时代下,微博成为了一种新的流行社交形式,是体现网络舆情的媒介之一。现如今微博舆论多带有虚假不实、恶意造谣等负面舆论,为了营造更好的网络环境,本设计提出了基于新媒体的网络舆情数据爬取与分析,主要对微博热点话题进行处理。本设计首先以Python为环......
  • 在 Rust 中嵌入 Python 来调用外部 Python 库
    我正在尝试学习如何将Python嵌入到Rust应用程序中。出于学习目的,我想创建一个运行永远循环的Rust脚本/应用程序。该循环会休眠设定的时间间隔,醒来后,它使用Pythonrequests库从互联网时间服务器获取当前时间。虽然这不是一个实际应用程序,但我的目标是了解如何从Rust调用......
  • 如何从我的 Python 应用程序更新我的 Facebook Business 令牌?
    我有一个使用FacebookBusiness库的Python应用程序。因此,我需要使用Facebook提供的令牌来访问我的见解并操纵它们。但是,这个令牌有一个很长的到期日期,但我想知道是否有办法自动更新这个令牌在我的应用程序中,这样它就不会停止运行。当然可以!你可以使用Facebook提......
  • 哪种编程语言更适合学习数据结构和算法:C++、Java 还是 Python?
    作为一名工程专业的学生,​​我正在尝试决定使用哪种编程语言来学习数据结构和算法(DSA)。我正在考虑C++,它提供高性能和强大的标准模板库,但对于初学者来说可能很复杂。Java具有强大的语法和内置集合,使DSA概念更容易掌握,尽管我不确定它与C++相比的性能。Python以其简单性和......
  • 同时运行多个异步阻塞函数 - Python
    我是Python和协程的新手,我正在尝试利用Python的asyncio库来并行处理阻塞函数。我正在使用python3.8.6。我有一个阻塞函数,它从数组输入中接收不同的输入,我需要每个输入的阻塞函数同时运行。我已经尝试过,但它们似乎仍然按顺序运行:asyncdefmain():tasks=[asyncio......
  • 使用两个连接的字符串调用变量 Python
    抱歉缺乏细节,因为我是python的初学者:c1=c2=c3=c4=c5=Falsex=int(input("Enteranumber1-5:"))ifx>5orx<1:print("Yournumbermustbebetween1and5")else:"c",x=True第8行是连接2个字符串的地方。我不确定......
  • 测试Python中是否存在可执行文件?
    在Python中,有没有一种可移植且简单的方法来测试可执行程序是否存在?简单我的意思是类似which命令的东西,这将是完美的。我不想手动搜索PATH或涉及尝试使用Popen&al执行它并查看它是否失败(这就是我现在正在做的事情,但想象它是launchmissiles)......