{"id":15019697,"url":"https://github.com/olivermao/flaskautoapibuilder","last_synced_at":"2025-05-02T12:31:23.472Z","repository":{"id":206463983,"uuid":"716976760","full_name":"OliverMao/FlaskAutoApiBuilder","owner":"OliverMao","description":"Faab: A Flask-based Tool for Automated API Generation and Documentation with Enhanced Web Development Features","archived":false,"fork":false,"pushed_at":"2024-04-13T04:17:26.000Z","size":421,"stargazers_count":73,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-21T18:04:10.201Z","etag":null,"topics":["flask","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OliverMao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-10T09:25:44.000Z","updated_at":"2024-04-03T11:16:17.000Z","dependencies_parsed_at":"2023-11-13T03:29:26.370Z","dependency_job_id":"d7bb7d73-0256-419c-80a9-933de1c35b99","html_url":"https://github.com/OliverMao/FlaskAutoApiBuilder","commit_stats":{"total_commits":34,"total_committers":1,"mean_commits":34.0,"dds":0.0,"last_synced_commit":"ca84c7ff16b7a57ff285c14eeb73283217eb37d3"},"previous_names":["olivermao/autoflask","olivermao/flaskautoapibuilder"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OliverMao%2FFlaskAutoApiBuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OliverMao%2FFlaskAutoApiBuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OliverMao%2FFlaskAutoApiBuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OliverMao%2FFlaskAutoApiBuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OliverMao","download_url":"https://codeload.github.com/OliverMao/FlaskAutoApiBuilder/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252038148,"owners_count":21684631,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["flask","python"],"created_at":"2024-09-24T19:53:54.287Z","updated_at":"2025-05-02T12:31:23.169Z","avatar_url":"https://github.com/OliverMao.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n\u003cdiv align=\"center\"\u003e\u003ca href=\"https://github.com/OliverMao/FlaskAutoApiBuilder\" \u003e\u003cimg width=\"300\" src=\"https://z1.ax1x.com/2023/11/14/piYkvUU.png\" alt=\"piYkvUU.png\" border=\"0\" /\u003e\u003c/a\u003e\n\u003ch1\u003e 📦 Faab - Flask Auto API Builder\u003c/h1\u003e\u003cdiv\u003e\u003ca href=\"https://github.com/OliverMao/FlaskAutoApiBuilder\" \u003e\u003cimg  src=\"https://img.shields.io/badge/license-GPL3.0-blue.svg\" alt=\"license\" border=\"0\" /\u003e\u003c/a\u003e\n  \u003cimg  src=\"https://img.shields.io/github/stars/OliverMao/FlaskAutoApiBuilder.svg\" alt=\"stars\" border=\"0\" /\u003e\n  \u003cimg  src=\"https://img.shields.io/github/forks/OliverMao/FlaskAutoApiBuilder.svg\" alt=\"forks\" border=\"0\" /\u003e\n  \u003cimg  src=\"https://img.shields.io/badge/version-0.1.6-686480r.svg\" alt=\"forks\" border=\"0\" /\u003e\n\u003c/div\u003e\u003c/div\u003e\n\n\n\n\n\n\n\n## 项目简介\n\n\"Flask Auto API Builder\" 是一个基于 Flask 框架的自动 API 构建工具。\n\n本工具可以根据给定的数据模型或数据库模式自动生成 API 端点，包括创建、读取、更新和删除（CRUD）操作。它们可以减少开发人员手动编写和配置 API 端点的工作量，提高开发效率。同时可以生成Swagger文档，便于API调试。此外，Faab还提供了常见的Web工具，如用户鉴权、上传下载等功能，进一步增强了开发者的体验。\n\n## 功能特性\n\n- 用户身份验证：通过用户名和密码进行用户身份验证，确保只有授权用户可以访问受保护的功能。\n- 创建资源：允许用户创建新的资源，例如创建新的文章、任务或事件等。\n- 读取资源：提供对已存在资源的读取访问权限，例如获取文章的详细信息或查看任务列表。\n- 更新资源：允许用户对现有资源进行更新，例如编辑文章内容或修改任务状态。\n- 删除资源：允许用户删除不再需要的资源，例如删除文章、任务或事件等。\n- 搜索功能：提供基于关键字的搜索功能，使用户能够快速找到所需的资源。\n- 分页和排序：支持对资源列表进行分页和排序，以便用户可以方便地浏览和管理大量数据。\n- 文件上传和下载：允许用户上传文件到服务器，并提供下载已上传的文件的功能。\n- 数据验证：对用户输入的数据进行验证，确保数据的完整性和一致性。\n- 错误处理：提供友好的错误提示和处理机制，使用户能够轻松识别和解决问题。\n- 访问控制：基于用户角色和权限，限制用户对敏感资源和功能的访问权限。\n- 日志记录：记录关键操作和事件，以便进行故障排查和审计。\n- API 文档生成：自动生成 API 文档，使开发人员和用户能够了解可用的 API 端点和参数。\n\n## 技术栈与依赖项\n\n- Flask\n- SQLAlchemy\n- flasgger\n- PyJWT\n- Flask-CORS\n- Redis\n- PyMySQL\n- RPC\n- Flask-JSONRPC\n- FFmpeg\n\n## 快速开始\n\n0. 创建app.py\n1. 创建factory.py、blueprints（根据开发项目自定）\n\t\n\t\u003e 可直接使用Faab提供的demo进行开发\n\t\n2. 安装Faab：\n    ```\n    pip install Faab\n    ```\n3. 项目中引入\n    ```python\n    from Faab import Faab\n    \n    from Faab.FaabJWT import jwt_authentication\n    from blueprints.test import test_bp\n    from blueprints.test.model import Users, TabNavMenu\n    import factory as fac \n    ```\n4. 配置数据库连接\n\t\u003e 一定要新建一个名为faab的数据库\n   \n    ```python\n    class DBConfig(object):\n        # DB及Flask基础配置\n        user = 'faab'\n        host = 'localhost'\n        password = 'faab'\n        SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://%s:%s@%s:3306/%s' % (user, password, host, 'faab')\n        SQLALCHEMY_BINDS = {\n            'test': 'mysql+pymysql://%s:%s@%s:3306/%s' % (user, password, host, 'test')\n        }\n        SECRET_KEY = 'session_key'\n    ```\n5. 配置AutoAPI Model与蓝图\n\t```python\n\tclass Spu(db.Model):\n    __bind_key__ = 'test'\n    __tablename__ = 'spu'\n    __table_args__ = {'extend_existing': True}\n    id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n    name = db.Column(db.String(255), default='')\n    desc = db.Column(db.String(255), default='')\n    price = db.Column(db.Integer, default=0)\n    add_time = db.Column(db.DateTime, default=db.func.now())\n    is_delete = db.Column(db.Integer, default=0)\n\t\n    class Users(FaabFieldPermissionMixin, db.Model):\n        __bind_key__ = 'test'\n        __tablename__ = 'users'\n        __table_args__ = {'extend_existing': True}\n        id = db.Column(db.Integer, primary_key=True, autoincrement=True)\n        faab_uid = db.Column(db.String(255), unique=True)\n        username = db.Column(db.String(255), unique=True)\n        password = db.Column(db.String(255))\n        nickname = db.Column(db.String(255), default='')\n        is_delete = db.Column(db.Integer, default=0)\n\t\n        def accessible(self, user):\n           # 根据user的角色或权限返回不同的字段列表\n           if user.get_role() == 'admin':\n               fields = ['faab_uid', 'nickname', 'username', 'password', 'id']  # 管理员可以访问的字段\n               allow_other_row = True  # 允许访问非此faab_uid的行\n           else:\n\t            fields = ['faab_uid', 'nickname']  # 其他用户只能访问部分字段\n\t            allow_other_row = False  # 不允许访问非此faab_uid的行\n\t        return {'fields': fields, 'allow_other_row': allow_other_row}\n   \n   ```\n   根据是否需要字段级权限控制，进行数据表model是否继承FaabFieldPermissionMixin类。如继承类，则_Need_keys查询对权限字段进行交集处理后返回。\n   \n    ```python\n    models = [\n        [\n            {\n                \"model\": your_model,\n                \"bp\": your_blueprints,\n                \"url_prefix\": \"your_url_prefix\"\n            }\n        ]\n    ]\n    \n    app = Faab(__name__)\n    app.add_models(models)\n    app.add_db_config(DBConfig)\n    fac.register(app) #可选\n    ```\n6. 配置启动参数\n    ```python\n    if __name__ == '__main__':\n        app.run(debug=True, port=5000, host='0.0.0.0')\n    ```\n7. 运行\n    ```shell\n    python app.py\n    ```\n8. 在浏览器中访问Swagger文档：\n   ```\n   http://localhost:5000/apidocs\n   ```\n\n\n## Faab开发文档\n\n详细的文档将在正式版更新。\n\n## RPC\n\n对于用户权限控制，采用了总表的方式，位于faab数据库的faab_users表内进行了身份权限的控制管理。faab_users表采用了Snowflake，方便分布式系统对用户的UID进行管理。如使用字段权限管理，在用户注册时请调用RPC接口如\n```python\nurl = 'http://127.0.0.1:8011/rpc'\npayload = {\n\"jsonrpc\": \"2.0\",\n\"method\": \"FaabRegister\",\n\"params\": {\"username\": username, \"password\": password, \"role\": \"user\"},\n\"id\": 1\n}\n```\nresult返回值code:200为正确加入，其余情况请勿添加新用户。对于用户权限名称，例如admin、user，均由开发者进行控制，访问权限于model中进行管理。\n\n## 开源不易, 有了您的赞助, 我们会做的更好~\n\n  \u003cimg src=\"./static/donate.jpg\" alt style=\"width: 20%;\"\u003e\n\n\n## 许可证\n\n本项目采用 GNU 通用公共许可证（GNU General Public License，简称 GPL）进行许可。这意味着您有权使用、复制、修改和分发本项目的源代码和衍生作品，但需要遵守以下条件：\n\n1. 版权声明：您需要在您的衍生作品中包含原始项目的版权声明和许可证信息。\n\n2. 开放源代码：如果您对本项目进行修改或扩展，并将其作为衍生作品分发，您需要以相同的许可证（GPL）分发您的修改和源代码。\n\n3. 无保证：该项目没有任何明示或暗示的保证。作者不对项目的适用性、可靠性或准确性提供任何保证，亦不承担任何责任。您自担风险使用本项目。\n\n4. 贡献：如果您对本项目进行贡献，您同意将您的贡献授予原始项目的所有者，并同意您的贡献将在原始项目的 GPL 许可下分发。\n\n有关完整的许可证文本，请参阅项目根目录中的 LICENSE 文件。\n\n## 技术反馈与交流群\n\n  \u003cimg src=\"./static/official.jpg\" alt style=\"width: 20%;\"\u003e\n\n- 加入交流群交流\n- 获取Faab开发教程文章\n- 与作者进行相关交流\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folivermao%2Fflaskautoapibuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Folivermao%2Fflaskautoapibuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Folivermao%2Fflaskautoapibuilder/lists"}